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

Windows 在PyQt中跟踪多个窗口的合理方法是什么?,windows,pyqt,data-members,Windows,Pyqt,Data Members,我正在编写一个PyQt应用程序,它将具有多个窗口。现在,我感兴趣的是一次打开两个窗口中的一个(因此单击一个窗口中的按钮会切换到另一个窗口)。在PyQt应用程序中跟踪多个窗口的合理方法是什么?我最初的尝试(如下所示)本质上是将QtGui.QWidget的实例存储在一个简单类的全局实例的数据成员中 我是PyQt的新手。有没有更好的办法 #!/usr/bin/env python import sys from PyQt4 import QtGui class Program(object):

我正在编写一个PyQt应用程序,它将具有多个窗口。现在,我感兴趣的是一次打开两个窗口中的一个(因此单击一个窗口中的按钮会切换到另一个窗口)。在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()

有一个单独的主窗口,带有一个可容纳不同界面的窗口。然后使用在接口之间切换


另外,尽量避免使用全局引用。如果希望GUI组件彼此通信,请使用信号和插槽。如果没有合适的内置设备,您可以轻松地安装。

谢谢您的帮助。这似乎是解决这一问题的合理方法。