Как убирать выделение строки цветом в treeview через какое-то время

Подскажите как сделать при добавлении элемента в таблицу, чтобы он на какое-то время подсвечивался другим цветом? Можно ли обойтись без блокировки time.sleep и счетчика name_tag?

from tkinter import *
from tkinter import ttk
import threading
import queue
import time


def get_data(x): # функция которая добавляет елементы в таблицу получая их через очередь
    name_tag = x
    e.wait()
    e.clear()
    tree.insert('', 0, values=q.get(), tags=str(name_tag))
    q.task_done()
    tree.tag_configure(str(name_tag), background='yellow')
    time.sleep(0.5)
    tree.tag_configure(str(name_tag), background='white')
    x += 1 #счетчик для изменения тега
    tree.after(2500, get_data(x))


def data(): #функция генератор значений для добавления в строки таблицы
    for i in range(100):
        q.put(i)
        e.set()
        time.sleep(2)


q = queue.Queue()
e = threading.Event()
# определяем окно
root = Tk()
root.title("окно")
root.geometry("300x300")
# создаем контейнеры для таблиц
frm = ttk.LabelFrame(root, width=150, height=150, text='Таблица', labelanchor=N)
count = 0
# рисуем контейнеры в окно
frm.place(relx=0, rely=0.1, relwidth=0.5, relheight=0.4)
# создаем таблицы
tree = ttk.Treeview(frm, columns=['header'], show="headings")
# даем названия колонок
tree.heading('header', text='header', anchor=W)
# рисуем таблицы
tree.pack(fill=BOTH, expand=True)
thr_get_data = threading.Thread(target=get_data, args=(count,)).start()
thr_data = threading.Thread(target=data, args=()).start()
# запускаем окно
root.mainloop()

Ответы (1 шт):

Автор решения: insolor

Пример полностью через метод .after() без многопоточности

from tkinter import *
from tkinter import ttk


def clear_mark(tag):
    tree.tag_configure(tag, background='white')


def insert_items(i=0):
    if i >= 100:
        return
    
    name_tag = str(i)
    tree.insert('', END, values=i, tags=name_tag)
    
    # Добавляем выделение цветом новой строке
    tree.tag_configure(name_tag, background='yellow')
    
    # Планируем удаление выделения цветом у этой строки через 1,5 секунды
    root.after(1500, clear_mark, name_tag)
    
    # Планируем выполнение функции вставки через 1 секунду с увеличенным счетчиком
    root.after(1000, insert_items, i + 1)


root = Tk()
root.title("окно")

frm = ttk.LabelFrame(root, width=150, height=150, text='Таблица', labelanchor=N)
frm.pack(fill=BOTH, expand=True)

tree = ttk.Treeview(frm, columns=['header'], show="headings")
tree.heading('header', text='header', anchor=W)
tree.pack(fill=BOTH, expand=True)

# Запускаем добавление строк
insert_items()

root.mainloop()
→ Ссылка