#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. Моя проблема заключалась в том, что я ставил () после команд кнопок, большое спасибо!