如何在PyQt5中检测Windows系统的深色配色方案?
解决方案
针对Windows系统,兼容PyQt5/PyQt6(适配Qt5版本)的深色主题检测方案,可通过读取Windows注册表的系统主题配置项实现,代码如下:
import sys import winreg def should_apply_dark_frame() -> bool: # 仅针对Windows系统处理 if sys.platform != "win32": return False try: # 打开Windows主题配置的注册表项 with winreg.OpenKey( winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" ) as key: # 读取AppsUseLightTheme值:0=深色,1=浅色 value, _ = winreg.QueryValueEx(key, "AppsUseLightTheme") return value == 0 except (FileNotFoundError, WindowsError): # 注册表项不存在时默认返回浅色主题 return False
说明
- 兼容性:该方案适用于PyQt5全版本及Windows 10/11系统,完美适配Windows 10的初始配色方案检测。
- 原理:Windows系统的应用程序主题明暗设置存储在注册表指定路径下,
AppsUseLightTheme值为0表示启用深色主题,1表示浅色主题。 - 平台限制:代码通过
sys.platform判断仅处理Windows系统,符合无需考虑macOS的要求。 - 异常处理:针对注册表项不存在或读取失败的情况,默认返回
False(即浅色主题),避免程序崩溃。
对比Qt 6.5+的内置方法:Qt 6.5及以上版本提供
QStyleHints.colorScheme()API直接检测,但该接口在Qt5中不存在,因此针对Qt5必须使用注册表读取方案。
内容的提问来源于stack exchange,提问作者PythonistaGuru
相关产品推荐
相关产品推荐

