2013-04-25 104 views
5

我刚开始使用pyqt4。我也跟着教程(http://zetcode.com/tutorials/pyqt4/) 有一件事情困扰我的是这个部分:PyQt4中的多个窗口?

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

而这样做的原因,我在这里解释:

我已打开四个窗口,除了一个小程序第一个主窗口。 所以我试图复制我看到的与main-window一起工作,并为每个新窗口创建一个类,并试图像上面那样做。目前看起来像这样:

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

正如你所看到的我修改了它。如果我将该函数的第一行取消注释,程序将崩溃。我想没有sys.exit(app.exec_()) -part做但这只会使新窗口关闭毫秒这表明后。 尽管如此,所有的东西都可以运行和运行。只有在命令窗口中显示错误消息。我不知道如何解决这个问题,因为我不能删除最后一个行,我dont't知道做什么用替代“应用程序”

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

感谢所有帮助(复杂和容易的)!

忘了提,我做了上课的时间是这样的:

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()打开设置窗口

回答

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()) 
+0

谢谢你,那不明确一些事情。但我无法同时显示所有窗口。首先它是在启动时显示的QMainWindow,并且从那里取决于打开的内容,因为我可以在菜单栏中选择不同的选项。例如,帮助窗口或设置窗口。 – 2013-04-26 11:19:28

+1

@right_there:你需要在响应创建(或至少显示)设置窗口的事件,看你遵循有关事件的教程:http://zetcode.com/tutorials/pyqt4/eventsandsignals/ – Julien 2013-04-26 12:10:17

+0

哦,我我已经做到了!我只是不想把所有的代码放在这里,就像560线。我已经完成了所有工作,当我点击按钮时窗口打开。我有一个很好的图形用户界面菜单栏,我已经安排了设置窗口中的所有按钮等。它只是抛出了我在第一篇文章中描述的错误信息,我不知道如何改变它。也许我应该在这里提供更多的代码? – 2013-04-26 13:28:11