Tkinter Treeview在插入带有标记的行时出现问题

Tkinter Treeview在插入带有标记的行时出现问题,tkinter,insert,tags,treeview,Tkinter,Insert,Tags,Treeview,我刚刚从Python3.6切换到Python3.7。我有一个函数,可以在Treeview树中插入带有标记的行。标记用于为插入到树中的行提供前景色和背景色。当我使用Python3.6时,我的代码运行正常。当我切换到3.7时,插入的行没有背景色或前景色,只有白色背景和黑色前景色 tkinter.ttk中似乎没有关于标记配置或树插入的语法从Python3.6更改为3.7 tree.tag_configure('MATCHED', foreground='dark green', background=

我刚刚从Python3.6切换到Python3.7。我有一个函数,可以在Treeview树中插入带有标记的行。标记用于为插入到树中的行提供前景色和背景色。当我使用Python3.6时,我的代码运行正常。当我切换到3.7时,插入的行没有背景色或前景色,只有白色背景和黑色前景色

tkinter.ttk中似乎没有关于标记配置或树插入的语法从Python3.6更改为3.7

tree.tag_configure('MATCHED', foreground='dark green', background='gray98')
tree.tag_configure('UNMATCHED', foreground='red2', background='gray98')

if match_status== '1':
    tree.insert('', 'end', text=df_row, values=my_value, tag='MATCHED')
elif match_status == '0':
    tree.insert('', 'end', text=df_row, values=my_value, tag='UNMATCHED')`
当这些行被插入到树中时,应该给它们正确的背景和前景颜色


非常感谢您的帮助。

您是否尝试过将颜色更改为rgb?尝试用#RRGGBB格式描述颜色,其中rg和B表示十六进制数范围从00到FF的红、绿、蓝颜色量

在我的应用程序中,我使用以下方法:

self._my_tree.tag_configure('mygray', background='#DCDCDC')

for router in routers_list:
    self._my_tree.insert('', 'end', router['id'], text=str(router['id']),
                         values=(
                             name,
                             router['location'],
                             router['ip'],
                             router['model'],
                             router['phone_num'],
                             router['provider']
                         )
                         )

    self._my_tree.item(router['id'], tags='mygray')

试着用标签来代替标签

在同事的帮助下,我也尝试了很多东西。我们注意到这些标记只适用于3.7.2 Python版本(不适用于3.7.3)。这在多台计算机和两种操作系统(Windows和Linux)上都进行了尝试。

看起来问题是由较新版本的tkinter引起的,而不是由较新版本的Python引起的。这是在和中报告的

这里有一个建议的解决方案。它应该向后和向前兼容:

def fixed_map(option):
    # Fix for setting text colour for Tkinter 8.6.9
    # From: https://core.tcl.tk/tk/info/509cafafae
    #
    # Returns the style map for 'option' with any styles starting with
    # ('!disabled', '!selected', ...) filtered out.

    # style.map() returns an empty list for missing options, so this
    # should be future-safe.
    return [elm for elm in style.map('Treeview', query_opt=option) if
        elm[:2] != ('!disabled', '!selected')]

style = ttk.Style()
style.map('Treeview', foreground=fixed_map('foreground'), background=fixed_map('background'))

刚刚试过,但没有效果。我试过,但没有效果。但我注意到您在使用tree.insert()时使用了tree.item()函数。如何将数据插入到树中?我也在使用insert()。我认为您缺少项目iid,这是文档中描述的项目标识符:请看一下我的insert()use的第三个参数我看到了文档,我也使用了iid项目,但运气不好。。在我的代码中,即使没有最后一行(tree.item())也会用值填充树是的,但是最后一行(tree.item())您当然可能需要用标记来装饰项。我也用tree.item()尝试了它,但它不起作用。当我使用Python3.6时,我的代码只处理插入行,正如我在问题中提到的那样,在插入行中包含了标记。当我将环境更改为python 3.7.3时,标记停止工作。当我使用不同的背景颜色时,您的代码对我有效。作为一个实验,当您将背景更改为红色时会发生什么?如果您创建了一个工作环境,它也会有所帮助。它不应该只需要十几行左右。这就排除了其他代码导致的问题。非常感谢这个解决方案。我可以确认这适用于python 3.7.9和Tkinter 8.6.9顺便说一句,我将“style”作为参数传递给fixed_map,以避免访问作为全局变量的style。这一解决方法是否按照OP的问题要求使颜色标记受驱动?我有一个类似的要求(标签相关的颜色),但这个解决方案似乎不涉及标签