我使用graphics.py创建一个简单的UI。我想将一些Entry对象设置为字段。有没有办法循环遍历字段名称列表并将它们用作变量名来创建Entry对象?或者这是一个可怕的“动态变量”boogeyman似乎不惜一切代价避免?
从概念上讲,我希望能够写出这样的内容:
from graphics import *
window = GraphWin("contact data", 200, 200)
x = 100
y = 10
field_names = ['name', 'address', 'phone']
field_text = ['Al', '123 4 Street', '555-666-7777']
for i in range(len(field_names)):
field_names[i] = Entry(Point(x, y + 30 * i), 15)
field_names[i].draw(window)
field_names[i].setText(field_text[i])
# don't know how to embed an image here to show the window
window.getMouse()
window.close()
产量:
print(name)
Al
print(address)
123 4 Street
print(phone)
555-666-7777
但我明白了:
print(name)
Traceback (most recent call last):
File "d:\GoogleDrive\CMPT103\graphics\untitled-1.py", line 15, in 0
builtins.NameError: name 'name' is not defined
答案 0 :(得分:0)
执行此操作时:
field_names[i].setText(field_text[i])
你想做什么?字符串没有setText
方法。
然而,即使他们这样做了,你也不会设置你认为的变量。您将更改field_names
数组,以便第一个元素不再是name
,而是name
项的值。
你想要的是一本字典。首先,将字典声明在脚本的顶部:
values_dict = {}
并在其中设置条目:
values_dict[field_names[i]] = field_text[i]
之后您可以像这样访问它们:
print(values_dict['name'])