如何在PyQt5(5.13)中启用macOS暗模式

2024-04-24 21:18:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用PyQt5制作我的第一个GUI应用程序,但它目前不能在暗模式下工作。在

如何在PyQt5中启用暗模式?

我使用pyqt5v5.13.0并在Mac、Linux和Windows上使用PyInstaller冻结应用程序。在

如果你需要更多的信息或代码,请告诉我。在


Tags: 代码信息应用程序linuxwindowsmac模式gui
2条回答

除了样式表的外部实现或自己实现之外,没有其他方法(内置的)。。在

我强烈建议您检查this reply中的一个。在

它说的是this stylesheet。在

在这个线程中,还有一些方法可以实现它。在

我自己也在努力解决这个问题(PyQt5.14),并且已经找到了如何让macOS的暗模式与PyQt5一起工作。你必须打电话给QApplication.setStyle('style name here')

无论出于什么原因,似乎任何颜色方案的改变都是惰性的,直到被setStyle()激活。(如果您使用自定义调色板调用QApplication.setPalette(palette),则可以看到这一点;某些颜色将更改,而其他颜色则不会更改,直到调用setStyle(),所有颜色最终都会更改)我只能推测在app start上检测到暗模式,但没有激活。在

为什么在调用setStyle()之前,配色方案的更改才适用,我不知道。我猜是PyQt5中的一个bug。在


有两条规则可以使setStyle()技巧起作用:

  1. 在实例化了^{之后,必须调用setStyle()。这是在实例化您的setStyle()之前的setStyle()调用的补充,总共两个setStyle()
  2. setStyle()必须使用字符串参数调用。给它一个QStyle对象没有任何作用。在

因此,要让你的应用程序与macOS的暗模式同步配色方案:

# Must run before QApplication is instantiated, otherwise certain widget styles will remain unset
PyQt5.QtWidgets.QApplication.setStyle('fusion')

app = YourQApplicationClassHere(sys.argv)

# Must run after QApplication is instantiated, to apply any latent color scheme changes
PyQt5.QtWidgets.QApplication.setStyle('fusion')

最后一点警告:如果你用pyinstaller冻结你的应用程序,甚至连setStyle()技巧也行不通。在

相关问题 更多 >