I have just switched from python 3.6 to python 3.7. I have a function which inserts rows in a Treeview tree with tags. The tags are used for giving a foreground color and a
In my app I use folloiwng approach:
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')
Try using tags instead of tag
I tried a lot of things also with the help of my colleagues. We noticed that the tags only work up to the 3.7.2 Python version (not working on 3.7.3). This was tried in multiple computers and on both operating systems (Windows and Linux).
Have you tried changing colors to rgb? Try describing colors in format #RRGGBB where R G and B stands for amount of red green and blue colors ranging from 00 to FF in hexadecimal numbers
Looks like the issue was caused by a newer version of tkinter, not a newer version of Python. This was reported in https://bugs.python.org/issue36468 and https://core.tcl-lang.org/tk/info/509cafafae
Here is a proposed solution. It should be both backward and forward compatible:
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'))