如何在单个Tkinter应用中为多个ttk Treeview设置不同表头样式
实现不同Treeview独立配置表头样式的方法
ttk控件的子元素样式遵循自定义前缀.父控件类名.子控件类名的命名规则,你可以为每个自定义Treeview样式单独配置对应的Heading子样式,具体修改方案如下:
完整修改后代码示例
import tkinter.font as tkfont import tkinter.ttk as ttk # 原有初始化逻辑保留 self.xs_font = tkfont.Font(family='Arial', size=9) # 可单独定义不同表头的样式参数 self.home_header_font = tkfont.Font(family='Arial', size=9, weight='bold') self.toplevel_header_font = tkfont.Font(family='Arial', size=11, weight='bold') self.treeview = ttk.Style() def fixed_map(option):#bug fix to allow highlighted lines in a treeview return [elm for elm in self.treeview.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')] self.treeview.map('Treeview', foreground=fixed_map('foreground'),background=fixed_map('background'))#implement bug fix # 原有Treeview主体样式不变 self.treeview.configure('home_tree.Treeview',font=self.xs_font,rowheight=20)# 首页Treeview主体样式 self.treeview.configure('toplevel_tree.Treeview',font=self.xs_font,rowheight=30)# 顶层窗口Treeview主体样式 # 替换原有全局表头配置,改为独立配置专属样式 self.treeview.configure('home_tree.Treeview.Heading',font=self.home_header_font,rowheight=25)# 首页Treeview专属表头 self.treeview.configure('toplevel_tree.Treeview.Heading',font=self.toplevel_header_font,rowheight=35)# 顶层窗口Treeview专属表头
注意事项
- 创建Treeview实例时需显式绑定对应的自定义样式,绑定后表头会自动套用对应的子样式,无需额外给表头设置样式:
# 首页Treeview实例 home_tree = ttk.Treeview(父容器, style='home_tree.Treeview') # 顶层窗口Treeview实例 toplevel_tree = ttk.Treeview(顶层窗口容器, style='toplevel_tree.Treeview')
内容的提问来源于stack exchange,提问作者brummel
相关产品推荐
相关产品推荐

