Я не могу понять, как сбросить метки после того, как они были отображены в окне tkinter - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь сделать калькулятор, и все почти готово, но после отображения ответа я хочу, чтобы он был сброшен, чтобы можно было отобразить новый ответ.В противном случае это будет просто беспорядок случайного числа.Поэтому мне было интересно, знает ли кто-нибудь какую-нибудь команду сброса, которая будет работать здесь.Больше информации в самом коде (АКА, что метка).Вот код:

import time
from tkinter import *

#This is where "Svar" or in English "answer" is being defined.
def Kalk(event):
    if operator.get() == "+":
        global Svar
        Svar = int(Nummer_1.get()) + int(Nummer_2.get())
        Answer(event)
    elif operator.get() == "-":
        Svar = int(Nummer_1.get()) - int(Nummer_2.get())
        Answer(event)
    elif operator.get() == "*":
        Svar = int(Nummer_1.get()) * int(Nummer_2.get())
        Answer(event)
    elif operator.get() == "/":
        Svar = int(Nummer_1.get()) / int(Nummer_2.get())
        Answer(event)
    else:
        Svar = ("Vennligst velg et av alternativene overfor")
        Answer(event)

#This is where it displays "Svar" which is "answer".
def Answer(event):
#I want this label("Label_4") to be reset so when I run this def again the numbers won't stack
    label_4 = Label(topFrame, text=Svar)
    label_4.grid(row=6)
    print(Svar)


kalkis = Tk()
kalkis.geometry("300x250")
kalkis.title("Kalkulator")
topFrame = Frame(kalkis)
topFrame.grid(row=0)
label = Label(topFrame, text="Du kan velge mellom '+', '-', '*'. '/' ")
label.grid(row=0)
operator = Entry(topFrame)
operator.grid(row=1)
label_2 = Label(topFrame, text="Skriv inn hvilket tall du vil bruke ")
label_2.grid(row=2)
Nummer_1 = Entry(topFrame)
#Nummer_1 = int(answer.get())
Nummer_1.grid(row=3)
Label_3 = Label(topFrame, text="Skriv inn ditt andre tall ")
Label_3.grid(row=4)
Nummer_2 = Entry(topFrame)
#Nummer_2 = int(answer.get())
Nummer_2.grid(row=5)
#Nummer_2.bind("<Return>", Kalk())


Refresh = Button(topFrame, text="Enter", command=kalkis)
Refresh.bind("<Enter>", Kalk)
Refresh.grid(row=6, column=1, sticky=W)

#Refresh.bind("<Return>", Kalk())


kalkis.mainloop()

1 Ответ

0 голосов
/ 31 января 2019

Простой способ изменить Label() - связать его с текстовой переменной типа StringVar().Любые обновления текстовой переменной будут распространяться на метку.Например,

display_text = StringVar()
label_4 = Label(topFrame, textvariable=display_text)

Функция Answer() создает новый ярлык при каждом вызове.Вместо этого просто создайте метку один раз, а затем обновите переменную текста для каждого вычисления.

import time
from tkinter import *

#This is where "Svar" or in English "answer" is being defined.
def Kalk(event):
    if operator.get() == "+":
        Svar = int(Nummer_1.get()) + int(Nummer_2.get())
        display_text.set(str(Svar))     # Update textvariable
    elif operator.get() == "-":
        Svar = int(Nummer_1.get()) - int(Nummer_2.get())
        display_text.set(str(Svar))     # Update textvariable
    elif operator.get() == "*":
        Svar = int(Nummer_1.get()) * int(Nummer_2.get())
        display_text.set(str(Svar))     # Update textvariable
    elif operator.get() == "/":
        Svar = int(Nummer_1.get()) / int(Nummer_2.get())
        display_text.set(str(Svar))     # Update textvariable
    else:
        Svar = ("Vennligst velg et av alternativene overfor")
        display_text.set(Svar)          # Update textvariable

kalkis = Tk()
kalkis.geometry("300x250")
kalkis.title("Kalkulator")
topFrame = Frame(kalkis)
topFrame.grid(row=0)
label = Label(topFrame, text="Du kan velge mellom '+', '-', '*'. '/' ")
label.grid(row=0)
operator = Entry(topFrame)
operator.grid(row=1)
label_2 = Label(topFrame, text="Skriv inn hvilket tall du vil bruke ")
label_2.grid(row=2)
Nummer_1 = Entry(topFrame)
Nummer_1.grid(row=3)
Label_3 = Label(topFrame, text="Skriv inn ditt andre tall ")
Label_3.grid(row=4)
Nummer_2 = Entry(topFrame)
Nummer_2.grid(row=5)

# This is where it displays "Svar" which is "answer".
display_text = StringVar()  # Create a StringVar() to hold the result
label_4 = Label(topFrame, textvariable=display_text) # Associate to label
label_4.grid(row=6)

Refresh = Button(topFrame, text="Enter", command=kalkis)
Refresh.bind("<Enter>", Kalk)
Refresh.grid(row=6, column=1, sticky=W)

kalkis.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...