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?