Home > OS >  Destroying a label in Tk
Destroying a label in Tk

Time:03-25

I've wracked my brain about this. I'm new to Python and Tk,and just trying it out. I would think this would be really easy, but I can't get it. Here's my code:

from tkinter import *
window = Tk()
window.geometry = ('400x200')
mylabel = Label(window)

def button_command():
    Label(window).destroy()
    text = entry1.get()
    selection=variable.get()
    if selection == "Celsius":
        f = "Fahrenheit: "   str(round((int(text) - 32) * 5/9,2))
        mylabel = Label(window, text = f).pack()
    else:
        c = "Celsuius: "   str(round((int(int(text)) * 9/5)   32))
        mylabel = Label(window, text = c).pack()
    
    return None

def clear_label():
    mylabel.destroy()


entry1 = Entry(window, width = 20)
entry1.pack()
variable = StringVar(window)
variable.set("Fahrenheit") # default value

w = OptionMenu(window, variable, "Fahrenheit", "Celsius")
w.pack()


Button(window, text="Button", command=button_command).pack()
Button(window, text="Clear", command=clear_label).pack()

window.mainloop()

I don't get an error, but the clear_label function doesn't do anything. It doesn't return an error. It just doesn't work. Any suggestions would be appreciated. :)

CodePudding user response:

You never actually packed the label into the window, therefore there was nothing to destroy. If you run this code, you can see that once packed, your function works as expected.

from tkinter import *
window = Tk()
window.geometry = ('400x200')
mylabel = Label(window, text="test")

def button_command():
    Label(window).destroy()
    text = entry1.get()
    selection=variable.get()
    if selection == "Celsius":
        f = "Fahrenheit: "   str(round((int(text) - 32) * 5/9,2))
        mylabel = Label(window, text = f).pack()
    else:
        c = "Celsuius: "   str(round((int(int(text)) * 9/5)   32))
        mylabel = Label(window, text = c).pack()
    
    return None

def clear_label():
    mylabel.destroy()

mylabel.pack

entry1 = Entry(window, width = 20)
entry1.pack()
variable = StringVar(window)
variable.set("Fahrenheit") # default value

w = OptionMenu(window, variable, "Fahrenheit", "Celsius")

mylabel.pack()

Button(window, text="Button", command=button_command).pack()
Button(window, text="Clear", command=clear_label).pack()

window.mainloop()

CodePudding user response:

Not sure whether the aim of the exercise is to destroy a label or just clear the label and give it a new value. If it is the latter, it can be achieved using the text variable parameter to label.

from tkinter import *


def button_command():
    text = entry1.get()
    selection=variable.get()
    # Change the value of the stringvar to set the new value
    if selection == "Celsius":
        labelvalue.set("Fahrenheit: "   str(round((int(text) - 32) * 5/9,2)))
    else:
        labelvalue.set("Celsuius: "   str(round((int(int(text)) * 9/5)   32)))
    
    return None

def clear_label():
    # No need to destroy - just change the value
    labelvalue.set("")

window = Tk()
window.geometry = ('400x200')

entry1 = Entry(window, width = 20)
entry1.pack()
variable = StringVar(window)
variable.set("Fahrenheit") # default value

w = OptionMenu(window, variable, "Fahrenheit", "Celsius")
w.pack()


Button(window, text="Button", command=button_command).pack()
Button(window, text="Clear", command=clear_label).pack()

# The text displayed in mylabel will be the contents of labelvalue
labelvalue = StringVar()
mylabel = Label(window, textvariable=labelvalue)
mylabel.pack()

window.mainloop()
  • Related