Вы можете управлять цветом строки с помощью тега, поэтому первая часть решения заключается в определении тега для выделения строки:
tree.tag_configure('highlight', background='lightblue')
Затем напишите метод, который удалит этот тег из всех элементов в дереве, а затем добавит его для элемента под курсором. Базовый виджет tk имеет методы для добавления и удаления тегов, но эти методы не доступны, поэтому нам нужно будет напрямую вызывать базовый код tk.
def highlight_row(event):
tree = event.widget
item = tree.identify_row(event.y)
tree.tk.call(tree, "tag", "remove", "highlight")
tree.tk.call(tree, "tag", "add", "highlight", item)
Наконец, привяжите функцию к событию <Motion>
:
tree.bind("<Motion>", highlight_row)
Вот полный рабочий пример:
import tkinter as tk
from tkinter import ttk
def highlight_row(event):
tree = event.widget
item = tree.identify_row(event.y)
tree.tk.call(tree, "tag", "remove", "highlight")
tree.tk.call(tree, "tag", "add", "highlight", item)
root = tk.Tk()
tree = ttk.Treeview(root, style = 'W.TButton')
vsb = ttk.Scrollbar(root, command=tree.yview)
tree.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
tree.pack(side="left", fill="both", expand=True)
tree.tag_configure('highlight', background='lightblue')
tree.bind("<Motion>", highlight_row)
for i in range(100):
tree.insert("", "end", text=f"Item #{i+1}")
tree.tag_bind(i, '<Motion>', highlight_row)
root.mainloop()
а>
person
Bryan Oakley
schedule
07.01.2021
Events
может помочь - person SNR   schedule 07.01.2021ttk.Treeview
: anzeljg.github.io/rin2/book2/2405/docs/tkinter/ — Кроме того, вы можете использовать события<Enter>
и<Leave>
для создания эффектов при наведении курсора на что-либо. - person oskros   schedule 07.01.2021<B1-Motion>
, которое активируется всякий раз, когда вы двигаете мышью. - person oskros   schedule 07.01.2021