Python 在Tkinter输入框的实例名称中使用变量

Python 在Tkinter输入框的实例名称中使用变量,python,tkinter,Python,Tkinter,我试图使用一个变量作为tkinter输入框的实例名,这样当我在for循环中无序移动时,每个框都有一个唯一的实例名。有没有办法做到这一点,以便以后我可以提取单个条目值 hoursList = [1, 2, 3, 4, 5] x = 0 for item in hoursList: varName = "userEntry" + str(x) self.varName = tk.Entry(self.frame) self.va

我试图使用一个变量作为tkinter输入框的实例名,这样当我在for循环中无序移动时,每个框都有一个唯一的实例名。有没有办法做到这一点,以便以后我可以提取单个条目值

    hoursList = [1, 2, 3, 4, 5]
    x = 0
    for item in hoursList:
        varName = "userEntry" + str(x)
        self.varName = tk.Entry(self.frame)
        self.varName.grid()
        x += 1
    self.getInput = tk.Button(self.frame, text="Submit", command= self.submitHours())
    self.getInput.grid()

def submitHours(self):
    if self.varName.get() is not None:
        print(self.varName.get())

理想情况下,此段将创建5个名为“userEntry1”、“userEntry2”等的输入框,并打印每个提交的值。

尽量避免动态创建变量名。这是可能的,但是实现常常是复杂的,并且随着代码库变得越来越复杂,可能会导致难以理解的代码。相反,使用一个类似于
列表的容器来保存所有条目。他们不需要有名字,你只需要能够引用他们

此外,您的
command=self.submit\u hours()
没有做您认为它正在做的事情。正如所写,
self.submit\u hours
将在您创建提交按钮时运行。您希望将一个可调用对象传递给命令(如函数)。单击按钮时,将调用传递给命令的任何内容。要在代码中解决此问题,只需删除
self.submit\u hours()
上的括号,因为
self.submit\u hours
本身是可调用的

下面是一个简单的示例,演示如何将条目存储在列表中,如何访问条目,以及它们如何与
hour\u列表
相对应

将tkinter作为tk导入
MyApp类:
定义初始化(自):
self.root=tk.tk()
self.frame=tk.frame(master=self.root)
self.frame.grid()
self.hour_list=[1,2,3,4,5]
self.entries=[]
self.make_条目()
self.root.mainloop()
def提交时间(自我):
对于n,枚举中的条目(self.entries):
print(f“Entry{n}(hour{self.hour_list[n]})的值为“{Entry.get()}”)
返回
def make_条目(自身):
对于self.hour\u列表中的小时:
临时入口=传统入口(主入口=自框架)
temp_entry.grid()
self.entries.append(临时条目)
self.submit_button=tk.button(master=self.frame,text=“submit”,
命令=自我提交(小时)
self.submit_按钮.grid()
返回
test=MyApp()
这是我在条目中键入内容,然后点击提交按钮时的控制台输出:

Entry 0 (hour 1) has the value 'first box'
Entry 1 (hour 2) has the value 'this is the 2nd'
Entry 2 (hour 3) has the value 'and the third box'
Entry 3 (hour 4) has the value 'fourth'
Entry 4 (hour 5) has the value '5th'

可以动态创建命名变量吗?对你应该吗?否。相反,将每个未命名的输入框放入
列表或其他容器中,并在需要时在容器中循环。所有语言都有列表和字典来保存许多项。忘记单个变量。