python tkinter树获取所选项目值

时间:2015-06-03 08:06:35

标签: python tkinter tree row

我刚刚开始使用python 3.4中的一个小型tkinter树程序。

我坚持使用返回所选行的第一个值。 我有多行有4列,我在左键单击一个项目时调用一个函数:

tree.bind('<Button-1>', selectItem)

功能:

def selectItem(a):
    curItem = tree.focus()
    print(curItem, a)

这给了我这样的东西:

I003 <tkinter.Event object at 0x0179D130>

看起来所选项目已正确识别。 我现在需要的是如何获得行中的第一个值。

树创建:

from tkinter import *
from tkinter import ttk

def selectItem():
    pass

root = Tk()
tree = ttk.Treeview(root, columns=("size", "modified"))
tree["columns"] = ("date", "time", "loc")

tree.column("date", width=65)
tree.column("time", width=40)
tree.column("loc", width=100)

tree.heading("date", text="Date")
tree.heading("time", text="Time")
tree.heading("loc", text="Loc")
tree.bind('<Button-1>', selectItem)

tree.insert("","end",text = "Name",values = ("Date","Time","Loc"))

tree.grid()
root.mainloop()

2 个答案:

答案 0 :(得分:22)

要获取所选项目及其所有属性和值,您可以使用item方法:

def selectItem(a):
    curItem = tree.focus()
    print tree.item(curItem)

这将输出一个字典,然后您可以从中轻松检索单个值:

{'text': 'Name', 'image': '', 'values': [u'Date', u'Time', u'Loc'], 'open': 0, 'tags': ''}

另请注意,在树中的焦点发生变化之前,将执行回调,即在单击新项目之前,您将获得 的项目。解决此问题的一种方法是改为使用事件类型ButtonRelease

tree.bind('<ButtonRelease-1>', selectItem)

答案 1 :(得分:0)

这是获取在python tkinter树视图中选择的行的信息的好例子。请允许我代表这里讨论的最终整洁编码。我使用python 3.8

from tkinter import *
from tkinter import ttk

def selectItem(a):
    curItem = tree.focus()
    print(tree.item(curItem))

root = Tk()
tree = ttk.Treeview(root, columns=("size", "modified"))
tree["columns"] = ("date", "time", "loc")

tree.column("date", width=65)
tree.column("time", width=40)
tree.column("loc", width=100)

tree.heading("date", text="Date")
tree.heading("time", text="Time")
tree.heading("loc", text="Loc")
tree.bind('<ButtonRelease-1>', selectItem)

tree.insert("","end",text = "Name",values = ("Date","Time","Loc"))

tree.grid()
root.mainloop()

结果是

{'text': 'Name', 'image': '', 'values': ['Date', 'Time', 'Loc'], 'open': 0, 'tags': ''}

您可以复制,粘贴并尝试。很好。