python - Tkinter Treeview 在特定列的最后一行插入值
问题描述
我有一个值列表,这些值是使用带有 for 循环的 Web 应用程序处理的,每个都给出不同的 5 种类型的结果,然后我根据我收到的结果将值附加到列表中,我想使用 Tkinter Treeview 反映这些结果桌子。
我已经尝试过这个链接的答案https://stackoverflow.com/a/54208124/10401287但每次它都会在表格末尾创建一个新行。但我想在该特定列的最后一行插入值。
我得到了什么:
success | Fail | stage1 | stage2 | stage3|
id1
id2
id3
id4
id5
id6
id7
id8
id9
我想要的是:
success | Fail | stage1 | stage2 | stage3|
id1 id4 id5 id7
id2 id9
id3
id6
id8
sample data = ['id1','id2','id3','id4','id5','id6','id7','id8','id9']
我尝试使用此代码将值列表插入特定列,但它会引发 item not found 错误:
self.tree_view.insert('stage2',END, values=('id7','id9'))
解决方案
当您想在特定列中附加数据时,您可以使用Treeview.set(...)
而不是。Treeview.insert(...)
但是您需要在附加到该列之前创建该行。
下面是一个示例代码:
import tkinter as tk
from tkinter import ttk
import random
root = tk.Tk()
columns = ("success", "fail", "stage1", "stage2", "stage3")
tree = ttk.Treeview(root, columns=columns, show="headings")
tree.pack()
for col in columns:
tree.heading(col, text=col)
tree.column(col, anchor="c", width=100)
data = ['id1','id2','id3','id4','id5','id6','id7','id8','id9']
# dictionary to store the number of items filled in each column
rowcount = {col:0 for col in columns}
treesize = 0
for item in data:
# use random choice from columns as an example
col = random.choice(columns)
rowcount[col] += 1
if rowcount[col] > treesize:
# insert a dummy row
tree.insert("", "end", iid=treesize, value=[])
treesize += 1
# append the item in corresponding column
tree.set(rowcount[col]-1, col, item)
root.mainloop()
推荐阅读
- git - Visual Studio Code / Git - 将更改从主分支移动到新分支
- android - kotlin 多平台项目中的 kotlinOptions
- gatsby - 如何在 Gatsby 上实现 Netlify 表单
- amazon-web-services - 如何从外部网站将项目插入 AWS dynamoDb
- c - 我可以优化返回 12 字节结构的函数的内存使用吗?
- asp.net-mvc - ASP.NET Cored C# 实体 - JSON 导入
- spring-boot - 如何在 Spring Boot 后端将 Auth Code goole 换成 Token?
- c# - 为什么不等待这种方法?
- python - 如何仅删除 csv 的一行并将更改保存在同一个 csv 中?[Python]
- python - 压缩中for循环期间的输入