我创建了一个这样的命名元组。
Named_Tuple_1 = namedtuple("Coordinates", ["x", "y", "z"], verbose=False, rename=False)
Point_1 = Named_Tuple_1(x=1, y=1, z=1)
Point_2 = Named_Tuple_1(x=2, y=2, z=2)
Point_3 = Named_Tuple_1(x=3, y=3, z=3)
我可以像这样轻松访问值。
Point_2.x
但是当我尝试从输入框中获取Point_2时,我收到此错误。
AttributeError: 'str' object has no attribute 'x'
所以我了解到输入框返回字符串值。
如何从字符串中获取namedtuple值?
String_1 = "Point_2"
String_1 ???
感谢。
很抱歉这个混乱。希望这更清楚。
所以在这里我决定使用Point_2.x添加Point_1.x并将总数添加到我的Dialog作为标签。
Named_Tuple_1 = namedtuple("Coordinates", ["x", "y", "z"], verbose=False, rename=False)
Point_1 = Named_Tuple_1(x=1, y=2, z=3)
Point_2 = Named_Tuple_1(x=4, y=5, z=6)
Point_3 = Named_Tuple_1(x=7, y=8, z=9)
def ADD_x_1():
Sum_of_x = Point_1.x + Point_2.x
My_Label_1 = Label(Dialog, text=Sum_of_x)
My_Label_1.pack()
Dialog = Tk()
My_Button_1 = Button(Dialog, text="Add x Value", command=ADD_x_1)
My_Button_1.pack()
Dialog.mainloop()
现在我想做同样的事情,但让用户决定要添加哪个点。
def ADD_x_2():
First_Point_x = My_Entry_1.get().x
Second_Point_x = My_Entry_2.get().x
Sum_of_x = First_Point_x + Second_Point_x
My_Label_3 = Label(Dialog, text=Sum_of_x)
My_Label_3.pack()
Dialog = Tk()
My_Label_1 = Label(Dialog, text="Select first point")
My_Label_1.pack()
My_Entry_1 = Entry(Dialog, bd=2, width=10)
My_Entry_1.pack()
My_Label_2 = Label(Dialog, text="Select second point")
My_Label_2.pack()
My_Entry_2 = Entry(Dialog, bd=2, width=10)
My_Entry_2.pack()
My_Button_2 = Button(Dialog, text="Add x Value", command=ADD_x_2)
My_Button_2.pack()
Dialog.mainloop()
我的问题是My_Entry_1.get()和My_Entry_2.get()是字符串。我得到错误AttributeError:' str'对象没有属性' x'。
所以我的问题是如何从My_Entry_1和My_Entry_2获取字符串来访问x值?
再次抱歉让人感到困惑。
感谢。
答案 0 :(得分:2)
我不确定在这种情况下输入框是什么,但我认为你在这里有一些选择。
1)将这些点输入字典并通过从输入框中返回的字符串对其进行索引。
point_dict = {'Point_1': Point_1, 'Point_2': Point_2, 'Point_3': Point_3}
entry_point = {{however you got the string from the entrypoint}}
point = point_dict[entry_point]
point.x
2)如果这些是在模块级别,您可以尝试从模块上下文中获取变量。
import sys
modname = globals()['__name__']
modobj = sys.modules[modname]
point = getattr(modobj, 'Point_1')
3)如果您尝试从函数中引用它,可以尝试使用eval:https://docs.python.org/3/library/functions.html#eval 或者,甚至更好的本地人():https://docs.python.org/2/library/functions.html#locals
##Point_1 = eval('Point_1') risk due to executing arbitrary code
Point_1 = locals()['Point_1'] # Use this instead
答案 1 :(得分:0)