Создание нового Qapplication из цикла событий Qapplication

Я переписал вопрос так, чтобы он был более понятным.

В своем коде я создал QApplication, подключил слот к приложению с помощью QTimer.singleShot(), а затем выполнил свое приложение.

Теперь в этом слоте я хочу создать еще одно QApplication в другом процессе, я использовал multiprocessing.Process Class и внутри процесса я пытаюсь запустить другое 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_()

1 ответ

Несколько проблем

  1. В вашем коде вы не вызываете какой-либо многопроцессорный код (возможно, опечатку)?

  2. Не создавай первый QApplication в глобальной области, поместите это в функцию. Прежде чем создавать новый процесс, multiprocessing скопирует глобальное состояние в новый процесс, который включает first_app в этом случае.

Ex.

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

if __name__ == '__main__':
    main()
Другие вопросы по тегам