全局变量:名称未定义
Global variable: name not defined
所以我试图构建一个计算器:
def button_add():
first_num = e.get()
global f_num
global math
math = "add"
f_num = int(first_num)
e.delete(0, END)
def button_min():
first_num = e.get()
global f_num
global math
math = "min"
f_num = int(first_num)
e.delete(0, END)
def button_equal():
second_num = e.get()
e.delete(0, END)
global math
if math == "add":
e.insert(0, f_num + int(second_num))
elif math == "min":
e.insert(0, f_num - int(second_num))
# Button command
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal())
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add())
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min())
但是在 运行 之后我遇到了一个错误:
File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 89, in <module>
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m",command=button_equal())
File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 52, in button_equal
if math == "add":
NameError: name 'math' is not defined
我是初学者,我遵循了这个 guide,并且我已经仔细检查了代码,使其与视频中的代码相匹配。为什么 global
不工作?这与我使用的 Python 版本有什么关系吗?
Ps。我只包括我的一些代码,因为其余代码与我的问题无关。
当你使用command=button_equal()
时,button_equal()
会立即执行。那时math
(最好不要使用标准模块名作为变量名)没有定义。
您应该将函数引用(不带 ()
的函数名称)分配给 command
选项:
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal)
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add)
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min)
请注意,如果您在单击 + 或 - 之前单击 =,则会出现相同的异常被提高。所以最好先初始化 math
:
math = None
equal = Button(...)
所以我试图构建一个计算器:
def button_add():
first_num = e.get()
global f_num
global math
math = "add"
f_num = int(first_num)
e.delete(0, END)
def button_min():
first_num = e.get()
global f_num
global math
math = "min"
f_num = int(first_num)
e.delete(0, END)
def button_equal():
second_num = e.get()
e.delete(0, END)
global math
if math == "add":
e.insert(0, f_num + int(second_num))
elif math == "min":
e.insert(0, f_num - int(second_num))
# Button command
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal())
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add())
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min())
但是在 运行 之后我遇到了一个错误:
File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 89, in <module>
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m",command=button_equal())
File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 52, in button_equal
if math == "add":
NameError: name 'math' is not defined
我是初学者,我遵循了这个 guide,并且我已经仔细检查了代码,使其与视频中的代码相匹配。为什么 global
不工作?这与我使用的 Python 版本有什么关系吗?
Ps。我只包括我的一些代码,因为其余代码与我的问题无关。
当你使用command=button_equal()
时,button_equal()
会立即执行。那时math
(最好不要使用标准模块名作为变量名)没有定义。
您应该将函数引用(不带 ()
的函数名称)分配给 command
选项:
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal)
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add)
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min)
请注意,如果您在单击 + 或 - 之前单击 =,则会出现相同的异常被提高。所以最好先初始化 math
:
math = None
equal = Button(...)