Python 所以我在学校项目的Tkinter代码中不断出现这个名字错误,我不太明白为什么
文件“main.py”,第47行,计算 如果(i.get()==1): 名称错误:未定义名称“i” 这是我一直收到的错误,我不太明白为什么。如果这有帮助的话,我主要是一个初学者。非常感谢您的帮助,以下是代码。它是一个货币转换器,但目前还不完整,因为我不明白错误是什么,如何修复它Python 所以我在学校项目的Tkinter代码中不断出现这个名字错误,我不太明白为什么,python,tkinter,nameerror,Python,Tkinter,Nameerror,文件“main.py”,第47行,计算 如果(i.get()==1): 名称错误:未定义名称“i” 这是我一直收到的错误,我不太明白为什么。如果这有帮助的话,我主要是一个初学者。非常感谢您的帮助,以下是代码。它是一个货币转换器,但目前还不完整,因为我不明白错误是什么,如何修复它 #the name of this app is MyFirstGui class MyFirstGUI: def __init__(self, master): self.master = master
#the name of this app is MyFirstGui
class MyFirstGUI:
def __init__(self, master):
self.master = master
#The title
self.label_a = Label(master, text="~~~ Currency Converter ~~~")
self.label_a.pack(padx = 10, pady = 10)
#Where you would enter the amount of money
self.label_b = Label(master, text="Enter Amount of Money (CDN)")
self.label_b.pack()
self.money_entry = Entry(master)
self.money_entry.pack()
i = IntVar()
#These will make bubble buttons appear that you can check
rad1 = Radiobutton(master,text='US Dollar', value=1, variable=i)
rad2 = Radiobutton(master,text='British Pound', value=2, variable=i)
rad3 = Radiobutton(master,text='Chinese Yuan', value=3, variable=i)
rad4 = Radiobutton(master,text='Euro', value=4, variable=i)
rad5 = Radiobutton(master,text='South Korean Won', value=5, variable=i)
rad6 = Radiobutton(master,text='Mexican Peso', value=6, variable=i)
rad1.pack(pady = 5, anchor = 'w')
rad2.pack(pady = 5, anchor = 'w')
rad3.pack(pady = 5, anchor = 'w')
rad4.pack(pady = 5, anchor = 'w')
rad5.pack(pady = 5, anchor = 'w')
rad6.pack(pady = 5, anchor = 'w')
self.label_results = Label(master, text="")
self.label_results.pack(padx = 10, pady = 10)
#Button to calculate
self.button_a = Button(master, text="Calculate!", command=self.calculate)
self.button_a.pack()
#Where the calculations take place
def calculate(self):
if (i.get() == 1):
canadian_dollars = float(self.money_entry.get())
us_dollar = (canadian_dollars * 0.75)
self.label_results.config(text=("$%.2f Canadian Dollars will be equal to $%.2f when converted to US Dollars." % (canadian_dollars, us_dollar)))
root = Tk()
my_gui = MyFirstGUI(root)
root.mainloop()```
出现此错误是因为您没有在正在使用变量i的函数(在计算函数中)中定义变量i
如果要使用与init函数中的i变量相同的i变量,可以使用self.i而不仅仅是i将i作为实例变量,或者您可以将i作为参数传递给您的计算函数。您在
MyFirstGUI
的初始化函数中声明i
,但您没有将其范围扩展到包括其他函数,因此i
无法从您稍后声明的calculate()
函数访问。没有上下文,很难知道该推荐什么,但请尝试:
i
和root=Tk()
,在MyFirstGUI
类之外,如果您想添加更多可能引用i
的类i
将仅在第一个gui类的上下文中使用,使用self.i
和self.i.get()
i
成为一个全局的,但这通常是不鼓励的i
的类,那么重命名为self.i
,以便i
继承MyFirstGUI
的范围将是最合适的方法
如果您希望在单个函数的范围之外使用
i
(例如跨\uuu init\uuu()
和calculate()
使用i
,那么我也强烈建议您将i
重命名为更具体的名称。i
是\uu init\uu>中的局部变量
和so不能在calculate()
内访问。请将i
更改为self.i
(或使用i
以外的更好名称)。非常感谢您的快速响应!我实际上还没有学习全局变量。如果您不介意解释的话,我该怎么做?不要在这个应用程序中使用全局变量。请将程序中的i
重命名为self.i
,正如@Ken所建议的。对不起,我不是指全局变量,我指的是实例变量。您可以使用实例变量,将所有的“i”替换为“self.i”AttributeError:“NoneType”对象没有属性“\u root”我通过在顶部声明“i”得到了这个错误编辑:我得到了它我的道歉,它应该在下面root=Tk()
asIntVar()
是一个需要根的tkinter类。请尝试将i
的定义移动到root
声明的下方。如有必要,您可能需要将root
的声明移动到脚本的顶部。但只有在i
将在MyFirstGUI
之外使用时,甚至然后违背了好的OOP实践——在<代码> MyFirstGUI < /代码>的范围内声明<代码> i <代码>,并允许它继承<代码>自我>代码>。这是一个更明智的方法。很高兴听到!请考虑把这个页面上最有用的响应标记为一个被接受的答案,以帮助其他遇到这篇文章的人,如果他们有相同的答案的话。问题