Qt4 如何在Qt(或PyQt)中调用一个主窗口到另一个主窗口

Qt4 如何在Qt(或PyQt)中调用一个主窗口到另一个主窗口,qt4,pyqt4,qmainwindow,Qt4,Pyqt4,Qmainwindow,在我的项目中,我创建了两个mainwindow,我想从mainwindow1(正在运行)调用mainwindow2。在mainwindow1中,我已经使用了app.exec_qt()(PyQt)来显示maindow2,我在按钮的单击事件中使用了maindow2.show(),但没有显示任何内容,调用mainwindow2.show()应该对您有用。你能给出一个更完整的代码示例吗?其他地方可能有问题 编辑: 更新的代码显示了如何在打开和关闭其他窗口时隐藏和显示窗口的示例 from PyQt4.Qt

在我的项目中,我创建了两个mainwindow,我想从mainwindow1(正在运行)调用mainwindow2。在mainwindow1中,我已经使用了app.exec_qt()(PyQt)来显示maindow2,我在按钮的单击事件中使用了maindow2.show(),但没有显示任何内容,调用mainwindow2.show()应该对您有用。你能给出一个更完整的代码示例吗?其他地方可能有问题

编辑: 更新的代码显示了如何在打开和关闭其他窗口时隐藏和显示窗口的示例

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()
调用mainwindow2.show()应该适合您。你能给出一个更完整的代码示例吗?其他地方可能有问题

编辑: 更新的代码显示了如何在打开和关闭其他窗口时隐藏和显示窗口的示例

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()

谢谢,格雷终于完成了。但是我想让window1禁用,window2启用,当window2关闭时,window1变成了Renable。我已经更改了代码,以便在显示第二个QMain窗口时,第一个窗口是隐藏的。当第二个qmain窗口关闭时,第一个窗口将再次显示。非常感谢您编写@GaryHughes@GaryHughes代码,我一直在为此苦苦挣扎。我的错误是我没有将第一个屏幕发送到第二个屏幕。你能解释一下为什么我们需要QMainWindow.\uuuu init\uuuuu(self,parent)发送parent吗?在第一个窗口和第二个窗口之间建立连接是有意义的,但我不能完全理解为什么我们需要将父窗口发送到超级构造函数。非常感谢Hanks gray终于完成了。但是我想让window1禁用,window2启用,当window2关闭时,window1变成了Renable。我已经更改了代码,以便在显示第二个QMain窗口时,第一个窗口是隐藏的。当第二个qmain窗口关闭时,第一个窗口将再次显示。非常感谢您编写@GaryHughes@GaryHughes代码,我一直在为此苦苦挣扎。我的错误是我没有将第一个屏幕发送到第二个屏幕。你能解释一下为什么我们需要QMainWindow.\uuuu init\uuuuu(self,parent)发送parent吗?在第一个窗口和第二个窗口之间建立连接是有意义的,但我不能完全理解为什么我们需要将父窗口发送到超级构造函数中。再次非常感谢