IPython的Qt事件循环集成无法持续启动QApplication

时间:2019-03-01 20:54:29

标签: python qt ipython

我正在开发一个具有非阻塞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。

0 个答案:

没有答案