tkinter ttk小部件忽略背景颜色?

Ale*_*x Z 5 python tkinter

我正在使用应用程序tkinter的主题(ttk)GUI工具包.尝试将一些统一样式应用于主窗口中的小部件:

s = ttk.Style()
s.configure('.', background='#eeeeee')
s.configure('.', font=('Helvetica', 14))
self.configure(background='#eeeeee')
Run Code Online (Sandbox Code Playgroud)

字体更改效果很好,但由于某种原因,窗口小部件(即ttk.Labelttk.Button)似乎并不反映背景更改,由于窗口背景和窗口小部件之间的对比,这在视觉上非常明显.如果我检查它设置为:

label1.cget('background')
Run Code Online (Sandbox Code Playgroud)

它返回了'',显然它没有被设置,但我不明白给出ttk.Label样式的文档有什么不对.尝试直接设置单个标签的背景:

label1.configure(background='#eeeeee')
Run Code Online (Sandbox Code Playgroud)

也不起作用(即没有变化).有任何想法吗?

小智 6

我也遇到了这个问题,我相信问题是 ttk 的“aqua”主题,这是 OSX 上的默认主题,不尊重许多小部件中的背景颜色配置。我通过将主题设置为“默认”解决了这个问题,这立即导致所有小部件的背景按指定显示。

这是我的基本示例:

import tkinter
from tkinter import ttk

root = tkinter.Tk()
style = ttk.Style(root)
style.theme_use('classic')
style.configure('Test.TLabel', background= 'red')
text = ttk.Label(root, text= 'Hello', style= 'Test.TLabel')
text.grid()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

尝试更改style.theme_use('classic')style.theme_use('aqua')以查看问题。


Han*_*ans 1

我也遇到了这个问题,我认为这是一个 ttk bug,是由某些计算机引起的,无法修复。只需在具有背景颜色的背景中使用绘图函数创建一个大矩形即可。我也想不出别的什么了。