【问题标题】:Multiple windows in PyQt4?PyQt4中的多个窗口?
【发布时间】:2013-04-26 01:49:48
【问题描述】:

我刚刚开始使用 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_())-部分,但这只会使新窗口在显示后几毫秒内关闭。 但是,这样,一切都运行并正常工作。只有在命令窗口中,才会显示错误消息。我不知道如何解决这个问题,因为我无法删除最后一行,而且我不知道用什么替换 "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() 打开设置窗口

【问题讨论】:

    标签: python pyqt4


    【解决方案1】:

    您必须在您的程序中创建一个且仅一个 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())
    

    【讨论】:

    • 谢谢,这确实清楚了一些事情。但我不能同时显示所有窗口。首先是启动时显示的 QMainWindow,从那里它取决于将打开的内容,因为我可以在菜单栏中选择不同的选项。例如帮助窗口或设置窗口。
    • @right_there:您需要创建(或至少显示)您的设置窗口以响应事件,请参阅您遵循的有关事件的教程:zetcode.com/tutorials/pyqt4/eventsandsignals
    • 哦,我做到了!我只是不想把所有的代码都放在这里,就像560行一样。我已经完成了所有工作,单击按钮时会打开窗口。我有一个很好的带有菜单栏的 GUI,我已经在设置窗口等中安排了所有按钮。只是它抛出了关于我在第一篇文章中描述的错误消息,我不知道如何改变它。也许我应该在这里提供更多代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多