Команда для нажатия на элементы виджета Tkinter Treeview? - PullRequest
14 голосов
/ 25 сентября 2010

Я создаю GUI с Tkinter, и основная часть GUI - это два объекта Treeview. Мне нужно, чтобы содержимое Treeview объектов изменилось , когда элемент (то есть каталог) был нажат дважды .

Если бы элементы Treeview были кнопками, я бы просто смог установить command на соответствующую функцию. Но у меня возникают проблемы с поиском способа создания "on_click" поведения для элементов Treeview.

Какая опция TreeView, метод и т. Д. Позволяет мне привязать команду к определенным элементам и выполнить эту команду "on_click"?

Ответы [ 3 ]

27 голосов
/ 25 сентября 2010

Если вы хотите, чтобы что-то происходило при двойном щелчке пользователя, добавьте привязку к "<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()
15 голосов
/ 02 января 2013

Предыдущее решение дает сбой, когда выбрано несколько элементов, и пользователь использует 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()
0 голосов
/ 08 апреля 2019

Я знаю, что это старый, но этот код также будет печатать несколько выбранных элементов в виде дерева.

def on_double_click(self, event):
    item = self.tree.selection()
    for i in item:
        print("you clicked on", self.tree.item(i, "values")[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...