Суммирование значений из записей, созданных с помощью кнопки Python - PullRequest
0 голосов
/ 16 мая 2018

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

x +=float(EntryNew.get())
NameError: name 'EntryNew' is not defined

Подскажите, пожалуйста, что я делаю не так?Это код:

from tkinter import *
from tkinter import ttk

myApp = Tk()
myApp.title("Kalkulator za materijal")                         
myApp.geometry("450x850")

Label1=Label(myApp, text="Answer")
Label1.grid(row=0,column=0)
Entry1=Entry(myApp)
Entry1.grid(row=1,column=0)


ColumnNumber=1
class ConcreteElement(object):
    def NewElement(self):

        global ColumnNumber
        ColumnNumber +=1

        LabelNew=Label(myApp, text="New Entry")       
        LabelNew.grid(row=0,column=ColumnNumber)

        EntryNew=Entry(myApp)       
        EntryNew.grid(row=1,column=ColumnNumber)

    def summing(self):
        x=0
        x +=float(EntryNew.get())

        Entry1.delete(0,"end")
        Entry1.insert(0,x)


    def __init__(self):

        newbutton=Button(myApp, text="add", command=self.NewElement)
        newbutton.grid(row=4,column=0)

        buttonsum=Button(myApp, text="sum", command=self.summing)
        buttonsum.grid(row=2,column=0)

ConcreteElement=ConcreteElement()      

myApp.mainloop()

1 Ответ

0 голосов
/ 16 мая 2018

С классами вам не нужно использовать глобальные переменные.На данный момент у вас странное сочетание между глобальными виджетами tkinter и принадлежащими классу ConcreteElement.Я создал новую версию вашего кода, которая может показать вам, как лучше достичь конечного результата.Исходя из вашего описания, ниже должно работать

from tkinter import *
from tkinter import ttk

myApp = Tk()
myApp.title("Kalkulator za materijal")                         
myApp.geometry("450x850")


class ConcreteElement(object):
    def __init__(self,myApp):
        self.Label1=Label(myApp, text="Answer")
        self.Label1.grid(row=0,column=1)
        self.ColumnNumber = 1

        #Create a blank list to store our entries
        self.EntryBoxList = []

        #Create the answer entry box
        self.Answer=Entry(myApp)
        self.Answer.grid(row=1,column=self.ColumnNumber)


        newbutton=Button(myApp, text="add", command=self.NewElement)
        newbutton.grid(row=4,column=1)

        buttonsum=Button(myApp, text="sum", command=self.summing)
        buttonsum.grid(row=2,column=1)



    def NewElement(self):

        self.ColumnNumber +=1

        self.LabelNew=Label(myApp, text="New Entry")       
        self.LabelNew.grid(row=0,column=self.ColumnNumber)

        #Create a new entry box and add it to the list
        EntryNew=Entry(myApp)       
        EntryNew.grid(row=1,column=self.ColumnNumber)
        self.EntryBoxList.append(EntryNew)

    def summing(self):
        x=0
        for box in self.EntryBoxList:
            x += float(box.get())


        self.Answer.delete(0,"end")
        self.Answer.insert(0,x)


ConcreteElement=ConcreteElement(myApp)      

myApp.mainloop()

Вы также заметите, что я добавил список в класс.С вашим оригинальным кодом у вас не было возможности вспомнить, какие ящики вы создали.Добавив список, я теперь могу перебрать все поля и суммировать содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...