我正在编写一个具有多个窗口的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()
答案 0 :(得分:2)
使用QStackedWidget的单个主窗口来保存不同的接口。然后使用QStackedWidget.setCurrentIndex在接口之间切换。
另外,尽量避免使用全局引用。如果您希望GUI组件相互通信,请使用信号和插槽。如果没有合适的内置文件,您可以轻松define your own custom signals。