插入带有标签的行时,Tkinter Treeview问题

时间:2019-04-25 08:05:02

标签: tkinter insert tags treeview

我刚刚从python 3.6切换到python 3.7。我有一个函数,可在带有标签的Treeview树中插入行。标签用于为插入到树中的行提供前景色和背景色。当我使用python 3.6时,我的代码工作正常。当我切换到3.7时,插入的行不具有背景色或前景色,而仅具有白色背景和黑色前景色。

在tkinter.ttk中,关于标记配置或树插入的语法似乎没有从python 3.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')`

期望将行插入到树中时,具有正确的背景色和前景色。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

该问题似乎是由tkinter的较新版本引起的,而不是Python的较新版本引起的。这是在https://bugs.python.org/issue36468https://core.tcl-lang.org/tk/info/509cafafae

中报告的

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

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'))

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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 :(得分:0)

在同事的帮助下,我尝试了很多事情。我们注意到,这些标签仅适用于3.7.2 Python版本(不适用于3.7.3)。在多台计算机和两种操作系统(Windows和Linux)上都尝试过这种方法。