Я думаю, что проблема в области действия ваших переменных.В Python можно убедиться, что код обрабатывает переменную как глобальную переменную, используя ключевое слово global
.В противном случае область видимости переменной относится только к этой функции - то есть она имеет только локальную область видимости, что делает ее локальной переменной - таким образом, она существует только внутри этой функции.Python делает все возможное, чтобы автоматически определить, что является локальным, а что глобальным, но использование ключевого слова global
обеспечивает это.
Таким образом, похоже, что ваша переменная number1
имела только локальную область видимости.Эта версия работает для меня.Я могу добавить 1
с 11
, чтобы получить 12
.
from tkinter import*
number1 = 0
number2 = 0
operator = 0
def one():
global e
e.insert(END, '1')
def add():
global e, operator, number1
operator = 1
number1 = int(e.get())
e.delete(0,END)
def equal():
global e, operator, number1, number2
number2 = int(e.get())
if (operator == 1):
result = int(number1+number2)
e.delete(0,END)
e.insert(END,result)
win = Tk()
win.geometry('200x300')
win.title('Calculator')
e = Entry(win, width=25)
e.grid(column=1, row=0)
Btn1= Button(win, text='1', command=one, height=2, width=4)
Btn1.grid(column=1, row=1)
addBtn= Button(win, text='+', command=add, height=1, width=2)
addBtn.grid(column=4, row=1)
equalBtn= Button(win, text='=', command=equal, height=1, width=2)
equalBtn.grid(column=4, row=2)
win.mainloop()
Кстати: ваши кнопки не появлялись в окне для меня, пока оно не развернулось.Возможно, эта сетка немного неправильна или окно слишком маленькое.
Кроме того, всякий раз, когда вы используете конвертер int()
для строки, существует очень реальная вероятность того, что она потерпит неудачу (как всякий раз, когда запись e
пустой).Это хорошая практика для обработки всех этих ошибок.Возможно, напишите одну функцию для проверки ввода и обработки ошибок, используя ее вместо int()