tkinter Treeview:获取选定的项目值
tkinter Treeview: get selected item values
我刚开始使用 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()
要获取所选项目及其所有属性和值,可以使用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)
这是获取在 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': ''}
您可以复制粘贴试试看。不错。
如果你想获取行作为{列name:value对}:
def selectItem(a):
curRow = tree.set(a)
loc_value = curRow["loc"]
或者您想按列名获取单元格值
def selectItem(a):
loc_value = tree.set(a, column="loc")
我刚开始使用 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()
要获取所选项目及其所有属性和值,可以使用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)
这是获取在 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': ''}
您可以复制粘贴试试看。不错。
如果你想获取行作为{列name:value对}:
def selectItem(a):
curRow = tree.set(a)
loc_value = curRow["loc"]
或者您想按列名获取单元格值
def selectItem(a):
loc_value = tree.set(a, column="loc")