Seite 1 von 1

Tkinter und Entry

Verfasst: Sonntag 2. Januar 2022, 10:11
von hasiman
Hi,

ich möchte den Namen des Users erfragen und habe folgendes:

Code: Alles auswählen

def name_verraten():
    user = Tk()
    user.title("Bitte Name eingeben")
    user.configure(bg=bg, padx=15, pady=15)
    f1r1=Frame(user, bg=bg)
    f1r1.grid(row=1, column=1, padx=5, pady=5)
    f1r1.text=Text(f1r1,height=2, width=36, bg=bg,borderwidth=0)
    f1r1.text.grid(row=1, column=1)
    f1r1.text.tag_configure('Ue3', font=('Calibri', 16),justify='left')
    f1r1.text.insert(END, "Bitte verrate mir deinen Namen:", 'Ue3')
    f1r1.entry=Entry(f1r1)
    f1r1.entry.grid(row=1, column=2, sticky=W)
    f1r1.button=Button(user, text="eintragen", command=name_eintragen)
    f1r1.button.grid(row=1, column=3)
    user.mainloop()

def name_eintragen():
    name = f1r1.entry.get()
    return messagebox.showinfo('message',f'Danke {name}, nun kann es losgehen!')
    user.destroy(name_verraten)
Nun bekomme ich immer die Fehlermeldung:

Code: Alles auswählen

 File "C:\Users\Surface\Documents\Dashboard\Dashboard\dashboardV2.py", line 131, in name_eintragen
    name = f1r1.entry.get()
NameError: name 'f1r1' is not defined
Was genau habe ich da falsch gemacht und wie kann ich das ändern?

Re: Tkinter und Entry

Verfasst: Sonntag 2. Januar 2022, 10:39
von __deets__
Wenn man GUIs bauen will, muss man üblicherweise mit objektorientierung arbeiten. Damit kann dein entry ein Attribut einer Instanz sein, und dein callback eine gebundene Methode. Und schon kannst du mit self.attribut darauf zugreifen. Man kommt ein Stück weit mit der Verwendung von functools.partial oder lambda Argumenten, aber auf Dauer muss der Apfel OOP angebissen werden.

Re: Tkinter und Entry

Verfasst: Sonntag 2. Januar 2022, 13:51
von hasiman
Dann werd ich mir da mal was anlesen. danke!

Re: Tkinter und Entry

Verfasst: Montag 3. Januar 2022, 23:51
von __blackjack__
Ergänzend: `f1r1` ist ein sehr schlechter Name. Kürze nichts kryptisch ab, nummeriere keine Namen. Hier kommt noch dazu das in vielen Schriftarten 1 und I und l nicht so leicht zu unterscheiden sind.