在PyQt中跟踪多个窗口的合理方法是什么?

我正在写一个PyQt应用程序,将具有多个窗口。 现在,我有兴趣一次打开两个窗口之一(所以在一个窗口中点击一个button会导致切换到另一个窗口)。 在PyQt应用程序中跟踪多个窗口的合理方式是什么? 我最初的尝试,如下所示,实质上是将QtGui.QWidget实例存储在一个简单类的全局实例的数据成员中。

我是PyQt的新手。 有没有更好的方法来解决这个问题?

 #!/usr/bin/env python import sys from PyQt4 import QtGui class Program(object): def __init__( self, parent = None ): self.interface = Interface1() class Interface1(QtGui.QWidget): def __init__( self, parent = None ): super(Interface1, self).__init__(parent) self.button1 = QtGui.QPushButton(self) self.button1.setText("button") self.button1.clicked.connect(self.clickedButton1) self.layout = QtGui.QHBoxLayout(self) self.layout.addWidget(self.button1) self.setGeometry(0, 0, 350, 100) self.setWindowTitle('interface 1') self.show() def clickedButton1(self): self.close() program.interface = Interface2() class Interface2(QtGui.QWidget): def __init__( self, parent = None ): super(Interface2, self).__init__(parent) self.button1 = QtGui.QPushButton(self) self.button1.setText("button") self.button1.clicked.connect(self.clickedButton1) self.layout = QtGui.QHBoxLayout(self) self.layout.addWidget(self.button1) self.setGeometry(0, 0, 350, 100) self.setWindowTitle('interface 2') self.show() def clickedButton1(self): self.close() program.interface = Interface1() def main(): application = QtGui.QApplication(sys.argv) application.setApplicationName('application') global program program = Program() sys.exit(application.exec_()) if __name__ == "__main__": main() 

使用一个带有QStackedWidget的主窗口来保存不同的接口。 然后使用QStackedWidget.setCurrentIndex在接口之间切换。

另外,尽量避免使用全局引用。 如果您希望GUI组件相互通信,请使用信号和插槽。 如果没有合适的内置信号,您可以轻松定义自己的定制信号 。