首页 > 解决方案 > 全局变量:名称未定义

问题描述

所以我试图建立一个计算器:

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

我是初学者,我遵循了本指南,并且我已经仔细检查了代码,使其与视频中的代码相匹配。为什么不global工作?这与我使用的 Python 版本有什么关系吗?

附言。我只包括我的一些代码,因为其余的与我的问题无关。

标签: tkinterglobal-variablesglobalcalculatornameerror

解决方案


使用时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(...)

推荐阅读