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

时间:2011-07-21 12:51:27

标签: python tkinter

我正在尝试编写一个小程序,其中包含使用Python和Tkinter的标签和条目字段列表(请参阅下面的代码)。添加小部件没有问题。但是,当我想使用其中一个实例的方法(如其中一个Entry-fields上的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()

我试过一个简单的

entries[i].insert("text to insert")

e = Entry
e = entries[i]
e.insert...

但它没有帮助。我已经看到了其他人试图在列表中使用对象的例子,看起来他们只是像我在第一次尝试中那样做。我错过了什么吗?

由于

2 个答案:

答案 0 :(得分:4)

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()

答案 1 :(得分:1)

在我开始使用Python之前,我遇到了这个问题。我当时想,“为什么要用两条线创建一些东西并设置网格位置。我会把它全部放在一条线上。”有趣的故事,'。grid'返回None。所以我认为你实际上并没有在这里附加任何东西。