2016-01-04 27 views
0

我已經制作了一個可變數量的按鈕和條目的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 看到我已經上傳的圖片,右上角「確定」按鈕追加條目。我想要左上角的按鈕也附加它的各自的條目。

+1

爲什麼在'for'循環中定義'getFuseType'? –

+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) 
0

獲取getFuseTypefor的,它是指每次循環,因此你只能得到最後創建的條目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) 
相關問題