0

I'm writing a simple program in Python and Tkinter.

The Program shows and Entrybox for your name, put's out a welcome sentence with your name and deletes the content of the Entrybox.

Unfortunately the name itsself is deleted too, so I can't call it later in other sentences. The output of Q1_1 misses the name.

How can I fix that?

#NameInfo
NameInfo = ttk.Label(root, font=("Calibri", 14), text="Bitte geben Sie zuerst Ihren (eigenen) Namen ein:")
NameInfo.grid(column=0, row=3, sticky=tk.NW, padx=0, pady=0)
#Name
name = tk.StringVar()
getname = ttk.Entry(root, textvariable=name)
getname.grid(column=0, row=4, sticky=tk.NW, padx=0, pady=0)
#SaveName
SaveName = ttk.Button(root, text="Speichern", command=lambda: DisplayWelcome())
SaveName.grid(column=1, row=4, sticky=tk.NW, padx=0, pady=0)

#DisplayWelcome
def DisplayWelcome():
    global DisplayWelcome1
    DisplayWelcome1 = ttk.Label(root, font=("Calibri", 14), text=(str('Hallo, ' + name.get() + ' :)')))
    DisplayWelcome1.grid(column=0, row=5, sticky=tk.NW, padx=0, pady=0)
    global DisplayWelcome2
    DisplayWelcome2 = ttk.Label(root, font=("Calibri", 14), text="xxx")
    DisplayWelcome2.grid(column=0, row=6, sticky=tk.NW, padx=0, pady=0)
    global DisplayWelcome3
    DisplayWelcome3 = ttk.Label(root, font=("Calibri", 14), text="xxx")
    DisplayWelcome3.grid(column=0, row=7, sticky=tk.NW, padx=0, pady=0)
    global ForwardButton
    ForwardButton = ttk.Button(root, text="Weiter", command=lambda: ForwardButtonClicked())
    ForwardButton.grid(column=0, row=8, sticky=tk.NW, padx=0, pady=0)
    getname.delete(0,'end')

#ForwardButtonClicked
def ForwardButtonClicked():
    HelloInfo1.grid_remove()
    HelloInfo2.grid_remove()
    img_label.grid_remove()
    NameInfo.grid_remove()
    getname.grid_remove()
    SaveName.grid_remove()
    DisplayWelcome1.grid_remove()
    DisplayWelcome2.grid_remove()
    DisplayWelcome3.grid_remove()
    ForwardButton.grid_remove()
    global Q1_1
    Q1_1 = ttk.Label(root, font=("Calibri", 14), text=(str('Ok, ' + name.get() + ' xxx')))
    Q1_1.grid(column=0, row=0, sticky=tk.NW, padx=0, pady=0)
ne0
  • 11
  • 1

1 Answers1

1

First of all the issue in your code:

getname.delete(0,'end')

not just clears your Entry it clears your StingVar() defined here too:

name = tk.StringVar()
getname = ttk.Entry(root, textvariable=name)

The Entry writes the content of it in the textvariable/StringVar. So deleting this line getname.delete(0,'end') will solve your problem, since you grid_remove it anyway.

Also you seem a little bit confused here:

SaveName = ttk.Button(root, text="Speichern", command=lambda: DisplayWelcome())
ForwardButton = ttk.Button(root, text="Weiter", command=lambda: ForwardButtonClicked())

lambda is a usefull tool, but just use it if its really needed (e.g. predefined arguments)

In addition, since you seem a beginner. I would recommand you to follow a good tutorial for tkinter and learn about OOP and data structures to avoid global variables.

Thingamabobs
  • 7,274
  • 5
  • 21
  • 54