Python 3 Tkinter - 更改具有相同名称的多个条目的状态

时间:2015-12-22 16:33:14

标签: python python-3.x tkinter

之前我在改变一个条目的状态时遇到了麻烦。这是通过在新行上使用.grid()来解决的,但是当我在程序中更改它时,它只更改了其中一个条目。

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以便这样做?

1 个答案:

答案 0 :(得分: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中引用您在循环中创建的最后一个代码,以便只更新它。