首页 > 解决方案 > 如何使用 Python 从 TKinter 的 Treeview 中的列中获取所有值

问题描述

我有一张在 Tkinter 中使用 Treeview 制作的表格。我想将第 6 列中的所有值加在一起,并将该数字显示在输入框中。我怎样才能做到这一点?我不知道从树视图表中获取值然后以有意义的方式使用它们。.get() 不存在, .get_children 根本不起作用。谢谢你的帮助!

from tkinter import *
from tkinter import ttk


f1= tk()
root.geometry("750x500")
Invoice_Maker = LabelFrame(f1, text = "Invoice")
Invoice_Maker.grid(row=8,column=0,columnspan=4)
Qty_Label = Label(Invoice_Maker, text = "        Qty:")
Qty_Label.grid(row=0,column=0)
Quantity_Box = Entry(Invoice_Maker, width=15)
Quantity_Box.grid(row=0,column=1)
clicked = StringVar()
clicked.set("Select Item")
Dropdown = OptionMenu(Invoice_Maker, clicked, "Bandana", "Du-Rag/Stocking cap",
                    "Winter Hats", "Gloves", "A-shirt", "Belt",
                    "Capdana", "Mask", "Sleeve","T-shirt RoundNeck", "T-shirt V-Neck",
                    "T-shirt LongSleeve","Japanese Hat", "Sunglass", "Small Straw Hat", "Cap",
                    "Bucket Hat", "Safari Hat", "Large Straw Hat", "Banded Straw Hat",
                    "Neon T-Shirt", "Panama Jack", "Lady Hats", "Fedora", "Straw Hat Ranchero",
                    "Team Hats", "Speedy Hat", "Misc", "Bike Tires", "Machetes", "Balones")
Dropdown.grid(row=0, column=2)
Style_Label = Label(Invoice_Maker, text = "Style:")
Style_Label.grid(row = 0, column = 3)
StyleMenu = StringVar()
StyleMenu.set("N/A")
Style = OptionMenu(Invoice_Maker,StyleMenu, "Plain","Camo","Neon")
Style.grid(row=0,column=4)
Cost_Label = Label(Invoice_Maker,text  = "Cost:")
Cost_Label.grid(row=0,column=5)
Cost = Entry(Invoice_Maker, width=7)
Cost.grid(row=0, column=6)
Retail_Label = Label(Invoice_Maker,text  = "Retail:")
Retail_Label.grid(row=0,column=7)
Retail = Entry(Invoice_Maker, width=7)
Retail.grid(row=0, column=8)
Inv_Frame = LabelFrame(Invoice_Maker, bg="red")
Inv_Frame.grid(row=1,column=0,columnspan=10)
global Trv
Trv = ttk.Treeview(Inv_Frame)
Trv.pack(side=RIGHT)
Trv["columns"] = ("2","3","4","5","6")
Trv.column("#0", width = 40)
Trv.column(1, width = 80)
Trv.column(2, width = 80)
Trv.column(3, width = 80)
Trv.column(4, width = 80)
Trv.column(5, width = 80)
Trv.column(6, width = 80)
Trv.heading("#0", text="#", anchor=W)
Trv.heading(1, text="Quantity", anchor=W)
Trv.heading(2, text="Item", anchor=W)
Trv.heading(3, text="Style", anchor=W)
Trv.heading(4, text="Cost", anchor=W)
Trv.heading(5, text="Retail", anchor=W)
Trv.heading(6, text="Total", anchor=W)
Scroll = Scrollbar(Inv_Frame, orient="vertical", command=Trv.yview)
Scroll.pack(side=LEFT, fill="y")

def Add_Item():
    Trv.insert("",END,text=Quantity_Box.get(), values=(clicked.get(),StyleMenu.get(),Cost.get(),
                                      Retail.get(),str(float(Quantity_Box.get())*float(Cost.get()))))



Total_Label = Label(Invoice_Maker, text="Total: ")
Total_Label.grid(row=3,column=8)
Total_Box = Entry(Invoice_Maker,width=10)#This is where I want the total of the numbers in row 6 to go
Total_Box.grid(row=3,column=9)

标签: pythonuser-interfacetkintertreeviewttk

解决方案


您可以使用Treeview.set()来获取特定单元格的内容。

因此,您可以按以下方式计算总数:

def calc_total():
    total = sum(float(Trv.set(item,6)) for item in Trv.get_children())
    Total_Box.delete(0, 'end')
    Total_Box.insert('end', total)

如果calc_total()您想更新Total_Box.


推荐阅读