我有一个用 tkinter 制作的简单树视图。是否可以在 tkinter treview 中制作一个网格,以便它看起来更像一个表格?
我想让它更加“用户友好”,这样表/树视图的可视化可以更好。
from tkinter import *
from tkinter import ttk
myApp = Tk()
myApp.title(" Program ")
myApp.geometry("800x700")
tree = ttk.Treeview(myApp,height=25)
tree['show'] = 'headings'
sb = ttk.Scrollbar(myApp, orient="vertical", command=tree.yview)
sb.grid(row=1,column=1,sticky="NS",pady=5)
tree.configure(yscrollcommand=sb.set)
tree["columns"]=("1","2","3")
tree.column("1", width=50)
tree.column("2", width=50)
tree.column("3", width=50)
tree.heading("1", text="Col 1")
tree.heading("2", text="Col 2")
tree.heading("3", text="Col 3")
item = tree.insert("", "end", values=("",))
tree.grid(row=1,column=0,padx=5,pady=5)
myApp.mainloop()
Run Code Online (Sandbox Code Playgroud) 有没有什么方法可以通过单击要编辑的单元格来更改/删除/更新或在树视图中添加新值?列名称的问题是相同的,我可以通过单击并在其上书写来手动更改列名称吗?
这是我编写的树视图代码:
from tkinter import *
from tkinter import ttk
myApp = Tk()
myApp.title("tree")
myApp.geometry("300x400")
tree = ttk.Treeview(myApp)
tree['show'] = 'headings'
sb = ttk.Scrollbar(myApp, orient="vertical", command=tree.yview)
sb.grid(row=1,column=12,rowspan=12,sticky="NS")
tree.configure(yscrollcommand=sb.set)
tree["columns"]=("1")
tree.column("1", width=230)
tree.heading("1", text="Name")
tree.insert("","end", values=("item"))
tree.grid(row=1 ,column=0,pady=5)
myApp.mainloop()
Run Code Online (Sandbox Code Playgroud) 我制作了一个树视图,我想在第一列和第二列中添加值,然后程序需要计算当您按 ENTER 按钮时将放入第三列的值(我使用了事件和绑定)。我不知道如何将值放入 Treeview 的特定列中,我总是收到此错误:
TypeError: 'float' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
我知道如何一次在每一列中插入值,但我不知道如何在不更改其他列中的值的情况下仅将一个值插入到特定列中。这是我写的函数:
def PlannedCosPerSize(event):
try:
for child in tree.get_children():
Size=round(float(tree.item(child,"values")[1]),2)
PlannedCost=round(float(tree.item(child,"values")[2]),2)
PlanCostPerSize=float(round(PlannedCost/Size,2))
tree.insert("","end", values=(PlanCostPerSize)[4])
print(PlanCostPerSize)
except IndexError:
Error=messagebox.showinfo("error","You have error")
pass
tree.bind('<Return>', PlannedCosPerSize) # validate with Enter
Run Code Online (Sandbox Code Playgroud)