如何在Python中动态创建对象?

如何在Python中动态创建对象?,python,tkinter,Python,Tkinter,我希望能够在我的程序中使用tkinter具有唯一返回函数的多个条目 我现在使用的是一个for循环,其中包含以下内容: 。。。 父项=帧(自…) #值是一个字典,包含每个标签的名称 #以及用户输入和特定命令的列表 对于键,值中的值。项() 临时名称帧=帧(父帧) 临时包装(fill=“无”,expand=“无”,anchor=“w”) temp\u name\u label=label(temp\u name\u frame,text=key,width=30,anchor='w') 临时包装(侧

我希望能够在我的程序中使用tkinter具有唯一返回函数的多个条目

我现在使用的是一个for循环,其中包含以下内容:

。。。
父项=帧(自…)
#值是一个字典,包含每个标签的名称
#以及用户输入和特定命令的列表
对于键,值中的值。项()
临时名称帧=帧(父帧)
临时包装(fill=“无”,expand=“无”,anchor=“w”)
temp\u name\u label=label(temp\u name\u frame,text=key,width=30,anchor='w')
临时包装(侧面=左侧,锚定=w')
temp\u name\u entry=entry(temp\u name\u帧,宽度=20)
临时名称入口包装(侧面=左侧)
临时名称项。插入(结束,值[0])
temp_name_entry.bind(“”,lambda e:send_命令(值[1]))
...
导出的结果:
当我运行程序时,预期结果是一个帧
parent
,内部有多个帧
temp\u name\u Frame
。在这些帧中的每一帧中都有一个标签
temp\u name\u Label
,带有文本
key
和条目
temp\u name\u Entry
以及值
value[0]
,每个条目在返回时都有一个唯一的命令
value[1]

实际结果:
当我运行程序时,结果是一个包含多个帧的帧
temp\u name\u Frame
。在这些帧中的每一帧中都存在一个标签
temp\u name\u Label
,其中包含文本
和条目
temp\u name\u条目
,其中包含值
值[0]
但返回时,每个条目都有值字典中的最后一个命令
值[1]

我认为这是因为每个帧、标签和条目都被覆盖,因为每个变量的名称保持不变(
temp\u name\u Frame
temp\u name\u Label
temp\u name\u Entry

但如果这是真的,为什么我有多个标签和条目具有正确的标签文本和条目值

另一个不带代码的示例:
我有3个标签,它们的识别名称分别为
Unique command 1 Label
Unique command 2 Label
Unique command 3 Label

我有3个条目,在返回时分别打印类似于
Unique command 1
Unique command 2
Unique command 3
,启动时每个条目值分别为1、2和3

结果:
每个标签都有正确的文本:
Unique command 1标签
Unique command 2标签
Unique command 3标签

每个条目在启动时都有正确的值(1、2和3)

但是每个条目都返回“Unique command 3”

这通常被称为反射,有时也称为内省。查看一个类似的问题,这些问题都有你想要做的事情的答案:


您在Python中遇到了一个相当常见的后期绑定问题。你可以阅读这篇文章了解更多细节

基本上,您需要在
lambda
函数中强制关闭,如下所示:

...

def send_command(event, string): #just a made up function
    print (string)

for key, value in values.items():
    ...
    temp_name_entry.bind('<Return>', lambda e, v=value[1]: send_command(e, v))
。。。
def send_命令(事件、字符串):#只是一个虚构的函数
打印(字符串)
对于键,值中的值。项()
...
temp_name_entry.bind(“”,lambda e,v=value[1]:send_命令(e,v))