2016-09-23 5 views
0

질문을 다시 작성하여 명확하게 작성했습니다.Qapplication 이벤트 루프에서 새 Qapplication 만들기

내 코드에서는 QApplication을 만들고 QTimer.singleShot()을 사용하여 응용 프로그램에 슬롯을 연결 한 다음 내 응용 프로그램을 실행했습니다.

이제이 슬롯에 다른 프로세스에서 다른 QApplication을 만들고 싶습니다. 다중 프로세스를 사용했습니다. 프로세스 클래스에서 프로세스 내에서 다른 QApplication을 시작하고 실행하려고 시도하지만 이벤트 루프가 이미 있기 때문에 오류가 있습니다. 실행!, 나는 두 개의 이벤트 루프를 실행할 수 없다는 것을 알고 있지만 새로운 QApplication을 다른 프로세스에서 실행하여 실행해야합니다.

저는 이것이 일반적인 구현이 아니라는 것을 알고 있습니다.하지만 제 경우에는 이것을 실행하는 것이 훨씬 쉬울 것입니다. ,

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. 을 "이벤트 루프가 이미 실행중인 QCoreApplication :: 간부"내가 오류가 :

    는 다음 코드 예제 멀티 프로세싱 코드 (오타 일 수도 있음)를 호출하지 않습니까?

  2. 처음으로 QApplication을 전역 범위에 만들지 말고 함수 안에 넣습니다. 새 프로세스를 만들기 전에 multiprocessing은 글로벌 상태를이 경우 first_app을 포함하는 새 프로세스로 복사합니다.

예.

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

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

예, 이것에 대해 오타되었습니다 미안하지만 제안한 솔루션을 시도했지만 작동하지 않습니다. 문제는 새로운 프로세스가 QApp 또는 하위 프로세스에서 자식 프로세스로 생성된다는 것입니다. 따라서 응용 프로그램 참조 (first_app)이 삭제되었습니다. QApp은 여전히 ​​프로세스에 있으며 예를 들어 QCoreApplication.instance()를 사용하여 얻을 수 있습니다.이 프로세스를 QApp와 완전히 독립적으로 실행하고 싶습니다. –

+0

제 경우의 논리 솔루션은 프로세스를 처음으로 생성 한 다음 QApp를 시작하는 것이지만, 어떤 경우에는 제 경우에 끼어들 것입니다. –

관련 문제