В каждой из ваших функций вы создаете новый resultLabel1
.Это означает, что вы создаете новую метку каждый раз, когда выполняете расчет, вместо того, чтобы перезаписывать или редактировать одну и ту же метку.
Каждый раз, когда вы создаете новую метку в каждой функции, вы создаете переменную local
.Это означает, что переменная может использоваться только внутри этой функции, поэтому она не перезаписывается во всех других функциях.
Чтобы решить эту проблему, вы можете создать виджет Label
со всеми остальными:
l1 = Label(w, text="First number: ")
l2 = Label(w, text="Second number: ")
e1 = Entry(w)
e2 = Entry(w)
b1 = Button(w, text="*", command=multiply)
b2 = Button(w, text="/", command=division)
b3 = Button(w, text="-", command=subtraction)
b4 = Button(w, text="+", command=addition)
b5 = Button(w, text="Exit", command=w.quit)
resultlabel1 = Label(w) # leave the text empty when you first create it
Затем вы можете добавить его в окно со всеми другими виджетами тоже:
l1.grid(row=0, column=0)
l2.grid(row=1, column=0)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
b1.grid(row=0, column=2)
b2.grid(row=0, column=3)
b3.grid(row=1, column=3)
b4.grid(row=1, column=2)
b5.grid(row=2, column=4)
resultlabel1.grid(row=2, column=0)
-
Создав свой ярлык снаружи функции, это означает, что она является переменной global
и может использоваться везде.
Я буду использовать функцию умножения в качестве примера.Первое, что вам нужно сделать, это глобализировать resultLabel1
.Это означает, что она может использоваться внутри функции как переменная global
, и что функция не должна использовать свою собственную переменную local
.
Теперь вместо создания нового экземпляра resultLabel1
каждый раз, когда вы запускаете расчет, вы должны редактировать уже созданную вами метку.Использование global resultLabel1
позволяет нам получить доступ к переменной из этой функции.Чтобы отредактировать виджет, вы используете .config(**options)
, и в качестве аргументов укажите вещи, которые вы хотите изменить (подробнее см. Здесь) .Таким образом, в этом случае вы должны запустить resultLabel1.config(text=result1)
def multiply():
global resultLabel1 # means the function can use the global variable
number1 = float(e1.get())
number2 = float(e2.get())
result1 = number1 * number2
resultlabel1.config(text=result1) # edits the variable's text