Суммирование значений из дерева, если строка пуста Tkinter - PullRequest
0 голосов
/ 03 июля 2018

Я хочу суммировать значения из столбца древовидной структуры независимо от того, является ли одна из строк пустой, также я хочу удалить эту строку при нажатии кнопки Сумма. Я написал код, но всегда получаю эту ошибку:

IndexError: string index out of range

Это код:

from tkinter import*
from tkinter import ttk

myApp = Tk()
myApp.title(" Program ")                         

TotalEntry=Entry(myApp, width=18)
TotalEntry.grid(row=0,column=1, sticky="e", pady=5)

NewTree= ttk.Treeview(myApp, height=7)

NewTree['show'] = 'headings'
NewTree["columns"]=("1")

NewTree.column("1", width=80, anchor="center")

NewTree.heading("1", text="ID")

item = NewTree.insert("", "end", values=(2))
item = NewTree.insert("", "end", values=(""))
item = NewTree.insert("", "end", values=(6))

NewTree.grid(row=0,column=0)

def SumAllCosts():

    for i in NewTree.get_children():
        a = NewTree.item(i,"values")[0]

        if len(a)==0:
            NewTree.delete(i)

    SumPreCosts=0.0
    for child in NewTree.get_children():
        PreCost=round(float(NewTree.item(child,"values")[0]),2)
        SumPreCosts += PreCost

        TotalEntry.delete(0,"end")
        TotalEntry.insert(0,round(SumPreCosts,2))


Sum=Button(myApp,text=" Sum ",command=SumAllCosts)
Sum.grid(row=0,column=2, sticky="w",pady=5)


myApp.mainloop()

1 Ответ

0 голосов
/ 03 июля 2018

Если вы напечатаете type(NewTree.item(i, "values")) и repr(NewTree.item(i, "values")), вы увидите, что это возвращает

<class 'tuple'> ('2',)
<class 'str'> ''
<class 'tuple'> ('6',)

Как видите, для записей 2 и 6 возвращается кортеж, поэтому вы можете сделать NewTree.item(i, "values")[0], чтобы получить первое значение. Однако пустой элемент возвращается в виде пустой строки, поэтому NewTree.item(i, "values")[0] выдает ошибку, которую вы описали.

Вы можете изменить эту часть кода, чтобы проверить, не является ли NewTree.item(i, "values") не пустым:

for i in NewTree.get_children():
    if not NewTree.item(i, "values"):
        NewTree.delete(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...