2015-12-22 35 views
2

早些時候,我在更改一個條目的狀態時遇到了問題。這是通過在新行上使用.grid()解決的,但是當我在程序中更改了它時,它只更改了其中一個條目。Python 3 Tkinter - 更改同名的多個條目的狀態

from tkinter import * 

def changestate(): 
    global entry1 
    entry1['state']='normal' 


root=Tk() 

entry1_list=[] 

def newday(): 
    global entry1 
    row=0 
    for i in range(0,5): 
     var=IntVar() 

     entry1=Entry(root,width=3,bd=4,textvariable=var,state='disabled') 
     entry1.grid(row=row,column=1) 

     entry1_list.append(var) 
     row=row+1 

    button1=Button(root,text='Change state',command=changestate).grid(row=row,column=1) 


newday() 

root.mainloop() 

這意味着所有條目的狀態變爲正常不過的按鈕被點擊它只會改變最後一個時。

我使用相同的名稱項,因爲我不想給他們多次在我的節目類型出來,因爲這將使它很長,我不能夠讓用戶輸入的條目數他們想要出現。

有沒有一種方法可以單獨引用每個entry1以便這能起作用?

回答

2

可以存儲在列表中的條目,並更新每一個在你的函數:

def changestate(): 
    for e in entry1_list: 
     e['state'] = 'normal' 


root = Tk() 

entry1_list = [] 

def newday(): 
    var = IntVar() 
    for i in range(5): 
     entry1 = Entry(root, width=3, bd=4, textvariable=var, state='disabled') 
     entry1.grid(row=i, column=1) 
     entry1_list.append(entry1) 
    Button(root, text='Change state', command=changestate).grid(row=i+1, column=2) 

在你的代碼entry1被引用您的循環所以只有那些被更新的創建是最後一個。

+0

感謝這工作! –

+0

不用擔心,如果你想在兩個'e ['state'] ='normal'之間切換,如果e [「state」]!='normal'else'disabled'' –

+1

好的再次感謝。 :-) –