2016-09-23 40 views
0

我已經重寫了這個問題,以便更清楚。從Qapplication事件循環創建一個新的Qapplication

在我的代碼中,我創建了一個QApplication,使用QTimer.singleShot()將應用程序連接到應用程序,然後執行我的應用程序。

現在在這個插槽中,我想在另一個進程中創建另一個QApplication,我使用了multiprocessing.Process類,並從進程內部嘗試啓動另一個QApplication並執行它,但由於事件循環已經存在正在運行!,我知道我不能運行兩個事件循環,但我正在另一個進程中運行新的QApplication,因此它應該運行。

我知道這不是一個常見的實現,但它會更容易得到這個在我的情況下運行。

這裏是一個代碼示例: 我得到的錯誤是 「QCoreApplication :: EXEC:事件循環已經運行」

import multiprocessing 
from PyQt4 import QtCore,QtGui 

def first_app_slot(): 
    mProcess = multiprocessing.Process(target = run_another_app) 
    mProcess.start() 
    mProcess.join() 

def run_another_app(): 
    second_app = QtGui.QApplication([]) 
    second_app.exec_() 

if __name__ == "__main__": 
    first_app = QtGui.QApplication([]) 
    QtCore.QTimer.singleShot(0,first_app_slot) 
    first_app.exec_() 
+0

請張貼您的代碼! – HazemGomaa

+2

我不知道你在做什麼,什麼是錯誤等。請讓這個問題對他人有用 - 我們無法讀懂你的想法。 –

+0

對不起,我已經重寫了這個問題,謝謝你的反饋。 –

回答

0

的幾個問題

  1. 在你的代碼,你沒有調用任何多處理代碼(可能是錯字)?

  2. 請勿在全局範圍內創建第一個QApplication,將其放入函數中。在創建新進程之前,multiprocessing會將全局狀態複製到新進程,在這種情況下包括first_app

Ex。

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

if __name__ == '__main__': 
    main() 
+0

是的,這是一個錯誤的抱歉,我嘗試了你提出的解決方案,但它不工作,我想問題是新的過程是從QApp或其他東西創建的子過程,所以即使應用程序參考( first_app)被刪除,QApp仍然存在,例如可以使用QCoreApplication.instance(),我希望這個過程完全獨立於QApp運行。 –

+0

我知道我的案例的邏輯解決方案是先創建流程,然後在他的流程中啓動每個QApp,但由於某種原因,我被困在我的案例中。 –