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

3 投票
2 回答
4865 浏览
提问于 2025-04-16 21:59

我正在尝试用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()

撰写回答