Tkinter Treeview issue when inserting rows with tags

前端 未结 4 1182
臣服心动
臣服心动 2021-01-20 08:10

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

相关标签:
4条回答
  • 2021-01-20 08:24

    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

    0 讨论(0)
  • 2021-01-20 08:29

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

    0 讨论(0)
  • 2021-01-20 08:38

    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

    0 讨论(0)
  • 2021-01-20 08:49

    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'))
    
    0 讨论(0)
提交回复
热议问题