Tkinter und Entry

Fragen zu Tkinter.
Antworten
hasiman
User
Beiträge: 2
Registriert: Sonntag 2. Januar 2022, 10:07

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?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
hasiman
User
Beiträge: 2
Registriert: Sonntag 2. Januar 2022, 10:07

Dann werd ich mir da mal was anlesen. danke!
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten