如何通过ttk.Style设置TMenubutton下拉列表所有选项的样式?
问题原因
ttk.OptionMenu的UI分为两个独立组件:
- 顶部常驻的选中值展示区域,属于
TMenubutton类,这也是你之前配置的my.TMenubutton样式唯一生效的部分 - 点击后弹出的下拉选项列表,本质是独立的
TMenu菜单组件,不属于TMenubutton的样式管辖范围,因此之前的配置不会作用到下拉选项上
解决方案
根据你的需求二选一即可:
方案1:全局统一所有下拉菜单字体
如果希望程序内所有菜单、下拉选项都用该字体,直接给TMenu类配置全局样式即可:
op_style = ttk.Style() # 配置OptionMenu顶部选中项样式 op_style.configure('my.TMenubutton', font=('Microsoft Yahei', 9)) # 配置所有菜单(包含OptionMenu下拉列表)的全局字体 op_style.configure('TMenu', font=('Microsoft Yahei', 9)) # 原有OptionMenu初始化代码无需修改 trans_choose = ttk.OptionMenu( fm2, v, '', *list_zh, command=setlang, style='my.TMenubutton' )
方案2:仅修改当前OptionMenu的下拉字体
如果不想影响程序内其他菜单的样式,可以直接获取当前OptionMenu对应的下拉菜单实例,单独配置字体:
op_style = ttk.Style() op_style.configure('my.TMenubutton', font=('Microsoft Yahei', 9)) trans_choose = ttk.OptionMenu( fm2, v, '', *list_zh, command=setlang, style='my.TMenubutton' ) # 单独为当前OptionMenu的下拉列表设置字体 trans_choose['menu'].configure(font=('Microsoft Yahei', 9))
提示:Windows平台部分旧版Tk对ttk主题下的
TMenu全局样式渲染存在兼容问题,优先使用方案2,配置稳定性更高。
内容的提问来源于stack exchange,提问作者Motoko Kusanagi
相关产品推荐
相关产品推荐

