2013-04-17 157 views
2

嘿傢伙。嘗試打開PyQt窗口時出現問題。PyQt窗口在打開後立即關閉

下面的代碼是我原來的代碼的一個例子。當我輸入模塊中import Test就跑test.Start(),我得到了以下錯誤:

QCoreApplication::exec: The event loop is already running

經過一番研究,我發現這是因爲我已經已經作出一個QApplication

test.py.... 
import sys 

def Start(): 
    app = QApplication(sys.argv) 
    m = myWindow() 
    m.show() 
    app.exec_() 

class myWindow():.... 

if __name__ == "__main__": 
    Start() 

於是我閱讀,我可以重寫我的代碼,這樣,它會修復錯誤:

test.py.... 

def Start(): 
    m = myWindow() 
    m.show() 


class myWindow():.... 

if __name__ == "__main__": 
    import sys 
    app = QApplication(sys.argv) 
    Start() 
    app.exec_() 

現在我不再得到QCoreApplication :: EXEC:事件循環已經運行錯誤,但我的窗口在打開後幾乎立即關閉。

回答

8

您需要保留對已打開窗口的引用,否則它會超出範圍並進行垃圾回收,這也會摧毀底層的C++對象。嘗試:

def Start(): 
    m = myWindow() 
    m.show() 
    return m 


class myWindow():.... 

if __name__ == "__main__": 
    import sys 
    app = QApplication(sys.argv) 
    window = Start() 
    app.exec_() 
+0

謝謝!完全忽略了這一點。 – pepetd

+0

這個答案今天幫了我,謝謝:) – Trap

1

你也可以這樣做:

def Start(): 
    global m 
    m = myWindow() 
    m.show() 

class myWindow():.... 

if __name__ == "__main__": 
    import sys 
    app = QApplication(sys.argv) 
    window = Start() 
    app.exec_()