Команда для щелчка по элементам виджета Tkinter Treeview?
Я создаю графический интерфейс с Tkinter, и большая часть графического интерфейса - это два объекта Treeview. Мне нужно содержимое объектов Treeview
для изменения, когда дважды щелкнут элемент (т.е. Каталог).
Если элементы Treeview были кнопками, я бы просто установил command
в соответствующую функцию. Но у меня возникли проблемы с поиском способа создания поведения "on_click"
для элементов Treeview.
Какой параметр, метод и т.д. позволяет мне привязать команду к определенным элементам и выполнить эту команду "on_click"
?
Ответы
Ответ 1
Если вы хотите, чтобы что-то произошло, когда пользователь дважды щелкает, добавьте привязку к "<Double-1>"
. Поскольку один клик устанавливает выбор, в вашем обратном вызове вы можете запросить виджет, чтобы узнать, что выбрано. Например:
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self.tree = ttk.Treeview()
self.tree.pack()
for i in range(10):
self.tree.insert("", "end", text="Item %s" % i)
self.tree.bind("<Double-1>", self.OnDoubleClick)
self.root.mainloop()
def OnDoubleClick(self, event):
item = self.tree.selection()[0]
print("you clicked on", self.tree.item(item,"text"))
if __name__ == "__main__":
app = App()
Ответ 2
Предыдущее решение выходит из строя, когда выбрано несколько элементов, и пользователь использует SHIFT+CLICK
(по крайней мере, на Mac).
Вот лучшее решение:
import tkinter as tk
import tkinter.ttk as ttk
class App:
def __init__(self):
self.root = tk.Tk()
self.tree = ttk.Treeview()
self.tree.pack()
for i in range(10):
self.tree.insert("", "end", text="Item %s" % i)
self.tree.bind("<Double-1>", self.OnDoubleClick)
self.root.mainloop()
def OnDoubleClick(self, event):
item = self.tree.identify('item',event.x,event.y)
print("you clicked on", self.tree.item(item,"text"))
if __name__ == "__main__":
app = App()
Ответ 3
Я знаю, что это старый, но этот код также будет печатать несколько выбранных элементов в виде дерева.
def on_double_click(self, event):
item = self.tree.selection()
for i in item:
print("you clicked on", self.tree.item(i, "values")[0])