Интеграция цикла событий Qt IPython не всегда запускает QApplication - PullRequest
0 голосов
/ 01 марта 2019

Я разрабатываю приложение Qt с неблокирующей консолью IPython, через которую пользователь может обойти GUI, если это необходимо.Я подготовил простой пример с именем qt_app.py, который проверяет уже существующее QApplication:

from PyQt5.QtWidgets import QApplication
app = QApplication.instance()
print(app)

Давайте попробуем выполнить следующее:

ipython --gui qt5
%run qt_app.py

В выводе отображается дескрипторa QApplication:

<PyQt5.QtWidgets.QApplication object at 0x000001323D112678>

Однако, если я попытаюсь запустить IPython и запустить скрипт в одну строку,

ipython --gui qt5 qt_app.py

QApplication.instance () вернет None.

В качестве второго примера рассмотрим сценарий qt_app2.py:

from IPython import get_ipython
ipython = get_ipython()
ipython.magic('gui qt5')
from PyQt5.QtWidgets import QApplication
app = QApplication.instance()
print(app)

Если я открою консоль IPython и запусту ее один раз, приложение QApplication не будет создано, но оно появится, если я запустлю его снова:

In [1]: %run qt_app2.py
None

In [2]: %run qt_app2.py
<PyQt5.QtWidgets.QApplication object at 0x0000020008606C18>

Кажется, что IPython создает QApplication после выполнения остальной части кода - может быть, на следующем шаге своего внутреннего цикла обработки событий?Мое приложение запускается из отдельного сценария запуска, который использует вызов os.system для запуска приложения в консоли IPython, и это несоответствие нарушает эту функциональность.Есть ли способ решить эту проблему?

Я использую IPython 7.3.0 и PyQt5 5.11.3.

...