Поэтому я пытался построить калькулятор:
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, которую я использую?
Пс. Я включаю только часть своего кода, потому что остальные не имеют отношения к моей проблеме.
Когда вы используете 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(...)
Моя проблема заключалась в том, чтобы поставить () после команд кнопки, большое спасибо!