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

2024-05-16 20:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经制作了一个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”按钮会添加条目。我希望左上角的按钮也附加它各自的条目


Tags: text用户列表数量def条目guicolumn
2条回答

问题是函数没有围绕e变量创建闭包,因此它们只影响分配给e的最近(最后)个对象。如果你真的想这样做,你需要使用一个默认的参数

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)

for中获取getFuseType,它是在每次循环迭代中定义的,因此您只获取最后一个创建条目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)

相关问题 更多 >