访问列表中的Tkinter小部件时出现问题

McW*_*lfe 2 python tkinter

我正在尝试编写一个小程序,其中有使用Python和Tkinter的Labels和Entry-fields列表(请参见下面的代码)。添加小部件没有问题。但是,当我想使用实例之一的方法(例如Entry字段之一上的Insert())时,我找不到解决方法。

我的代码如下所示:

from Tkinter import *
import random
root = Tk()

attributes = {'Strength':10, 'Dexterity':10, 'Constitution':10, 'Intelligence':10, 'wisdom':10, 'charisma':10}
entries = []
labels = []

i = 0
for a in attributes:
   labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W))
   entries.append(Entry(root).grid(column = 1, row = i))
   i = i+1

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我尝试了一个简单的

entries[i].insert("text to insert")
Run Code Online (Sandbox Code Playgroud)

e = Entry
e = entries[i]
e.insert...
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。我还看到了其他人尝试使用列表中对象的其他示例,看来他们的行为与我第一次尝试时所做的一样。我错过了什么吗?

谢谢

Ste*_*rry 5

Entry(root).grid()返回一个NoneType对象,因此您存储在列表中的全部是None。您可以先创建Entry小部件,grid()然后调用,然后将其添加到列表中。

from Tkinter import *
import random
root = Tk()
attributes = {'Strength':10, 'Dexterity':10, 'Constitution':10, 'Intelligence':10, 'wisdom':10, 'charisma':10}
entries = []
labels = []


for i,a in enumerate(attributes):
   labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W))
   e = Entry(root)
   e.grid(column=1, row=i)
   entries.append(e)
   entries[i].insert(INSERT,"text to insert")



root.mainloop()
Run Code Online (Sandbox Code Playgroud)