我使用可变数量的按钮和条目制作了一个gui,这取决于之前的用户输入。我想将新条目存储在列表中。然而,我的循环只会追加循环中创建的最后一个条目。如何让每个按钮附加它的相应用户条目?
def getFuseType():
(Fuse.fuseType).append(e.get()
print(Fuse.fuseType)
for i in range(1,int(Site.NoFuses)+1):
l = Label(FuseWindow, text = "Fuse Type")
e = Entry(FuseWindow)
l.grid(row = 1, column = i+3)
e.grid(row = 2, column = i+3)
b = Button(FuseWindow, text = "ok", command = getFuseType)
b.grid(row = 3, column = i+3)
Fuse GUI 看到我上传的图片,右上角' OK'按钮附加条目。我希望左上方的按钮也附加它的相应条目。
答案 0 :(得分:0)
问题是该函数不会在e
变量周围创建闭包,因此它们只影响分配给e
的最新(最后)对象。如果你真的想这样做,你需要使用默认的arg ..
for i in range(1,int(Site.NoFuses)+1):
l = Label(FuseWindow, text = "Fuse Type")
e = Entry(FuseWindow)
l.grid(row = 1, column = i+3)
e.grid(row = 2, column = i+3)
def getFuseType(e=e):
(Fuse.fuseType).append(e.get())
print(Fuse.fuseType)
b = Button(FuseWindow, text = "ok", command = getFuseType)
b.grid(row = 3, column = i+3)
答案 1 :(得分:0)
从getFuseType
中获取for
,它是每次循环迭代定义的,因此您只获得最后一个创建条目e
def getFuseType(ent):
Fuse.fuseType.append(ent)
print(Fuse.fuseType)
for i in range(1,int(Site.NoFuses)+1):
l = Label(FuseWindow, text = "Fuse Type")
e = Entry(FuseWindow)
ent = e.get()
l.grid(row = 1, column = i+3)
e.grid(row = 2, column = i+3)
b = Button(FuseWindow, text = "ok", command = lambda ent = ent:getFuseType(ent))
b.grid(row = 3, column = i+3)