2013-04-25 101 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