PyQtGraph:检查是否 (sys.flags.interactive != 1) hasattr(QtCore, 'PYQT_VERSION')

PyQtGraph: Checking if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION')

我正在阅读一些使用 PyQtGraph 的简单示例,我注意到很多人写道:

if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
    QtGui.QApplication.instance().exec_()

仅代替以下行:

QtGui.QApplication.instance().exec_()

我什么时候应该在申请中使用这两个条件?

首先你必须明白QtGui.QApplication.instance().exec_()你所做的是执行Qt事件循环。

让我们分析一下每个条件意味着什么:

  • sys.flags.interactive:当您通过 REPL e.g. when you use the Python console (read Interactive Mode 以交互模式执行代码时,此标志被激活以获取更多信息)。如果它不同于 1,则意味着不需要使用 Qt 事件循环,因为 REPL 已经有一个事件循环。

  • hasattr(QtCore, 'PYQT_VERSION'): pyqtgraph 使用 PyQt 作为后端,所以如果你没有安装 PyQt,Qt 事件循环将是不可能的,所以该条件验证 PyQt 的安装,如果您的应用程序未安装,它将无法运行。

所以第一个条件建议你使用它,这样无论你使用交互模式还是不使用交互模式,你的代码都不会有问题。

相反,请使用第二个条件,这样您就可以确定已将 PyQt 安装为后端,但请记住它目前还支持 PySide 和 PySide2,因此在这些情况下您不应使用该条件。