如何访问列表中的对象?如何一次创建多个顺序命名的对象?

时间:2015-03-30 15:33:45

标签: python tkinter

我想要一长串的支票按钮和条目。我使用for循环创建它们,但是这不允许我为对象分配唯一的名称(例如textbox1,textbox2等),因为你不能"foo" + char(i) = whatever 。所以我创建了两个列表,一个用于检查按钮,另一个用于条目。但您如何访问列表中的对象?

slot1list_check = []
slot1list_text = []

for x in range (1,21):
    label = "S1Ch. " + str(x)
    chk = Checkbutton(app, text=label).grid(row=(x+1), column=0)
    txt = Entry(app, text=label).grid(row=(x+1), column=1)
    slot1list_check.append(chk)
    slot1list_text.append(txt)
    slot1list_text[x-1].insert(0,"whatever in this field")

我收到以下错误:AttributeError:' NoneType'对象没有属性' insert',引用上面代码中的最后一行。

我如何访问列表中的对象?是否有更聪明/更好的方法来创建大量对象并为它们分配顺序名称?

1 个答案:

答案 0 :(得分:1)

.grid()方法返回None,因为它会就地修改小部件。它不会返回CheckButton()Entry()元素。

分别致电.grid()

slot1list_check = []
slot1list_text = []

for x in range (1,21):
    label = "S1Ch. " + str(x)
    chk = Checkbutton(app, text=label)
    chk.grid(row=(x+1), column=0)
    txt = Entry(app, text=label)
    txt.grid(row=(x+1), column=1)
    slot1list_check.append(chk)
    slot1list_text.append(txt)
    slot1list_text[x-1].insert(0,"whatever in this field")

请注意,我使用.grid()chk引用将txt次调用移至新行。

您可以使用-1引用列表中的最后一个元素,因为负向索引从列表末尾向后计数。在这种情况下,您已经拥有对同一对象的txt引用,因此您可以直接使用它。

就个人而言,我只使用range(20)并在需要时使用+ 1

slot1list_check = []
slot1list_text = []

for x in range(20):
    label = "S1Ch. {}".format(x + 1)

    chk = Checkbutton(app, text=label)
    chk.grid(row=x + 2, column=0)
    slot1list_check.append(chk)

    txt = Entry(app, text=label)
    txt.grid(row=x + 2, column=1)
    txt.insert(0,"whatever in this field")
    slot1list_text.append(txt)