如何在 PySide2 中检查 gui 与命令行模式?

Posted

技术标签:

【中文标题】如何在 PySide2 中检查 gui 与命令行模式?【英文标题】:How to check for gui vs command line mode in PySide2? 【发布时间】:2018-03-18 01:11:03 【问题描述】:

在我的 PySide2 代码中,我需要检查程序是否以 gui 模式或命令行运行。在 PySide 中,我曾经这样做过:

if QApplication.type() == QApplication.Type.GuiClient:
    # do stuff

但是,根据http://doc.qt.io/qt-5/sourcebreaks.html

QCoreApplication::Type 和 QApplication::type() 被移除。这些 Qt 3 个遗留应用程序类型与应用程序类型不匹配 在 Qt 5 中可用。使用 qobject_cast 来动态找出 确切的应用程序类型。

我的 PySide 程序在主机应用程序中运行,所以我自己没有创建 QCoreApplication 实例,我只需要检查主机应用程序是否处于批处理模式(非 GUI),以避免一些问题。

我现在的问题是如何使用qobject_cast 在 PySide2 中实现相同的功能? 文档中的 C++ examples 并没有告诉我如何使用 Python 解决这个问题。

有人可以提供一个例子或建议其他方法来实现同样的事情吗?

【问题讨论】:

qt5中没有这个模式,所以没啥可查的。您所能做的就是创建一个 QCoreApplication 或其子类之一,您只需要isinstance 即可查看它是哪一个。 我未能提供一点信息,抱歉:我的 PySide 应用程序正在主机应用程序中运行,该主机应用程序可以在 GUI 或命令行模式下运行(用于批处理)。我的 PySide 应用程序需要确定主机应用程序当前所在的应用程序以避免出现问题。换句话说,我根本没有创建 QCoreApplication 实例。 虽然我明白你的意思。看起来我可以检查 QtWidgets.QApplication.instance() 是 QApplication 还是 QCoreApplication 来区分。我将对此进行更多测试,但这看起来像是解决方案。 【参考方案1】:

最后我需要做的就是:

isinstance(QtWidgets.QApplication.instance(), QtWidgets.QApplication)

在 GUI 模式下返回 True,在命令行/批处理模式下返回 False。 感谢 ekhumoro 为我指明了正确的方向!

【讨论】:

以上是关于如何在 PySide2 中检查 gui 与命令行模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有 PySide2 GUI 的 python 脚本构建一个 mac os 应用程序?

如何使用 pyside2 插槽函数共享数据?

pyinstaller打包PySide2写的GUI程序,调用ffmpeg隐藏CMD控制台解决方案

Pyside2 QGuiApplication,Gui冻结按钮点击

我在 Pycharm 中使用 PySide2 来构建我的 GUI 程序,但是在哪里可以找到参考文档?

带有 PySide2 的文件浏览器:获取文件的路径,然后终止 GUI