我正在开发一个具有非阻塞IPython控制台的Qt应用程序,如果需要,用户可以通过该控制台绕过GUI。我准备了一个简单的示例qt_app.py,它检查了已经存在的QApplication:
from PyQt5.QtWidgets import QApplication
app = QApplication.instance()
print(app)
让我们尝试运行以下内容:
ipython --gui qt5
%run qt_app.py
输出显示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。