Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对使用按钮Python创建的条目中的值求和_Python_Tkinter - Fatal编程技术网

对使用按钮Python创建的条目中的值求和

对使用按钮Python创建的条目中的值求和,python,tkinter,Python,Tkinter,我制作了一个Tkinter程序,该程序应该通过单击按钮创建新的输入框,并使用按钮sum对这些输入框中的值进行相加,然后将它们插入到输入框中以获得答案。 我不断地发现这个错误: x +=float(EntryNew.get()) NameError: name 'EntryNew' is not defined 你能告诉我我做错了什么吗? 代码如下: from tkinter import * from tkinter import ttk myApp = Tk() myApp.title("

我制作了一个Tkinter程序,该程序应该通过单击按钮创建新的输入框,并使用按钮sum对这些输入框中的值进行相加,然后将它们插入到输入框中以获得答案。 我不断地发现这个错误:

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()

对于类,您不需要使用全局变量。目前,您在全局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()

您还将注意到,我已向类中添加了一个列表。使用原始代码,您无法记住您创建的框。通过添加列表,我现在可以遍历所有框并对内容求和。

@AleksandarBeat重试。我刚刚知道你想做什么,并更新了我的答案。谢谢,它现在起作用了!而且,如果我想在每个输入框下面添加删除按钮,以便删除/删除输入,我应该编写什么函数?@AleksandarBeat这是一个单独的问题。记住这不是免费的编码服务,我已经解决了你问的问题。您可能希望使用小部件的grid_-forget方法将其从屏幕中删除,并使用remove方法将小部件元素从EntryBoxList中删除