Skip to content
Advertisement

Tkinter destroying an object in a different function isn’t working

I’m trying to make a button that saves your username but then goes away after you set it. this is my code:

def printValue():
        User = Name.player_name.get()
        label.config(text=f'Hi, {User}')
        Name.button.destroy()
        Name.player_name.destroy()
def Name():
        label.config(text="What's your name?")
        Name.player_name = Entry(root)
        Name.player_name.pack(pady=15)
        Name.button = Button(text="Change", command=printValue)
        Name.button.pack()

Advertisement

Answer

The code below, with some minor changes like enabling change with [Return] and some layout cosmetics works OK (also with un-commented lines in printValue) . If you want the [Change] button and the entry area to go away un-comment the two lines turned into comments in the printValue function:

# https://stackoverflow.com/questions/72671126/tkinter-destroying-an-object-in-a-different-function-isnt-working
from tkinter import Tk, mainloop, Entry, Button, Label

root = Tk()
label = Label(root, font=('',12), padx=15, pady=5)
label.pack()

def Name():
    label.config(text="What's your name?")
    Name.player_name = Entry(root, font=('',12))
    Name.player_name.pack(padx=15, pady=15)
    Name.player_name.focus()
    Name.button      = Button(text="Change", command=printValue)
    Name.button.pack()

def printValue(event=None):
    User = Name.player_name.get()
    # Name.player_name.destroy()
    # Name.button.destroy()
    label.config(text=f'Hi, {User}')

Name()

root.bind("<Return>", printValue)

mainloop()

By the way: The in the question provided code demonstrates an interesting approach of making names of variables global by setting function attributes in the function itself. This way it is possible to assign values in one function and retrieve them in another without passing return values or declaring variables global. I am not aware of already having seen such approach used in Python code here on stackoverflow. How does it come you use such code?

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement