tkinter - 将不同的 <Enter> 事件绑定到 Treeview 小部件中的每一行
tkinter - Bind a different <Enter> event to each row in Treeview widget
我想创建一个独特的小工具提示 window,以便在我将鼠标悬停在 Treeview
小部件的每一行上时显示。
我不知道如何将 <Enter>
和 <Leave>
事件唯一地绑定到每一行。
无需<Enter>
或<Leave>
。您可以使用 <Motion>
代替:
此代码是
的修改版本
import tkinter as tk
from tkinter import Label, ttk
def highlight_row(event):
tree = event.widget
item = tree.identify_row(event.y)
if tree.item(item,'text')!='':
lbl.config(text=tree.item(item,'text'))
lbl.place(x=event.x, y=event.y)
else:
lbl.place_forget()
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)
lbl=Label(root,bg="white")
for i in range(100):
tree.insert("", "end", text=f"Item #{i+1}")
tree.tag_bind(i, '<Motion>', highlight_row)
root.mainloop()
我想创建一个独特的小工具提示 window,以便在我将鼠标悬停在 Treeview
小部件的每一行上时显示。
我不知道如何将 <Enter>
和 <Leave>
事件唯一地绑定到每一行。
无需<Enter>
或<Leave>
。您可以使用 <Motion>
代替:
此代码是
import tkinter as tk
from tkinter import Label, ttk
def highlight_row(event):
tree = event.widget
item = tree.identify_row(event.y)
if tree.item(item,'text')!='':
lbl.config(text=tree.item(item,'text'))
lbl.place(x=event.x, y=event.y)
else:
lbl.place_forget()
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)
lbl=Label(root,bg="white")
for i in range(100):
tree.insert("", "end", text=f"Item #{i+1}")
tree.tag_bind(i, '<Motion>', highlight_row)
root.mainloop()