循环只附加在最后一个按钮上

时间:2016-01-04 23:29:35

标签: python for-loop append

我使用可变数量的按钮和条目制作了一个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'按钮附加条目。我希望左上方的按钮也附加它的相应条目。

2 个答案:

答案 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)