You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:55:20