Создание нового 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 ответ
Несколько проблем
В вашем коде вы не вызываете какой-либо многопроцессорный код (возможно, опечатку)?
Не создавай первый
QApplication
в глобальной области, поместите это в функцию. Прежде чем создавать новый процесс,multiprocessing
скопирует глобальное состояние в новый процесс, который включаетfirst_app
в этом случае.
Ex.
def main():
first_app = QtGui.QApplication(sys.argv)
...
if __name__ == '__main__':
main()