如何获取用户当前系统主题颜色

问题描述 投票:0回答:3

嗨我正在开发一个 python gui 项目,我发现我的应用程序框架的颜色取决于用户的系统主题颜色。我希望我的应用程序具有相同的颜色,我可以知道如何实现吗?我的应用程序主要适用于 Windows,但如果有一种适用于 Linux 的方法那就太好了。顺便说一句,我正在使用 tkinter。
或者也许如何从命令行获取颜色,因为我们有

os.system(command)


更新: 我已经尝试了小部件样式中列出的输入,但它们都不起作用,我的系统的主题颜色为
light blue

from tkinter import *

if __name__ == '__main__':
    root = Tk()
    root['bg'] = 'SystemButtonFace'  # white
    root['bg'] = 'SystemBackground'  # black
    root['bg'] = 'SystemButtonText'  # black
    root['bg'] = 'SystemAppWorkspace'  # grey
    root['bg'] = 'SystemActiveBorder'  # grey
    root['bg'] = 'SystemActiveCaption'  # light grey
    root['bg'] = 'SystemInactiveCaption'  # light grey
    root['bg'] = 'SystemButtonShadow'  # darker grey
    root['bg'] = 'SystemButtonHighlight'  # white with a bit grey
    root['bg'] = 'SystemCaptionText'  # black
    root['bg'] = 'SystemDisabledText'  # darker grey
    root['bg'] = 'SystemHighlight'  # light dark blue
    root['bg'] = 'SystemHighlightText'  # white
    root['bg'] = 'SystemInactiveBorder'  # white
    root['bg'] = 'SystemInactiveCaptionText'  # black
    root['bg'] = 'SystemMenu'  # white
    root['bg'] = 'SystemMenuText'  # black
    root['bg'] = 'SystemScrollbar'  # grey
    root['bg'] = 'SystemWindow'  # white
    root['bg'] = 'SystemWindowFrame'  # dark grey
    root['bg'] = 'SystemWindowText'  # black

    root.mainloop()

将背景设置为黑色不会将框架设置为黑色,而且我找不到获得浅蓝色的方法
info

python tkinter
3个回答
1
投票

Tkinter 无法更改窗口边框的颜色,也无法获取颜色。 您将需要使用特定于您的窗口管理器的其他库来获取或更改颜色。


1
投票

您必须自己使用自定义的RGB颜色。

使用键

'bg'
了解您的背景颜色。

无论如何,如果你想实现自己的Tkinter框架定制,你可以执行以下操作:

from tkinter import *

root = Tk()

print(root['bg']) # Output: SystemButtonFace
root.configure(bg = '#FF0000') # Configuring new color RED
print(root['bg']) # Output: #FF0000

root.mainloop()

此页面上有更多关于 tkinter 样式的信息:

小部件样式

查看 Macintosh 和 Windows 的默认系统颜色段落。

Linux 可能没有系统颜色,因为它通常由黑色命令行管理。


0
投票

您可以使用 winaccent 来做到这一点,这是我为检索强调色、色调、活动/非活动标题栏颜色和窗口边框颜色而制作的 Python 模块。

您可以使用以下命令安装它:

pip install winaccent

然后,您可以像这样更改 tkinter 应用程序的背景颜色:

import tkinter, winaccent

root = tkinter.Tk()

# Check if the titlebar is colored
if winaccent.is_titlebar_colored:
    root.configure(bg = winaccent.titlebar_active)
else:
    root.configure(bg = "SystemButtonFace")

root.mainloop()

如果在“设置”中启用“在标题栏和窗口边框上显示强调色”选项,您的窗口将如下所示this

如果没有,它会看起来像这个

如果您想了解该模块的更多功能,可以阅读文档这里

© www.soinside.com 2019 - 2024. All rights reserved.