点击Tkinter Treeview小部件中项的命令是什么?

25 投票
4 回答
59683 浏览
提问于 2025-04-16 04:35

我正在用Tkinter创建一个图形用户界面(GUI),其中有两个Treeview对象是主要部分。我希望当点击某个项目(比如一个目录)两次时,这两个Treeview的内容能够改变

如果Treeview的项目像按钮一样,我只需要把command设置为相应的函数就可以了。但我现在找不到一种方法来为Treeview的项目创建"on_click"的行为。

请问有什么Treeview的选项、方法等,可以让我把一个命令绑定到特定的项目上,并在"on_click"时执行这个命令呢?

4 个回答

4

我知道这个问题有点老了,不过这段代码也可以在树形视图中打印多个选中的项目。

def on_double_click(self, event):
    item = self.tree.selection()
    for i in item:
        print("you clicked on", self.tree.item(i, "values")[0])
26

之前的解决方案在选择多个元素时,如果用户使用了 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()
48

如果你想让某个事情在用户双击的时候发生,可以添加一个绑定到 "<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()

撰写回答