首页 > 解决方案 > 在 tkinter 窗口中显示标签后,我无法弄清楚如何重置标签

问题描述

我正在尝试制作一个计算器,整个事情几乎完成了,但是在显示答案后我希望它重置以便可以显示新的答案。否则只会是乱七八糟的随机数。所以我基本上想知道是否有人知道某种可以在这里工作的重置命令。更多的英特尔在代码本身(又名什么标签)。这是代码:

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()

标签: python-3.xtkinter

解决方案


更改 a 的一种简单方法Label()是将其与 type 的 textvariable 相关联StringVar()。对 textvariable 的任何更新都将传播到标签。例如。

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()

推荐阅读