6

我刚刚开始使用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() 打开设置窗口

4

1 回答 1

7

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

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

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

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

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

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

    sys.exit(app.exec())
于 2013-04-25T17:49:48.443 回答