单击 Tkinter Treeview 小部件的项目的命令?

Posted

技术标签:

【中文标题】单击 Tkinter Treeview 小部件的项目的命令?【英文标题】:Command for clicking on the items of a Tkinter Treeview widget? 【发布时间】:2011-04-17 04:39:35 【问题描述】:

我正在用 Tkinter 创建一个 GUI,GUI 的主要部分是两个 Treeview 对象。当一个项目(即一个目录)被点击两次时,我需要 Treeview 对象的内容来更改

如果 Treeview 项目是按钮,我只需将 command 设置为适当的功能。但是我很难找到一种方法来为 Treeview 项目创建 "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】:

The previous solution fails when multiple elements are selected and the user uses SHIFT+CLICK (at least on a 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])

【讨论】:

以上是关于单击 Tkinter Treeview 小部件的项目的命令?的主要内容,如果未能解决你的问题,请参考以下文章

使用 tkinter Treeview 小部件显示目录内容

强制 Tkinter.ttk Treeview 小部件在缩小其列宽后调整大小

python tkinter treeview右键单击(Button-3)事件以选择树视图中的项目

有没有办法在tkinter treeview中重置索引?

单击时如何将按钮值从自定义小部件传递到 tkinter 中的主应用程序

python 3 - tkinter - ttk treeview:查看列文本