tkinter中treeview隔行显示不同的颜色

Posted 帅胡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tkinter中treeview隔行显示不同的颜色相关的知识,希望对你有一定的参考价值。

隔行显示不同颜色的代码,这个牵涉到背景颜色,在3.8版的tkinter,要加多一些代码,才能让背景颜色起作用。

这段要多加的代码就是:

def fixed_map(option):
    return[elm for elm in style.map(\'Treeview\',query_opt=option)
    if elm[:2]!=(\'!disabled\',\'!selected\')]
 
style=Style()
style.map(\'Treeview\',foreground=fixed_map(\'foreground\'),background=fixed_map(\'background\'))

  以下是全部代码:

from tkinter import *
from tkinter.ttk import *
 
def tree_color(): # 表格栏隔行显示不同颜色函数
    items=tree1.get_children() # 得到根目录所有行的iid
    i=0 # 初值
    for hiid in items:
        if i/2!=int(i/2): # 判断奇偶
            tag1=\'\' # 奇数行
        else:
            tag1=\'even\' # 偶数行
        tree1.item(hiid,tag=tag1) # 偶数行设为浅蓝色的tag=\'even\'
        i+=1 # 累加1
 
root = Tk() # 源码来自wb98.com
 
img1=PhotoImage(file=\'16-1.png\')
img2=PhotoImage(file=\'16-2.png\')
 
tree1 = Treeview(root, columns=(\'qy\', \'dz\')) 
# 创建树表格组件,栏目有3个:#0, qy, dz
 
tree1.column(\'#0\', width=120, anchor=CENTER) 
tree1.column(\'qy\', width=90, anchor=CENTER)
tree1.column(\'dz\', width=180, anchor=CENTER)
# 定义3个栏目的宽度,对齐方法,宽度是否窗体变化
 
tree1.heading(\'#0\', text=\'\')
tree1.heading(\'qy\', text=\'区域\')
tree1.heading(\'dz\', text=\'地址\')
# 定义3个栏目的表头文字
 
tree1.insert(\'\', END, text=\'广州市\',values=(\'海珠区\',\'阅江中路380号\'))
tree1.insert(\'\', END, text=\'深圳市\',values=(\'南山区\',\'华侨城侨香路11号\'))
tree1.insert(\'\', END, text=\'东莞市\',values=(\'南城区\',\'元美东路3号济亨网\'))
 
tree1.insert(\'\', END, text=\'长沙市\',values=(\'雨花区\',\'韶山中路108号\'))
tree1.insert(\'\', END, text=\'湘潭市\',values=(\'岳塘区\',\'书院路42号云峰工作室\'))
tree1.insert(\'\', END, text=\'衡阳市\',values=(\'蒸湘区\',\'祝融路名都花园B9栋107室\'))
 
tree1.insert(\'\', END, text=\'长沙市\',values=(\'岳麓区\',\'梅溪湖路复兴小区709号\'))
tree1.insert(\'\', END, text=\'广州市\',values=(\'白云区\',\'下塘西路545号\'))
 
tree1.pack(fill=BOTH,expand=True)
 
# 3.8版要多加的代码------------
def fixed_map(option):
    return [elm for elm in style.map("Treeview", query_opt=option) if elm[:2] != ("!disabled", "!selected")]
 
style = Style()
style.map("Treeview", foreground=fixed_map("foreground"), background=fixed_map("background"))
# 3.8版要多加的代码------------
 
#定义背景色风格
tree1.tag_configure(\'even\', background=\'lightblue\') # even标签设定为浅蓝色背景颜色
 
tree_color() # 启动程序,根据奇偶行设为不同的背景颜色
 
root.mainloop()

  

以上是关于tkinter中treeview隔行显示不同的颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?

python中tkinter treeview如何获取选中的条目

使用 tkinter Treeview 小部件显示目录内容

python 3 - tkinter - ttk treeview:查看列文本

为什么我无法在Mac上的Tkinter Python中显示按钮的背景颜色?

在tkinter的treeview中的for循环中的每个父节点下添加子节点