Как сделать не основное окно с функциональными кнопками на PyQt?

Я хочу создать в приложении окно, которое появляется по нажатию кнопки.
Это окно также должно содержать функциональные кнопки.

Объект приложения уже создан, так как, опять же, я хочу создать не основное окно. Когда я создаю QWidget, окно появляется на долю секунды и исчезает.

Пример кода, в который нужно добавить окно:

from PyQt5 import QtCore, QtWidgets
    
class MyWindow(QtWidgets.QWidget):
    
    def __init__(self, parent=None):

        QtWidgets.QWidget.__init__(self, parent)
        self.label = QtWidgets.QLabel("Моя надпись!")
        self.label.setAlignment(QtCore.Qt.AlignHCenter)
        self.BtnQuit = QtWidgets.QPushButton("Закрыть окно")
        self.BtnContinue = QtWidgets.QPushButton("К другому окну")
        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addWidget(self.label)
        self.vbox.addWidget(self.BtnQuit)
        self.vbox.addWidget(self.BtnContinue)
        self.setLayout(self.vbox)
        self.BtnQuit.clicked.connect(QtWidgets.qApp.quit)

        #С помощью этой кнопки мы будем переходить на другое окно (Вместо выхода)
        self.BtnContinue.clicked.connect(QtWidgets.qApp.quit)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.setWindowTitle("Окно для открытия другого окна")
    window.resize(300, 100)
    window.show()
    sys.exit(app.exec_())

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

Автор решения: S. Nick
  1. Создайте второе окно, пусть это будет класс SecondWindow().

  2. Создайте экземпляр класса:

    self.secondWindow = SecondWindow()

  3. Сделайте привязку сигнала и слота:

    self.btnContinue.clicked.connect(self.qo_second_window)

  4. В методе qo_second_window() откройте второе окно:

    self.secondWindow.show()


from PyQt5 import QtCore, QtWidgets


class SecondWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('SecondWindow')
        self.resize(400, 400)
        
        self.label = QtWidgets.QLabel("Моя надпись SecondWindow!")
        self.label.setAlignment(QtCore.Qt.AlignCenter) 

        self.pushButton = QtWidgets.QPushButton("Вернуться в MyWindow")

        self.vbox = QtWidgets.QVBoxLayout(self)  
        self.vbox.addWidget(self.label)
        self.vbox.addWidget(self.pushButton)        

    
class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        
        self.label = QtWidgets.QLabel("Моя надпись!")
        self.label.setAlignment(QtCore.Qt.AlignHCenter)
        
        self.btnQuit = QtWidgets.QPushButton("Закрыть окно")
        self.btnQuit.clicked.connect(QtWidgets.qApp.quit)
        
        # С помощью этой кнопки мы будем переходить на другое окно
        self.btnContinue = QtWidgets.QPushButton("К другому окну")
        self.btnContinue.clicked.connect(self.qo_second_window)
        
        self.vbox = QtWidgets.QVBoxLayout(self)
        self.vbox.addWidget(self.label)
        self.vbox.addWidget(self.btnQuit)
        self.vbox.addWidget(self.btnContinue)

 # +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv       
        self.secondWindow = SecondWindow()
        self.secondWindow.pushButton.clicked.connect(self.qo_main_window)
        
    def qo_second_window(self):
        self.secondWindow.show()
        self.hide()

    def qo_main_window(self):
        self.show()    
        self.secondWindow.hide()
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.setWindowTitle("Окно для открытия другого окна")
    window.resize(300, 100)
    window.show()
    sys.exit(app.exec_())

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

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

→ Ссылка