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

时间:2014-05-20 02:35:33

标签: python tkinter

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

s = ttk.Style()
s.configure('.', background='#eeeeee')
s.configure('.', font=('Helvetica', 14))
self.configure(background='#eeeeee')

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

label1.cget('background')

它会返回'',所以显然它没有被设置,但我不明白给出ttk.Labelstyles的文档有什么问题。尝试直接设置单个标签的背景:

label1.configure(background='#eeeeee')

也不起作用(即没有变化)。 有什么想法吗?

3 个答案:

答案 0 :(得分:3)

我也有这个问题,我相信问题是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()

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

答案 1 :(得分:1)

我也有,我认为这是一个ttk错误,是由一些计算机引起的,无法修复。只需在背景中使用具有背景颜色的绘图功能的大矩形。我也想不出别的什么。

答案 2 :(得分:0)

2018更新:tkinter.ttk.Label实例仍然不尊重'background'配置选项,所以我暂时切换回使用tkinter.Label并将其作为bug提交给python开发人员(至少删除它来自可用的选项,如果它不尊重它)。我正在使用python 3.6.5和Tk 8.6。以下是用于演示的交互式会话的输出:

>>> import tkinter as tk
>>> import tkinter.ttk as ttk
>>> root = tk.Tk()
>>> tk_label = tk.Label(root)
>>> tk_label.keys()
['activebackground', 'activeforeground', 'anchor', 'background', 'bd', 'bg', 'bitmap', 'borderwidth', 'compound', 'cursor', 'disabledforeground', 'fg', 'font', 'foreground', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'image', 'justify', 'padx', 'pady', 'relief', 'state', 'takefocus', 'text', 'textvariable', 'underline', 'width', 'wraplength']
>>> tk_label.config(text='Old style tkinter.Label instance', foreground='blue', background='red')
>>> tk_label.pack()
>>> new_ttk_label = ttk.Label(root)
>>> new_ttk_label.keys()
['background', 'foreground', 'font', 'borderwidth', 'relief', 'anchor', 'justify', 'wraplength', 'takefocus', 'text', 'textvariable', 'underline', 'width', 'image', 'compound', 'padding', 'state', 'cursor', 'style', 'class']
>>> new_ttk_label.config(text='New tkinter.ttk.Label instance', foreground='blue', background='blue')
>>> new_ttk_label.pack()
>>> tk_label.config('background')
('background', 'background', 'Background', <border object: 'White'>, 'red')
>>> new_ttk_label.config('background')
('background', 'frameColor', 'FrameColor', '', <border object: 'blue'>)
>>> new_ttk_label.config('foreground')
('foreground', 'textColor', 'TextColor', '', <color object: 'blue'>)
>>> root.mainloop()