Как правильно сделать чтобы при нажатии на кнопку сменить окно

Как сделать чтобы после нажатия на клавишу 'продолжить' в ОКНЕ1, я переходил на ОКНО2.

А при нажатии на клавишу 'вернуться' в ОКНЕ2, я переходил на ОКНО1 и при нажатии на клавишу 'продолжить' в ОКНЕ2, я переходил на ОКНО3.

А при нажатии на клавишу 'вернуться' в ОКНЕ3, я переходил на ОКНО2

ОКНО1

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Window1(object):
    def setupUi(self, Window1):
        Window1.setObjectName('Window1')
        Window1.resize(450, 800)
        Window1.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window1.setWindowIcon(icon)
        Window1.setStyleSheet('background-color: #2c2c39')
        self.Main1 = QtWidgets.QWidget(Window1)
        self.Main1.setObjectName('Main1')
        
        self.text_1 = QtWidgets.QLabel(self.Main1)
        self.text_1.setGeometry(QtCore.QRect(0, 0, 450, 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: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.text_1.setScaledContents(False)
        self.text_1.setAlignment(QtCore.Qt.AlignCenter)
        self.text_1.setWordWrap(False)
        self.text_1.setOpenExternalLinks(False)
        self.text_1.setObjectName('text_1')

        self.input_amount_1 = QtWidgets.QLineEdit(self.Main1)
        self.input_amount_1.setGeometry(QtCore.QRect(0, 58, 450, 40))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.input_amount_1.setFont(font)
        self.input_amount_1.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.input_amount_1.setAlignment(QtCore.Qt.AlignCenter)
        self.input_amount_1.setObjectName('input_amount_1')

        self.but_1 = QtWidgets.QPushButton(self.Main1)
        self.but_1.setGeometry(QtCore.QRect(0, 740, 450, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_1.setFont(font)
        self.but_1.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_1.setObjectName('but_1')

        Window1.setCentralWidget(self.Main1)


        self.retranslateUi(Window1)
        QtCore.QMetaObject.connectSlotsByName(Window1)
        
        #ПРОДОЛЖИТЬ
        self.but_1.clicked.connect(self.proceed_1)

    def retranslateUi(self, Window1):
        _translate = QtCore.QCoreApplication.translate
        self.but_1.setText(_translate('Window1', 'ПРОДОЛЖИТЬ'))
        self.text_1.setText(_translate('Window1', 'ОКНО 1'))
   
    #ПРОДОЛЖИТЬ
    def proceed_1(self):
        pass


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window1 = QtWidgets.QMainWindow()
    ui = Ui_Window1()
    ui.setupUi(Window1)
    Window1.show()
    #QtCore.QTimer.singleShot(0, Window1.close)
    sys.exit(app.exec_())

ОКНО2

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Window2(object):
    def setupUi(self, Window2):
        Window2.setObjectName('Window2')
        Window2.resize(450, 800)
        Window2.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window2.setWindowIcon(icon)
        Window2.setStyleSheet('background-color: #2c2c39')
        self.Main2 = QtWidgets.QWidget(Window2)
        self.Main2.setObjectName('Main2')

        self.text_2 = QtWidgets.QLabel(self.Main2)
        self.text_2.setGeometry(QtCore.QRect(0, 0, 450, 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: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.text_2.setScaledContents(False)
        self.text_2.setAlignment(QtCore.Qt.AlignCenter)
        self.text_2.setWordWrap(False)
        self.text_2.setOpenExternalLinks(False)
        self.text_2.setObjectName('text_2')

        self.input_amount_2 = QtWidgets.QLineEdit(self.Main2)
        self.input_amount_2.setGeometry(QtCore.QRect(0, 58, 450, 40))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.input_amount_2.setFont(font)
        self.input_amount_2.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.input_amount_2.setAlignment(QtCore.Qt.AlignCenter)
        self.input_amount_2.setObjectName('input_amount_2')

        self.but_2 = QtWidgets.QPushButton(self.Main2)
        self.but_2.setGeometry(QtCore.QRect(0, 740, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        self.but_2.setFont(font)
        self.but_2.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_2.setObjectName('but_2')

        self.but_3 = QtWidgets.QPushButton(self.Main2)
        self.but_3.setGeometry(QtCore.QRect(225, 740, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_3.setFont(font)
        self.but_3.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_3.setObjectName('but_3')

        
        Window2.setCentralWidget(self.Main2)

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

        #ВЕРНУТЬСЯ
        self.but_2.clicked.connect(self.return_1)

        #ПРОДОЛЖИТЬ
        self.but_3.clicked.connect(self.proceed_2)

    def retranslateUi(self, Window2):
        _translate = QtCore.QCoreApplication.translate
        self.but_2.setText(_translate('Window2', 'ВЕРНУТЬСЯ'))
        self.text_2.setText(_translate('Window2', 'ОКНО 2'))
        self.but_3.setText(_translate('Window2', 'ПРОДОЛЖИТЬ'))

    #ВЕРНУТЬСЯ
    def return_1(self):
        pass

    #ПРОДОЛЖИТЬ
    def proceed_2(self):
        pass


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window2 = QtWidgets.QMainWindow()
    ui = Ui_Window2()
    ui.setupUi(Window2)
    Window2.show()
    sys.exit(app.exec_())

ОКНО3

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Window3(object):
    def setupUi(self, Window3):
        Window3.setObjectName('Window3')
        Window3.resize(450, 800)
        Window3.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window3.setWindowIcon(icon)
        Window3.setStyleSheet('background-color: #2c2c39')
        self.Main3 = QtWidgets.QWidget(Window3)
        self.Main3.setObjectName('Main3')
        
        self.text_3 = QtWidgets.QLabel(self.Main3)
        self.text_3.setGeometry(QtCore.QRect(0, 0, 450, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.text_3.setFont(font)
        self.text_3.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.text_3.setScaledContents(False)
        self.text_3.setAlignment(QtCore.Qt.AlignCenter)
        self.text_3.setWordWrap(False)
        self.text_3.setOpenExternalLinks(False)
        self.text_3.setObjectName('text_3')

        self.input_amount_3 = QtWidgets.QLineEdit(self.Main3)
        self.input_amount_3.setGeometry(QtCore.QRect(0, 58, 450, 40))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.input_amount_3.setFont(font)
        self.input_amount_3.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.input_amount_3.setAlignment(QtCore.Qt.AlignCenter)
        self.input_amount_3.setObjectName('input_amount_3')

        self.but_4 = QtWidgets.QPushButton(self.Main3)
        self.but_4.setGeometry(QtCore.QRect(0, 740, 450, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_4.setFont(font)
        self.but_4.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_4.setObjectName('but_4')

        Window3.setCentralWidget(self.Main3)

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

        #ВЕРНУТЬСЯ
        self.but_4.clicked.connect(self.return_2)

    def retranslateUi(self, Window3):
        _translate = QtCore.QCoreApplication.translate
        self.but_4.setText(_translate('Window3', 'ВЕРНУТЬСЯ'))
        self.text_3.setText(_translate('Window3', 'ОКНО 3'))

    #ВЕРНУТЬСЯ
    def return_2(self):
        pass


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window3 = QtWidgets.QMainWindow()
    ui = Ui_Window3()
    ui.setupUi(Window3)
    Window3.show()
    sys.exit(app.exec_())

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

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

НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.

Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

from PyQt5 import QtCore, QtGui, QtWidgets


# ОКНО1
class Ui_Window1(object):
    def setupUi(self, Window1):
        Window1.setObjectName('Window1')
        Window1.resize(450, 800)
        Window1.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window1.setWindowIcon(icon)
        Window1.setStyleSheet('background-color: #2c2c39')
        self.Main1 = QtWidgets.QWidget(Window1)
        self.Main1.setObjectName('Main1')
        
        self.text_1 = QtWidgets.QLabel(self.Main1)
        self.text_1.setGeometry(QtCore.QRect(0, 0, 450, 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: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.text_1.setScaledContents(False)
        self.text_1.setAlignment(QtCore.Qt.AlignCenter)
        self.text_1.setWordWrap(False)
        self.text_1.setOpenExternalLinks(False)
        self.text_1.setObjectName('text_1')

        self.input_amount_1 = QtWidgets.QLineEdit(self.Main1)
        self.input_amount_1.setGeometry(QtCore.QRect(0, 58, 450, 40))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.input_amount_1.setFont(font)
        self.input_amount_1.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.input_amount_1.setAlignment(QtCore.Qt.AlignCenter)
        self.input_amount_1.setObjectName('input_amount_1')

        self.but_1 = QtWidgets.QPushButton(self.Main1)
#                                              740
        self.but_1.setGeometry(QtCore.QRect(0, 580, 450, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_1.setFont(font)
        self.but_1.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_1.setObjectName('but_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', 'ПРОДОЛЖИТЬ'))
        self.text_1.setText(_translate('Window1', 'ОКНО 1'))


class Ui_Window2(object):
    def setupUi(self, Window2):
        Window2.setObjectName('Window2')
        Window2.resize(450, 800)
        Window2.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window2.setWindowIcon(icon)
        Window2.setStyleSheet('background-color: #2c2c39')
        self.Main2 = QtWidgets.QWidget(Window2)
        self.Main2.setObjectName('Main2')

        self.text_2 = QtWidgets.QLabel(self.Main2)
        self.text_2.setGeometry(QtCore.QRect(0, 0, 450, 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: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.text_2.setScaledContents(False)
        self.text_2.setAlignment(QtCore.Qt.AlignCenter)
        self.text_2.setWordWrap(False)
        self.text_2.setOpenExternalLinks(False)
        self.text_2.setObjectName('text_2')

        self.input_amount_2 = QtWidgets.QLineEdit(self.Main2)
        self.input_amount_2.setGeometry(QtCore.QRect(0, 58, 450, 40))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.input_amount_2.setFont(font)
        self.input_amount_2.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.input_amount_2.setAlignment(QtCore.Qt.AlignCenter)
        self.input_amount_2.setObjectName('input_amount_2')

        self.but_2 = QtWidgets.QPushButton(self.Main2)
        self.but_2.setGeometry(QtCore.QRect(0, 580, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        self.but_2.setFont(font)
        self.but_2.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_2.setObjectName('but_2')

        self.but_3 = QtWidgets.QPushButton(self.Main2)
        self.but_3.setGeometry(QtCore.QRect(225, 580, 225, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_3.setFont(font)
        self.but_3.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_3.setObjectName('but_3')

        
        Window2.setCentralWidget(self.Main2)

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

    def retranslateUi(self, Window2):
        _translate = QtCore.QCoreApplication.translate
        self.but_2.setText(_translate('Window2', 'ВЕРНУТЬСЯ'))
        self.text_2.setText(_translate('Window2', 'ОКНО 2'))
        self.but_3.setText(_translate('Window2', 'ПРОДОЛЖИТЬ'))


class Ui_Window3(object):
    def setupUi(self, Window3):
        Window3.setObjectName('Window3')
        Window3.resize(450, 800)
        Window3.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap('icon.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Window3.setWindowIcon(icon)
        Window3.setStyleSheet('background-color: #2c2c39')
        self.Main3 = QtWidgets.QWidget(Window3)
        self.Main3.setObjectName('Main3')
        
        self.text_3 = QtWidgets.QLabel(self.Main3)
        self.text_3.setGeometry(QtCore.QRect(0, 0, 450, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.text_3.setFont(font)
        self.text_3.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.text_3.setScaledContents(False)
        self.text_3.setAlignment(QtCore.Qt.AlignCenter)
        self.text_3.setWordWrap(False)
        self.text_3.setOpenExternalLinks(False)
        self.text_3.setObjectName('text_3')

        self.input_amount_3 = QtWidgets.QLineEdit(self.Main3)
        self.input_amount_3.setGeometry(QtCore.QRect(0, 58, 450, 40))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.input_amount_3.setFont(font)
        self.input_amount_3.setStyleSheet('background-color: #edf3c8;\n'
'border:2px solid#d9c7b4;\n'
'color:#000000')
        self.input_amount_3.setAlignment(QtCore.Qt.AlignCenter)
        self.input_amount_3.setObjectName('input_amount_3')

        self.but_4 = QtWidgets.QPushButton(self.Main3)
        self.but_4.setGeometry(QtCore.QRect(0, 580, 450, 60))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(14)
        self.but_4.setFont(font)
        self.but_4.setStyleSheet('QPushButton {\n'
'    color: #ffffff;\n'
'    background-color: #7f6a62;\n'
'    border-radius: 0;\n'
'}\n'
'\n'
'')
        self.but_4.setObjectName('but_4')
        Window3.setCentralWidget(self.Main3)

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

    def retranslateUi(self, Window3):
        _translate = QtCore.QCoreApplication.translate
        self.but_4.setText(_translate('Window3', 'ВЕРНУТЬСЯ'))
        self.text_3.setText(_translate('Window3', 'ОКНО 3'))
        

class Window3(QtWidgets.QMainWindow, Ui_Window3):
    def __init__(self, parent=None):
        super().__init__()
        self.setupUi(self)
        self.parent = parent

        #ВЕРНУТЬСЯ
        self.but_4.clicked.connect(self.return_2)

    #ВЕРНУТЬСЯ
    def return_2(self):
        self.parent.window2.show()
        self.hide()
        

class Window2(QtWidgets.QMainWindow, Ui_Window2):
    def __init__(self, parent=None):
        super().__init__()
        self.setupUi(self)
        self.parent = parent

        #ВЕРНУТЬСЯ
        self.but_2.clicked.connect(self.return_1)

        #ПРОДОЛЖИТЬ
        self.but_3.clicked.connect(self.proceed_2)

    #ВЕРНУТЬСЯ
    def return_1(self):
        self.parent.show()
        self.hide()

    #ПРОДОЛЖИТЬ
    def proceed_2(self):
        self.parent.window3.show()
        self.hide()
        
        

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

        #ПРОДОЛЖИТЬ
        self.but_1.clicked.connect(self.proceed_1)
        
        self.window2 = Window2(self)
        self.window3 = Window3(self)
        
    #ПРОДОЛЖИТЬ
    def proceed_1(self):
        print(f'def proceed_1(self):') # 
#        self.window2 = Window2(self)
        self.window2.show()
        self.hide()
        
        

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

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

→ Ссылка