Последовательное добавление виджетов

Я хочу по нажатию на кнопку 'КНОПКА1' переменная but_1 добавить на экран кнопку 'КНОПКА2' переменная but_2.

По нажатию на кнопку 'КНОПКА2' переменная but_2 добавить на экран кнопку 'КНОПКА3' переменная but_3.

По нажатию на кнопку 'КНОПКА3' переменная but_3 добавить на экран рамку 'ТЕКСТ2' переменная text_2.

Начальный вид окна

введите сюда описание изображения

После нажатия на кнопку 'КНОПКА1' переменная but_1

введите сюда описание изображения

После нажатия на кнопку 'КНОПКА2' переменная but_2

введите сюда описание изображения

После нажатия на 'КНОПКА3' переменная but_3

введите сюда описание изображения

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Window1(object):
    def setupUi(self, Window1):
        Window1.setObjectName('Window1')
        Window1.resize(450, 336)
        Window1.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window1.setWindowIcon(icon)
        Window1.setStyleSheet('background-color: #c3dce5')
        self.Main1 = QtWidgets.QWidget(Window1)
        self.Main1.setObjectName('Main1')

        self.but_1 = QtWidgets.QPushButton(self.Main1)
        self.but_1.setGeometry(QtCore.QRect(0, 276, 451, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_1.setFont(font)
        self.but_1.setStyleSheet('QPushButton {\n'
'    color: #000000;\n'
'    background-color: #8598a6;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'QPushButton: pressed {\n'
'    background-color: #667480;\n'
'}\n'
'')
        self.but_1.setObjectName('but_1')

        self.text_1 = QtWidgets.QLabel(self.Main1)
        self.text_1.setGeometry(QtCore.QRect(0, 0, 451, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.text_1.setFont(font)
        self.text_1.setStyleSheet('background-color: #4c5359;\n'
'border:2px solid#363940;\n'
'color:#000000')
        self.text_1.setAlignment(QtCore.Qt.AlignCenter)
        self.text_1.setObjectName('text_1')

        Window1.setCentralWidget(self.Main1)

        self.retranslateUi(Window1)
        QtCore.QMetaObject.connectSlotsByName(Window1)

    def retranslateUi(self, Window1):
        _translate = QtCore.QCoreApplication.translate
        self.but_1.setText(_translate('Window1', 'КНОПКА1'))      
        self.text_1.setText(_translate('Window1', 'ТЕКСТ1'))

class MainWindow(QtWidgets.QMainWindow, Ui_Window1):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.but_1.clicked.connect(self.create1)
        #Создать 'КНОПКА3' после нажатия на 'КНОПКА2'
        #self.but_2.clicked.connect(self.create2)
        #Создать 'ТЕКСТ2' после нажатия на 'КНОПКА3'
        #self.but_3.clicked.connect(self.create3)

    def create1(self):        
        self.but_2 = QtWidgets.QPushButton(self.Main1)
        self.but_2.setGeometry(QtCore.QRect(0, 60, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_2.setFont(font)
        self.but_2.setStyleSheet('QPushButton {\n'
'    color: #000000;\n'
'    background-color: #8598a6;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'QPushButton: pressed {\n'
'    background-color: #667480;\n'
'}\n'
'')
        self.but_2.setObjectName('but_2')
        self.but_2.setText('КНОПКА2')
        self.but_2.show()


    def create2(self):        
        self.but_3 = QtWidgets.QPushButton(self.Main1)
        self.but_3.setGeometry(QtCore.QRect(225, 60, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_3.setFont(font)
        self.but_3.setStyleSheet('QPushButton {\n'
'    color: #000000;\n'
'    background-color: #8598a6;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'QPushButton: pressed {\n'
'    background-color: #667480;\n'
'}\n'
'')
        self.but_3.setObjectName('but_3')
        self.but_3.setText('КНОПКА3')
        self.but_3.show()


    def create3(self):
        self.text_2 = QtWidgets.QLabel(self.Main1)
        self.text_2.setGeometry(QtCore.QRect(0, 120, 451, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.text_2.setFont(font)
        self.text_2.setStyleSheet('background-color: #4c5359;\n'
'border:2px solid#363940;\n'
'color:#000000')
        self.text_2.setAlignment(QtCore.Qt.AlignCenter)
        self.text_2.setObjectName('text_2')
        self.but_3.setText('ТЕКСТ2')
        self.but_3.show()


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())


Ответы (1 шт):

Автор решения: S. Nick

Вы почти были у цели.

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Window1(object):
    def setupUi(self, Window1):
        Window1.setObjectName('Window1')
        Window1.resize(450, 336)
        Window1.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window1.setWindowIcon(icon)
        Window1.setStyleSheet('background-color: #c3dce5')
        self.Main1 = QtWidgets.QWidget(Window1)
        self.Main1.setObjectName('Main1')

        self.but_1 = QtWidgets.QPushButton(self.Main1)
        self.but_1.setGeometry(QtCore.QRect(0, 276, 451, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_1.setFont(font)
        self.but_1.setStyleSheet('QPushButton {\n'
'    color: #000000;\n'
'    background-color: #8598a6;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'QPushButton: pressed {\n'
'    background-color: #667480;\n'
'}\n'
'')
        self.but_1.setObjectName('but_1')

        self.text_1 = QtWidgets.QLabel(self.Main1)
        self.text_1.setGeometry(QtCore.QRect(0, 0, 451, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.text_1.setFont(font)
        self.text_1.setStyleSheet('background-color: #4c5359;\n'
'border:2px solid#363940;\n'
'color:#000000')
        self.text_1.setAlignment(QtCore.Qt.AlignCenter)
        self.text_1.setObjectName('text_1')

        Window1.setCentralWidget(self.Main1)

        self.retranslateUi(Window1)
        QtCore.QMetaObject.connectSlotsByName(Window1)

    def retranslateUi(self, Window1):
        _translate = QtCore.QCoreApplication.translate
        self.but_1.setText(_translate('Window1', 'КНОПКА1'))      
        self.text_1.setText(_translate('Window1', 'ТЕКСТ1'))


class MainWindow(QtWidgets.QMainWindow, Ui_Window1):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.but_1.clicked.connect(self.create1)
        #Создать 'КНОПКА3' после нажатия на 'КНОПКА2'
        #self.but_2.clicked.connect(self.create2)
        #Создать 'ТЕКСТ2' после нажатия на 'КНОПКА3'
        #self.but_3.clicked.connect(self.create3)

    def create1(self):        
        self.but_2 = QtWidgets.QPushButton(self.Main1)
        self.but_2.setGeometry(QtCore.QRect(0, 60, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_2.setFont(font)
        self.but_2.setStyleSheet('QPushButton {\n'
'    color: #000000;\n'
'    background-color: #8598a6;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'QPushButton: pressed {\n'
'    background-color: #667480;\n'
'}\n'
'')
        self.but_2.setObjectName('but_2')
        self.but_2.setText('КНОПКА2')
        self.but_2.show()
        self.but_2.clicked.connect(self.create2)                       # +++

    def create2(self):        
        self.but_3 = QtWidgets.QPushButton(self.Main1)
        self.but_3.setGeometry(QtCore.QRect(225, 60, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_3.setFont(font)
        self.but_3.setStyleSheet('QPushButton {\n'
'    color: #000000;\n'
'    background-color: #8598a6;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'QPushButton: pressed {\n'
'    background-color: #667480;\n'
'}\n'
'')
        self.but_3.setObjectName('but_3')
        self.but_3.setText('КНОПКА3')
        self.but_3.show()
        self.but_3.clicked.connect(self.create3)                       # +++


    def create3(self):
        self.text_2 = QtWidgets.QLabel(self.Main1)
        self.text_2.setGeometry(QtCore.QRect(0, 120, 451, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.text_2.setFont(font)
        self.text_2.setStyleSheet('background-color: #4c5359;\n'
'border:2px solid#363940;\n'
'color:#000000')
        self.text_2.setAlignment(QtCore.Qt.AlignCenter)
        self.text_2.setObjectName('text_2')
        
        self.text_2.setText('ТЕКСТ2')                                  # +++
        self.text_2.show()                                             # +++
        
#        self.but_3.setText('ТЕКСТ2')
#        self.but_3.show()


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка