如何更改Treeview的背景颜色

6

我想请问一下如何更改treeview的背景,我已经尝试过了。

ttk.Style().configure("Treeview", background="#383838")

它在单元格上运行得非常完美,但Treeview的其余部分仍然是白色。

我尝试更改窗口和框架的背景,但不起作用。

所以,如何做到这一点,我相信你知道。

再见并提前致谢 :)

代码

from tkinter import *
from tkinter import ttk

p=Tk()

separator = PanedWindow(p,bd=0,bg="#202322",sashwidth=2)

separator.pack(fill=BOTH, expand=1)

_frame = Frame(p,bg="#383838")

t=ttk.Treeview(_frame)

t["columns"]=("first","second")
t.column("first",anchor="center" )
t.column("second")
t.heading("first",text="first column")
t.heading("second",text="second column")
t.insert("",0,"dir1",text="directory 1")
t.insert("dir1","end","dir 1",text="file 1 1",values=("file 1 A","file 1 B"))
id=t.insert("","end","dir2",text="directory 2")
t.insert("dir2","end",text="dir 2",values=("file 2 A","file 2 B"))
t.insert(id,"end",text="dir 3",values=("val 1 ","val 2"))
t.insert("",0,text="first line",values=("first line 1","first line 2"))
t.tag_configure("ttk",foreground="black")

ysb = ttk.Scrollbar(orient=VERTICAL, command= t.yview)
xsb = ttk.Scrollbar(orient=HORIZONTAL, command= t.xview)
t['yscroll'] = ysb.set
t['xscroll'] = xsb.set

ttk.Style().configure("Treeview", background="#383838",foreground="white")
p.configure(background='black')

t.grid(in_=_frame, row=0, column=0, sticky=NSEW)
ysb.grid(in_=_frame, row=0, column=1, sticky=NS)
xsb.grid(in_=_frame, row=1, column=0, sticky=EW)
_frame.rowconfigure(0, weight=1)
_frame.columnconfigure(0, weight=1)

separator.add(_frame)

w = Text(separator)
separator.add(w)

p.mainloop()

1
你说:“我试图改变窗口的背景,还有边框,但是它不起作用。”请展示代码,这样我们或许能够帮助你。 - msw
1
是的,抱歉,“样式代码”:_frame = Frame(p,bg="#383838") p.configure(background='black') - user2650746
3个回答

3
缺失的选项是fieldbackground,我只是偶然在一个示例中发现了它。所以如果你将它添加到样式声明中。
ttk.Style().configure("Treeview", background="#383838", 
 foreground="white", fieldbackground="red")

它可以按照您的意愿工作。我使用了red来使变化非常明显;显然,为了更好的颜色和谐,您需要改变它。


谢谢您的回答,但那并不起作用:http://image.noelshack.com/fichiers/2013/32/1375729684-capture.png正如您所看到的,它仍然是白色的,而且我没有看到使用或不使用“fieldbackground”的区别。这很奇怪:( 为什么不起作用?我要更改树视图开始和水平滚动条之间的白色背景。 - user2650746
抱歉,我无法帮助你。我在我的安装上使用了你的代码进行测试,结果是红色的,就像红色一样。不知道为什么。 - msw
那么,这个问题是由Python引起的吗?有人可以测试一下这段代码,并告诉我它是否有效吗?我使用的是最新版本的Python(3.3.2),并在Windows 8上运行。它在Windows 7上也无法工作。你用的是什么版本? - user2650746
我在Linux上使用纯Python 3.3.1进行了测试。并不意外的是,在Windows下它无法工作,因为Tkinter是一个相对较旧的模块,并且可能没有在次要平台上进行过太多测试,尤其是对于一个晦涩的功能。 - msw
可能存在更新的版本(beta)吗?否则我应该使用Qt吗? - user2650746
2
当tk被引入时,它是唯一的游戏,并且其设计原则启发了Qt、GTK等。如果您刚开始一个没有遗留附件的项目,我建议使用Qt(尽管这让我有点难过)。如果这是用于商业用途,请注意Tkinter和Qt具有不同的许可证(分别为BSD和LGPL);我不太合格来解释这些差异。 - msw

1
if flag == False:
    tree.insert('', 'end', values=(valx[0], valx[1], valx[2], valx[3]),tags=('odd',))
else:
    tree.insert('', 'end', values=(valx[0], valx[1], valx[2], valx[3]),tags=('even',))

tree.tag_configure('odd', background='#008001')
tree.tag_configure('even', background='#FFFF00')

这个回答的背景是什么?它是解决原帖作者的问题的解决方案吗? - Kenn Sebesta

0

如果@msw提供的建议无法解决您的问题,这是一个可能的解决方案。

对于那些即使在配置样式和/或标签后仍无法看到任何关于TreeView颜色变化的人,请参考此视频:Youtube链接

简单修复:@Durai在此文章中的评论中发现

将此行添加到您的代码中以编辑地图配置:

# set backgound and foreground color when selected
style.map('Treeview', background=[('selected', '#BFBFBF'), foreground=[('selected', 'black')])

另一种硬编码的方法:

ttk 的主题文件位于 C:/< Python 安装目录>/tcl/tk8.6/ttk/。

vistaTheme.tcl 是 ttk 使用的默认主题。

您需要在 Treeview 主题文件的末尾更改/添加以下代码,以使其正常工作:

ttk::style map Treeview \
        -background {disabled $colors(-frame)\
                        selected lightblue\
                        selected $colors(-selectbg)} \
        -foreground {disabled $colors(-disabledfg)\
                        selected black\
                        selected $colors(-selectfg)}

在我的情况下,主题文件中缺少了这些行,所以我在 Treeview 下面添加了它们,然后运行了我的代码,现在我终于可以在 Treeview 上看到颜色了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接