Глобальная переменная: имя не определено

#tkinter #global-variables #global #calculator #nameerror

#tkinter #глобальные переменные #глобальная #калькулятор #ошибка имени

Вопрос:

Итак, я пытался создать калькулятор:

 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:UsersVAIOPycharmProjectsprojectcalculator.py", line 89, in <module>
   equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m",command=button_equal())
   File "C:UsersVAIOPycharmProjectsprojectcalculator.py", line 52, in button_equal
    if math == "add":
   NameError: name 'math' is not defined
 

Я новичок, и я следовал этому руководству, и я уже дважды проверил код, чтобы он соответствовал тому, что в видео. Почему не global работает? Имеет ли это какое-либо отношение к версии Python, которую я использую?

Ps. Я включаю только часть своего кода, потому что остальные из них не имеют отношения к моей проблеме.

Ответ №1:

Когда вы используете 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(...)
 

Комментарии:

1. Моя проблема заключалась в том, что я ставил () после команд кнопок, большое спасибо!