You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter点击按钮创建输入框求和报错:NameError: EntryNew未定义

问题分析与解决

你遇到的NameError本质原因有两个:

  1. EntryNew是NewElement方法里的局部变量,方法执行完毕后就会被销毁,summing方法根本访问不到它;
  2. 就算能访问到,每次点击"add"创建的新输入框都会覆盖之前的EntryNew,最终你也只能拿到最后一个输入框的值,没法实现所有输入框的求和。

修复方案

我们需要把所有动态创建的输入框存储起来,用类的实例变量来维护这个集合,这样NewElement和summing方法都能访问到。具体步骤:

  • 在类的__init__方法里初始化一个列表,用来保存所有动态创建的Entry对象;
  • 每次创建新输入框时,把它添加到这个列表中;
  • 求和时遍历这个列表,逐个获取输入值并累加。

修改后的完整代码

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 __init__(self):
        # 初始化列表存储所有动态创建的输入框
        self.entries = []
        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)

    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)
        # 将输入框添加到实例列表中
        self.entries.append(EntryNew)

    def summing(self):
        x = 0
        # 遍历所有存储的输入框,逐个取值累加
        for entry in self.entries:
            # 这里加了异常处理,防止输入非数字导致崩溃
            try:
                x += float(entry.get())
            except ValueError:
                # 输入非数字时跳过,也可以改成弹窗提示用户
                pass
        Entry1.delete(0, "end")
        Entry1.insert(0, x)

ConcreteElement = ConcreteElement()
myApp.mainloop()

额外优化建议

  • 可以进一步替换global变量ColumnNumber为类的实例变量,让代码更模块化;
  • 给动态输入框添加清空按钮,方便用户删除不需要的输入项;
  • 若需要更友好的提示,可以在用户输入非数字时弹出错误提示框。

内容的提问来源于stack exchange,提问作者Aleksandar Beat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:57:58