PyQt 使用的默认暗模式样式表是什么

What is the default dark mode stylesheet used by PyQt

提问人:Ray Osborn 提问时间:9/28/2023 最后编辑:Ray Osborn 更新时间:9/28/2023 访问量:100

问:

从 v5.12 开始,PyQt 在系统默认模式下会自动切换到暗模式,至少在 MacOS 上是这样。v5.12 样式表缺少一些功能,但在 v5.15 和 v6 中,默认看起来完全足够了。我希望能够在默认的浅色和深色模式之间动态切换,但我找不到标识要使用的适当样式表的文档,例如,我可以在三个默认样式表之间切换,但它们都不是深色主题的。

>>> import PyQt5
>>> app = PyQt5.QtWidgets.QApplication.instance()
>>> PyQt5.QtWidgets.QStyleFactory.keys()
['macintosh', 'Windows', 'Fusion']
>>> app.setStyleSheet('Fusion')

该函数不允许任何关键字参数,因此似乎没有诸如 .有谁知道如何访问系统本身从深色模式切换到浅色模式时使用的默认样式,反之亦然?上述选项均未以任何一种方式切换模式。setStyleSheetmode='dark'

关于在 StackOverflow 上设置深色模式有很多问题,但所有建议都涉及安装另一个包,例如 或 ,或者编写自己的包,而我只想访问必须已经安装的样式表。qdarkstyleqt-material

编辑:我从这个问题中看到,我可能应该问标准调色板而不是样式表。然而,问题仍然是在系统处于浅色或深色模式时如何访问 PyQt 使用的调色板。

pyqt pyqt5 pyqt6 暗模式

评论

0赞 musicamante 9/28/2023
app.setStyleSheet()期望实际的样式表语法,不是有效的参数(包括 QWidget 的参数)。检查调试输出,您可能会看到“无法解析应用程序样式表”错误。此外,默认行为使用样式 (QStyle),而不是“样式表”;事实上,当一个样式表被设置时,Qt会解析它,并根据其参数使用QStyleSheetStyle)。也就是说,目前Qt没有提供手动强制深色或浅色模式的API,有一些方法可以通过现有应用程序的macOS功能来实现它。FusionsetStyleSheet()
0赞 Ray Osborn 9/28/2023
你能描述其中一种方式吗?
0赞 musicamante 9/28/2023
对不起,但没有,因为我不使用 macOS(幸运的是 ;-))。
0赞 ekhumoro 9/29/2023
没有定义的调色板或样式表 - 一切都由 macos 样式插件在内部确定,该插件通过调用平台 API 来确定模式。如果您想要所有血腥的细节,请查看 qt 源代码(例如 qmacstyle_mac.mmqcore_mac.mm)并搜索 .qt_mac_applicationIsInDarkMode
0赞 Ray Osborn 9/29/2023
谢谢,@ekhumoro,这很有帮助。如果 PyQt 可以公开切换模式的函数调用,那就太好了,尽管我可以看到这可能是不可能的。也许我会在 PyQt 邮件列表上问 Phil Thompson。

答: 暂无答案