0

より明確になるように質問を書き直しました。

私のコードでは、QApplication を作成し、QTimer.singleShot() を使用してスロットをアプリケーションに接続し、アプリケーションを実行しました。

このスロットで、別のプロセスで別の QApplication を作成したいのですが、multiprocessing.Process クラスを使用し、プロセス内から別の QApplication を開始して実行しようとしましたが、イベント ループが既に実行されているため、エラーが発生しました! 2 つのイベント ループを実行できないことはわかっていますが、別のプロセスで新しい QApplication を実行しているので、実行する必要があります。

これが一般的な実装ではないことはわかっていますが、私の場合、これを実行する方がはるかに簡単です。

コード例を次に示します。「QCoreApplication::exec: The event loop is already running」というエラーが表示されます。

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_()
4

1 に答える 1

0

いくつかの問題

  1. あなたのコードでは、マルチプロセッシング コードを呼び出していませんか (タイプミスの可能性があります)。

  2. QApplicationグローバルスコープで最初のものを作成しないでください。関数内に配置してください。新しいプロセスを作成する前に、この場合 multiprocessingを含む新しいプロセスにグローバル状態をコピーします。first_app

元。

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

if __name__ == '__main__':
    main()
于 2016-09-23T22:26:25.307 に答える