Tkinter Treeview проблема при вставке строк с тегами - PullRequest
2 голосов
/ 25 апреля 2019

Я только что перешел с 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 ]

1 голос
/ 12 июля 2019

Похоже, что проблема была вызвана более новой версией tkinter, а не более новой версией Python.Об этом сообщалось в https://bugs.python.org/issue36468 и https://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'))
0 голосов
/ 25 апреля 2019

В моем приложении я использую следующий подход:

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

Попробуйте использовать теги вместо тега

0 голосов
/ 02 мая 2019

Я тоже много чего пробовал с помощью моих коллег.Мы заметили, что теги работают только до версии 3.7.2 Python (не работает на 3.7.3).Это было опробовано на нескольких компьютерах и в обеих операционных системах (Windows и Linux).

0 голосов
/ 25 апреля 2019

Вы пробовали изменить цвета на RGB? Попробуйте описать цвета в формате #RRGGBB, где R G и B означают количество красного, зеленого и синего цветов в диапазоне от 00 до FF в шестнадцатеричных числах

...