【问题标题】:python tkinter - adding values from treeview columnpython tkinter - 从树视图列添加值
【发布时间】:2019-02-03 06:25:25
【问题描述】:

我的 GUI 中有树视图(n=行,3 列)。当用户在标签中输入值并按下按钮时,行会不断增加。假设用户输入了 3 个值,即 3 行被插入到我的树视图中。现在,我想将其中一列中的值相加并将其显示在另一个标签中。我该怎么做?

def __init__(self, parent, controller):
    self.entry=ttk.Entry(self,width=10,)
    self.entry.grid(row=2, column=2, ) #value entered by the user and displayed in Temp column
    self.entry1=ttk.Entry(self,width=10,)
    self.entry1.grid(row=2, column=3, )#value entered by the user and displayed in time column
    ttk.Button(self, text='Enter', command=self.insert_data).grid(row=2,column=4, )#calling the method insert data to insert the values entered by the user
    self.tree = ttk.Treeview( self, columns=('Temp','time'))
    self.tree.heading('#0', text='Number')
    self.tree.heading('#1', text='Temp')
    self.tree.heading('#2', text='time')
    self.tree.column('#1', stretch=tk.YES)
    self.tree.column('#2', stretch=tk.YES)
    self.tree.column('#0', stretch=tk.YES)
    self.tree.grid(row=5, columnspan=4, sticky='nsew')
    self.treeview = self.tree
    # Initialize the counter
    self.i = 1

    ttk.Label(self, text='Sum').grid(row=6, column=1, sticky='e') 
    ttk.Label(self,width = 10,).grid(row=6, column=2, sticky="e") #***I want to display the sume of values entered in the column 'Temp' in this label
def insert_data(self):

    self.treeview.insert('', 'end', text=str(self.i), values=(self.entry.get(), self.entry1.get()+"h"))
    # Increment counter
    self.i = self.i + 1 

【问题讨论】:

  • 您的问题没有包含足够的细节。通常我们会要求您创建一个minimal reproducible example,以便我们可以看到您的尝试。否则,你的问题写得太宽泛了。
  • 抱歉,我知道不清楚,但找不到编辑已发布问题的方法。但是,我的问题是:如何添加在树视图的列中输入的值并将其显示在标签中?
  • 点击问题底部标签下方的edit按钮。
  • @BryanOakley 请立即查看。如果您仍然不清楚,请告诉我

标签: python tkinter treeview


【解决方案1】:

如果我了解您想计算插入到 treeview 列中的总值。为此,您需要首先使用tree.get_children() 获取treeview 中的内容,然后对其进行迭代并使用index 来获取要汇总值的列。在我的代码中是index[0]。我函数中的这个sum1 += 表示将列中的所有值相加。

您可以将索引更改为 [1] 查看总值。

import tkinter as tk
import tkinter.ttk as ttk


def my_values_cal():
    sum1 = 0.0
    for child in tree.get_children():
        sum1 += float(tree.item(child, "values")[0])
        lab.config(text=sum1)

        print(sum1)



root = tk.Tk()

tree =ttk.Treeview(root, column=("col1", "col2", "col3"), show="headings")
tree.heading('#1', text='Number')
tree.heading('#2', text='Temp')
tree.heading('#3', text='time')


tree.insert("", tk.END, values=(24, "09", "2:00 AM"))
tree.insert("", tk.END, values=(34, "04", "5:00 AM"))
tree.insert("", tk.END, values=(40, "09", "1:00 PM"))
tree.insert("", tk.END, values=(94, "01", "23:00 PM"))
tree.insert("", tk.END, values=("38", "21", "21:00 AM"))

tree.pack()

lab = tk.Label(root, text="Total")
lab.pack()


b = tk.Button(root, text="CALCULATE", command=my_values_cal)
b.pack()


root.mainloop()

【讨论】:

  • 非常感谢。我不知道 'get.children()' 方法。很高兴知道。再次感谢您。
  • 扩展到它,我在第一列中显示数字,在第二列和第三列中显示条目。如果我从树视图中删除一个条目,如何自动更正第一列中的数字?例如。第一列有条目 1,2,3,4,5,如果我删除第 '3' 行,我有 1,2,4,5 而我需要 1,2,3,4。那么,如何自动更新数字呢?为了显示数字,我只使用了一个计数器,您可以在上面的主代码中看到它(def insert_data)。
  • 创建一个函数,删除后将剩余的数据再次插入treeview
  • 不,但是,我在那里遗漏了一些东西。我的条目(行)删除方法是 ****def clear_one_data(self): selected_item = self.treeview.selection()[0] self.treeview.delete(selected_item) ******* 我如何插入检查列中其他条目并自动更新数字的函数?
  • 不看代码对我来说很难,你可以创建最小的例子并发布新问题。
猜你喜欢
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2018-02-13
相关资源
最近更新 更多