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

标签 python sys pyqtgraph qtgui qtcore

我正在阅读一些使用 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以交互模式执行代码时,此标志被激活。例如当您使用 Python 控制台时(请阅读 Interactive Mode 了解更多信息)。如果它与 1 不同,则意味着不需要使用 Qt 事件循环,因为 REPL 已经有一个事件循环。

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

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

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

关于python - PyQtGraph:检查 (sys.flags.interactive != 1) 是否 hasattr(QtCore, 'PYQT_VERSION' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59691486/

相关文章:

python - 从子模块记录会忽略添加的根记录器流处理程序

python - 为什么 MATLAB 不能导入这个 python 库?

python - 从 Python Embedded in C++ 使用 sys 时出错

python - 为什么 sys.excepthook 不起作用?

python - pyqtgraph pyinstaller 构建 exe 文件

python - 在pyqt中使用sceneEventFilter捕获悬停事件

python - Django 管理员不处理 ProtectedError 异常

python - 如何在 python 中替换特定的数据库实现?

python - 使用命令行参数在文件中调用 Python 函数