访问列表中的Tkinter控件时出现问题
我正在尝试用Python和Tkinter写一个小程序,里面有一些标签和输入框(见下面的代码)。添加这些组件没有问题。但是,当我想用其中一个输入框的某个方法(比如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 个回答
1
我在刚开始学Python的时候也遇到过这个问题。我当时想:“为什么要分两行来创建一个东西和设置它的位置呢?我把它们放在一行里就好了。”有趣的是,'.grid'这个方法返回的是None。所以我觉得你其实并没有在这里添加任何东西。
6
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()