如何修改tkinter中ttk.PanedWindow组件的背景颜色
解决方案
你修改样式不生效是两个原因:
fieldbackground属性的配置方式错误,不需要额外加.field后缀,应该直接绑定到你的自定义Treeview样式上- 部分操作系统默认的ttk主题不支持自定义样式修改,需要手动切换支持样式自定义的主题(比如
clam、alt等)
修改步骤
- 切换ttk主题,在创建Style对象后添加一行代码:
style.theme_use('clam')
- 修正Treeview的样式配置,删除错误的
my.Treeview.field配置行,把fieldbackground参数加到my.Treeview的配置中:
style.configure('my.Treeview', background='orange', foreground='grey', fieldbackground='green')
- 若需要修改Treeview选中行的样式,可以补充map配置:
style.map('my.Treeview', background=[('selected', 'purple')], foreground=[('selected', 'white')])
完整可运行的修改后代码
#!/usr/bin/python3 # -*- coding: utf-8 -*- import tkinter.ttk as ttk import tkinter as tk root = tk.Tk() root['background'] = 'pink' root.geometry('1200x400+0+100') style = ttk.Style() # 切换支持自定义样式的主题 style.theme_use('clam') style.configure('my.TPanedwindow', background='black') # 把fieldbackground参数加到Treeview样式配置中 style.configure('my.Treeview', background='orange', foreground='grey', fieldbackground='green') # 可选:修改选中行样式 style.map('my.Treeview', background=[('selected', 'purple')], foreground=[('selected', 'white')]) style.configure('my.Treeview.Heading', background='blue', foreground='red') pw = ttk.PanedWindow(root, cursor='sb_h_double_arrow', orient=tk.HORIZONTAL, style='my.TPanedwindow', width=1000, height=200) pw.grid(row=0, column=0) b = ttk.Button(pw, text='Test ttk.PanedWindow') pw.add(b) def create_treeview(parent): # Create Treeview Cols = ('#01', '#02', '#03', '#04', '#05', '#06') tv = ttk.Treeview(parent, columns=Cols, height=2, displaycolumn=['#05', '#06', '#01', '#02', '#03', '#04'], style='my.Treeview', selectmode='extended', takefocus=True) # Setup column & it's headings tv.column('#0', stretch=0, minwidth=100, width=100, anchor='w') tv.column('#01', stretch=0, anchor='n', width=70) tv.column('#02', stretch=0, anchor='n', width=80) tv.column('#03', stretch=0, anchor='n', width=75) tv.column('#04', stretch=0, anchor='w') tv.column('#05', stretch=0, anchor='e', width=80) tv.column('#06', stretch=0, anchor='n', width=70) tv.heading('#0', text=' Directory ', anchor='w') tv.heading('#01', text='#01', anchor='center') tv.heading('#02', text='#02', anchor='center') tv.heading('#03', text='#03', anchor='center') tv.heading('#04', text='#04', anchor='w') tv.heading('#05', text='#05', anchor='center') tv.heading('#06', text='#06', anchor='center') return tv tv = create_treeview(pw) pw.add(tv) v0 = ('', '', '', '', 'xxx', str('home'), '', '') tv.insert('', '0', iid='home', text='Hello', open=True, tag='dir', values=v0 ) root.mainloop()
内容的提问来源于stack exchange,提问作者Sun Bear
相关产品推荐
相关产品推荐

