从主题中取色

from PyQt6.QtWidgets import QApplication
from PyQt6.QtGui import QPalette
from PyQt6.QtCore import Qt

app = QApplication([]) # 必须先创建 QApplication 实例

# 获取应用程序的默认调色板
palette = app.palette()

# 从调色板中获取常用颜色
# 1. 窗口背景色 (通常是应用程序的主背景色)
window_background_color = palette.color(QPalette.ColorRole.Window)
print(f"窗口背景色: {window_background_color.name()}") # .name() 返回颜色的十六进制字符串,如 #RRGGBB

# 2. 文本颜色 (默认的文本颜色)
text_color = palette.color(QPalette.ColorRole.WindowText)
print(f"文本颜色: {text_color.name()}")

# 3. 按钮背景色
button_color = palette.color(QPalette.ColorRole.Button)
print(f"按钮颜色: {button_color.name()}")

# 4. 按钮文本颜色
button_text_color = palette.color(QPalette.ColorRole.ButtonText)
print(f"按钮文本颜色: {button_text_color.name()}")

# 5. 高亮色 (选中项的背景色,如列表或树视图中的选中项)
highlight_color = palette.color(QPalette.ColorRole.Highlight)
print(f"高亮色: {highlight_color.name()}")

# 6. 高亮文本色 (选中项的文本颜色)
highlight_text_color = palette.color(QPalette.ColorRole.HighlightedText)
print(f"高亮文本颜色: {highlight_text_color.name()}")

# 你还可以指定颜色组 (ColorGroup),如 QPalette.ColorGroup.Active, QPalette.ColorGroup.Disabled 等
# 默认情况下,QPalette.color() 会返回 QPalette.ColorGroup.Active 组的颜色

# 示例:获取禁用状态下的文本颜色
disabled_text_color = palette.color(QPalette.ColorGroup.Disabled, QPalette.ColorRole.WindowText)
print(f"禁用文本颜色: {disabled_text_color.name()}")

app.quit() # 退出应用程序实例

实际使用中可通过一个class来包装

class color():
    def __init__(self):
        # 由于Qt的特性 QApplication 只允许存在一个。我们期望它已经存在。
        app_instance = QApplication.instance()
        if app_instance is None:
            raise RuntimeError("QApplication 必须在初始化 SystemColors 之前创建。")
        self.color = app_instance.palette() # 获取应用程序的调色板

    def get_color(self, color_role: QPalette.ColorRole) -> str:
        # 从调色板中获取指定角色(如 QPalette.ColorRole.Window)的颜色
        return self.color.color(color_role).name()
    
    # 1. 窗口背景色
    def window_background_color(self):
        return self.get_color(QPalette.ColorRole.Window)
    
    # 2. 文本颜色
    def text_color(self):
        return self.get_color(QPalette.ColorRole.WindowText)
    
    # 3. 按钮背景色
    def button_color(self):
        return self.get_color(QPalette.ColorRole.Button)

    # 4. 按钮文本颜色
    def button_text_color(self):
        return self.get_color(QPalette.ColorRole.ButtonText)

    # 5. 高亮色 (选中项的背景色,如列表或树视图中的选中项)
    def highlight_color(self):
        return self.get_color(QPalette.ColorRole.Highlight)

    # 6. 高亮文本色 (选中项的文本颜色)
    def highlight_text_color(self):
        return self.get_color(QPalette.ColorRole.HighlightedText)

    # 你还可以指定颜色组 (ColorGroup),如 QPalette.ColorGroup.Active, QPalette.ColorGroup.Disabled 等
    # 默认情况下,QPalette.color() 会返回 QPalette.ColorGroup.Active 组的颜色

    # 示例:获取禁用状态下的文本颜色
    def disabled_text_color(self):
        return self.get_color(QPalette.ColorGroup.Disabled, QPalette.ColorRole.WindowText)

# 实际使用中只需要
colors = color()
print(colors.window_background_color())
print(colors.text_color())