Treeview 的 tree.item(iid)[‘values‘] 与 tree.item(item, ‘values‘) 的区别

 在代码中,一个不留意,一处地方用了tree.item(iid, 'values'),另一处地方用了tree.item(iid)['values'],出来的结果总报错,排查了半天。终于找到问题所在。 

使用treeview表格的数据时,最好还是用tree.item(iid, 'values'),获取结果全部是字符,必要时再将字符转成对应的类型。

tree.item(iid, 'values'):即使insert时填写了数值,用tree.item(iid, 'values')取得的也肯定是字符。

tree.item(iid)['values']即使insert时填写了字符,用tree.item(iid)['values']取得的也可能是数值。

# 创建主窗口和treeview控件
root = tk.Tk()
tree = ttk.Treeview(root, columns=("name", "age", "studentID"))

# 插入1行数据
tree.insert("", "end", values=("Tom", 12, "001"))

iid = tree.get_children()[0]
aaa = tree.item(iid)['values']  # 从treeview中获取taskId
bbb = tree.item(iid, 'values')
print("aaa =", aaa)
print("bbb =", bbb)

好变态,aaa得到的12、13 都是数字,bbb得到的12、13都是字符

aaa = ['Tom', 12, 1]
bbb = ('Tom', '12', '001')

根据官方文档解释: tkinter.ttk --- Tk 风格的控件 — Python 3.11.3 文档
item(item, option=None, **kw)
查询或修改某 item 的属性。
如果未给出 option,则返回属性/值构成的字典。如果给出了 option,则返回该属性的值。否则,将属性设为 kw 给出的值。

根据chatGPT的帮助

在 Python tkinter 中,treeview.item() 方法用于获取或设置 Treeview 中单个行或多个行的值或配置选项。
下面是该方法的基本语法:

item_id = treeview.selection()[0]  # 获取选中行的id
treeview.item(item_id, option=None, **kw)

其中,item_id 是 Treeview 中单个行的 ID;option 是要设置或获取的选项名称,可以是以下之一:

text: 返回或设置单元格中的文本;
values: 返回或设置单元格中的值;
image: 返回或设置单元格中的图像;
open: 返回或设置节点是否展开;
tags: 返回或设置行的标签。
**kw 是一个可选的关键字参数,可以用来设置选项的值。

如果 option 参数没有提供,则返回包含该行所有选项的字典。如果提供了 option 参数,则返回相应的值。如果同时提供了 option 和 **kw 参数,则设置选项的值。

你可能感兴趣的:(开发语言,python,tkinter,treeview)