如何访问列表中的对象?如何一次创建多个按顺序命名的对象?
How to access objects in lists? How to create many sequentially named objects at once?
我想要一长串复选按钮和条目。我使用 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' object has no attribute 'insert',参考上面代码的最后一行。
我将如何访问列表中的对象?是否有 smarter/better 方法来创建大量对象并为它们分配顺序名称?
.grid()
方法 returns None
因为它会就地更改小部件。它不 return 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")
请注意,我使用 chk
和 txt
引用将 .grid()
调用移至新行。
您可以使用 -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)
我想要一长串复选按钮和条目。我使用 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' object has no attribute 'insert',参考上面代码的最后一行。
我将如何访问列表中的对象?是否有 smarter/better 方法来创建大量对象并为它们分配顺序名称?
.grid()
方法 returns None
因为它会就地更改小部件。它不 return 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")
请注意,我使用 chk
和 txt
引用将 .grid()
调用移至新行。
您可以使用 -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)