首页 > 解决方案 > PyQtGraph:检查(sys.flags.interactive != 1)是否具有attr(QtCore,'PYQT_VERSION')

问题描述

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

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

而不是仅以下行:

QtGui.QApplication.instance().exec_()

我什么时候应该在我的应用程序中使用这两个条件?

标签: pythonsyspyqtgraphqtguiqtcore

解决方案


首先,您必须了解QtGui.QApplication.instance().exec_()您所做的是执行 Qt 事件循环。

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

  • sys.flags.interactive:当您通过REPL以交互模式执行代码时,例如当您使用 Python 控制台时(请阅读交互模式了解更多信息),此标志将被激活。如果它与 1 不同,则意味着不需要使用 Qt 事件循环,因为 REPL 已经有一个事件循环。

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

所以第一个条件建议你使用它,这样你的代码在你使用或不使用交互模式的情况下都不会出现问题。

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


推荐阅读