PyQt4中的多个窗口?

时间:2013-04-25 14:44:27

标签: python pyqt4

我刚刚开始使用pyqt4。我按照教程(http://zetcode.com/tutorials/pyqt4/) 令我困惑的一件事是这部分:

def main():
    app = QtGui.QApplication(sys.argv)
    ex = GUI()
    sys.exit(app.exec())

我在这里解释的原因是:

我制作了一个小程序,除了第一个主窗口外,还打开了另外四个窗口。 所以我试图复制我看到的主窗口工作,并为每个新窗口创建一个类,并尝试用上面的方法。目前它看起来像这样:

def main2():
    #app = QtGui.QApplication(sys.argv)
    ex2 = Settings()
    sys.exit(app.exec())

正如您所看到的,我已对其进行了修改。如果我将函数中的第一行留下未注释,程序将崩溃。我尝试没有 sys.exit(app.exec _()) -part,但这只会使新窗口在显示后的几毫秒内关闭。 这样,一切都运行和工作。仅在命令窗口中显示错误消息。我不知道如何解决这个问题,因为我无法移除最后一行,而且我不知道用什么来代替“app”

我知道我可能从一开始就对新窗口做错了,但我不知道如何以任何其他方式从原始窗口打开这些窗口。我还没有能够得到任何其他工作,这至少现在可以运行。所以唯一的问题是提示中的错误消息,摆脱它们会很好:)

感谢您的帮助(复杂而简单的帮助)!

忘了提,我让课程开始这样:

class GUI(QtGui.QMainWindow):
    def __init__(self):
        super(GUI, self).__init__()
        self.initUI()

class Settings(QtGui.QWidget):
    def __init__(self):
        super(Settings, self).__init__()
        ...here goes some more...
        self.initUI2()

我通过调用main2()

打开Settings-window

1 个答案:

答案 0 :(得分:6)

您必须在程序中创建一个且仅一个QApplication。

请记住,GUI编程是事件驱动的,首先声明小部件,然后使用app.exec()运行主循环,当用户退出应用程序时,app.exec()返回。

QApplication的目的是处理用户事件并使用Qt信号将它们传播到您的代码中。我建议你检查Qt documentation,它非常完整,即使它是针对C ++程序员的。

因此,例如,创建两个小部件的方法是:

def main():
    app = QtGui.QApplication(sys.argv)

    ex = QtGui.QWidget()
    ex.show()
    ex2 = QtGui.QWidget()
    ex2.show()

    sys.exit(app.exec())