【问题标题】:Change colour in a row in Treeview在 Treeview 中连续更改颜色
【发布时间】:2019-10-29 13:30:09
【问题描述】:

在以下 Python 代码中,我尝试更改 Treeview 表中行的颜色。它不起作用。我尝试使用 tag.configure 但... 正如您所看到的,该函数的作用是从 sql 数据库中提取数据并将其放入 Treeview 表中,根据行颜色应该不同但它不起作用... anu help?

from tkinter import *
from tkinter import ttk
import sqlite3

root=Tk()

FrameTabla=Frame(root)
FrameTabla.pack()
def mostrar_items():


    miConexion=sqlite3.connect("database")
    miCursor=miConexion.cursor()


    miCursor.execute("SELECT * FROM DATABASE ORDER BY USERID DESC")

    lista=miCursor.fetchall()

    for i in lista:


        if lista.index(i) % 2 == 0:
            Tabla.insert('', 0, text=i[0], values=(i[1], i[2]), tags=('par',))


        else: 
            Tabla.insert('', 0, text=i[0], values=(i[1], i[2]), tags=('impar',))

    miConexion.close()



Tabla=ttk.Treeview(FrameTabla, heigh=20, columns=("Nombre", "Apellido"))
Tabla.grid(row=0, column=0, columnspan=3)
Tabla.tag_configure('par',background='white',foreground='black')
Tabla.tag_configure('impar',background='black',foreground='white')
Tabla.heading('#0', text = 'UserID', anchor = CENTER)
Tabla.heading('Nombre', text = 'Nombre', anchor = CENTER)
Tabla.heading('Apellido', text = 'Apellido', anchor = CENTER)
Tabla.column('#0', width=120, anchor= CENTER)
Tabla.column('Nombre', anchor = CENTER)
Tabla.column('Apellido', anchor = CENTER)

ScrollVert=Scrollbar(FrameTabla, command=Tabla.yview)
ScrollVert.grid(row=0, column=4, sticky='nsew')

mostrar_items()

root.mainloop()

【问题讨论】:

标签: python tkinter treeview


【解决方案1】:

关于这个问题,我已经看到了许多关于让 Treeview 行颜色正常工作的回复,但是如果您的问题在于样式主题文件并且您使用的是 Windows 10,那么您将花费大量时间在圈子从来没有像我那样让它工作,这就是我提供这些额外的 cmets 的原因。 1 - 与 Treeview 彩色显示相关的主题文件存在设置问题。定义为已经/将在未来版本中修复的错误。
2 - 起点是更新您在程序中使用的主题文件,尽管我已经看到一个选项可以引入一些额外的代码来覆盖文件问题。我发现这比直接更改主题文件更难应用(而且我并不真正理解它在做什么)。 3 - 我的主题文件地址是: C:\Users\xxxx\AppData\Local\Programs\Python\Python39\tcl\tk8.6\ttk 所有主题文件都命名为 xxxxxTheme,例如 clamTheme、vistaTheme 等。所需的更改是我在 python 'reported' bug 站点上找到的。以下是每个主题文件中似乎一致的更改前值:

ttk::style map Treeview \
        -background [list   disabled SystemButtonFace \
                {!disabled !selected} SystemWindow \
                selected SystemHighlight] \
        -foreground [list   disabled SystemGrayText \
                {!disabled !selected} SystemWindowText \
                selected SystemHighlightText]

更改后跟随 - 本质上您需要删除禁用的引用

# Treeview: 
    ttk::style map Treeview \
        -background [list selected SystemHighlight] \
        -foreground [list selected SystemHighlightText]  \
        ;  

这可以立即解决您应用它的问题,但您需要确保随后使用已修改的主题,还请确保在更改之前获取原始主题文件的副本,因为如果您弄乱了 python 将无法运行起来吧。
几行代码用于设置您已修改的样式的使用,在本例中为 vista。

style = ttk.Style()      
style.theme_use('vista')

如果需要的话,很高兴发布一个使用“奇数”和“偶数”标签方法来为 Treeview 交替行颜色的完整示例,但我认为如果您明白样式和标签不适用于颜色,那么您就是无论如何都非常接近完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2015-02-24
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多