获取Tkinter控件样式选项遇阻:自定义样式未显示+text选项无值求助
问题解决:Tkinter ttk按钮样式选项与文本显示问题
问题1:自定义样式的前景色未显示
你的代码调用s.lookup('TButton', o)时固定使用了默认样式名TButton,但点击自定义样式的按钮时,需要用该按钮对应的实际样式名(即classe变量)来查找,否则只会读取默认TButton的配置,看不到自定义的红色前景色。
问题2:'text'选项无值
text是ttk.Button控件本身的属性,不属于样式选项范畴,因此不能通过style.lookup获取,需要直接从控件对象wg中读取。
修改后的完整代码
from tkinter import * from tkinter import ttk top = Tk() top.bind('<Escape>', lambda e: top.destroy()) def show_options(e): wg = e.widget if wg['style']: classe = wg['style'] else: classe = wg.winfo_class() print(classe) layout = s.layout(classe) btnborder = layout[0][1] btn_style = s.element_options('Button.border') btnfocus = btnborder['children'][0][1] btn_style += s.element_options('Button.focus') btnpadding = btnfocus['children'][0][1] btn_style += s.element_options('Button.padding') btnlabel = btnpadding['children'][0][1] btn_style += s.element_options('Button.label') btn_style = sorted(set(btn_style)) for o in btn_style: # 使用当前控件的样式名classe查询配置 print(o, s.lookup(classe, o)) # 单独获取并显示按钮的text属性 print(f'text: {wg["text"]}') print('\n') s = ttk.Style() s.configure('teste.TButton', foreground='red') b = ttk.Button(top, text='foo') b.bind('<1>', show_options) b.pack() b1 = ttk.Button(top, text='ni', style='teste.TButton') b1.bind('<1>', show_options) b1.pack() top.mainloop()
关键修改说明
- 将
s.lookup('TButton', o)改为s.lookup(classe, o),确保读取当前按钮对应的样式配置,自定义的红色前景色即可正常显示。 - 添加
print(f'text: {wg["text"]}'),直接从控件对象获取文本内容,解决'text'选项无值的问题。
内容的提问来源于stack exchange,提问作者Alexandre Carneiro
相关产品推荐
相关产品推荐

