单击 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.ttk Treeview 小部件在缩小其列宽后调整大小
python tkinter treeview右键单击(Button-3)事件以选择树视图中的项目