Как вызвать одно главное окно в другое главное окно в Qt (или PyQt)

В моем проекте я создал два основных окна, которые я хочу вызвать mainwindow2 из mainwindow1 (которое работает). в mainwindow1 я уже использовал app.exec_() (PyQt), и чтобы показать maindow2, я использую maindow2.show() в событии нажатия кнопки, но ничего не показывает


person Arjun Jain    schedule 12.04.2011    source источник


Ответы (1)


Вызов mainwindow2.show() должен работать на вас. Не могли бы вы привести более полный пример вашего кода? Может где-то еще что-то не так.

EDIT: Код обновлен, чтобы показать пример того, как скрывать и показывать окна при открытии и закрытии других окон.

from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, \
            QLabel, QVBoxLayout, QWidget
from PyQt4.QtCore import pyqtSignal

class MainWindow1(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent) 
        button = QPushButton('Test')
        button.clicked.connect(self.newWindow)
        label = QLabel('MainWindow1')

        centralWidget = QWidget()
        vbox = QVBoxLayout(centralWidget)
        vbox.addWidget(label)
        vbox.addWidget(button)
        self.setCentralWidget(centralWidget)

    def newWindow(self):
        self.mainwindow2 = MainWindow2(self)
        self.mainwindow2.closed.connect(self.show)
        self.mainwindow2.show()
        self.hide()

class MainWindow2(QMainWindow):

    # QMainWindow doesn't have a closed signal, so we'll make one.
    closed = pyqtSignal()

    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.parent = parent
        label = QLabel('MainWindow2', self)

    def closeEvent(self, event):
        self.closed.emit()
        event.accept()

def startmain():
    app = QApplication(sys.argv)
    mainwindow1 = MainWindow1()
    mainwindow1.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    import sys
    startmain()
person Gary Hughes    schedule 12.04.2011
comment
спасибо серый наконец сделал. но я хочу, чтобы окно 1 было отключено, а окно 2 включено, и когда окно 2 закрывается, тогда окно 1 становится доступным - person Arjun Jain; 12.04.2011
comment
Я изменил код так, что когда отображается второе окно QMainWindow, первое скрывается. Когда второе окно QMainWindow будет закрыто, первое снова будет показано. - person Gary Hughes; 12.04.2011
comment
Большое спасибо за ваш код @GaryHughes, я боролся с этим. Моя ошибка заключалась в том, что я не отправлял первый экран во второй. Можете ли вы немного объяснить, зачем нам QMainWindow.__init__(self, parent) send parent? Имеет смысл иметь связь между первым и вторым окном, но я не могу полностью понять, зачем нам нужно отправлять родителя в конструктор supers. Еще раз большое спасибо - person Can; 04.01.2016