Я разрабатываю приложение 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.