aus Übungszwecken bin ich die letzten Wochen dabei ein Python Code mitsamt einer GUI zu einer Registrierungs- und Loginstrecke zu schreiben. Diese soll grundlegend keine wirkliche Funktion haben, außer sämtliche Eingaben zu usernames und passwords speichern, auf Anforderungen prüfen und miteinander vergleichen. (Wie man das halt von einem login-formular kennt)
Nun bin ich eigentlich schon fast durch, beim letzten Schritt, wo die login-daten mit den registrierungsdaten verglichen werden (unter def accept_button_clicked2(self):) bekomme ich aber jedoch die fehlermeldung: "_tkinter.TclError: invalid command name ".!entry"". Nach Recherche habe ich herausgefunden, dass diese Fehlermeldung auftaucht, sobald die entrys durch get "geholt" werden, bevor diese überhaupt gefüllt wurden. Nun bin ich aber echt überfragt und weiß nicht wie ich den code umschreiben kann um diesen fehler zu beheben.
PS: Ich weiß, dass mein Code grauenvoll geschrieben ist und das ich es hätte besser machen können.. Es geht mir bei diesem Code aber tatsächlich darum gewisse Funktionalitäten umzusetzen, über den kosmetischen Teil möchte ich mir lieber später Gedanken machen.
Hier mein Code:
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
class LoginFormular():
def __init__(self):
self.window1 = tk.Tk()
self.window1.title("Registrierung")
tk.Label(self.window1, text="Neuer Benutzername: ").grid(row=0, column=0)
self.new_username = ttk.Entry(self.window1, width=15)
self.new_username.grid(row=0, column=1)
tk.Label(self.window1, text="Neues Passwort: ").grid(row=1, column=0)
self.new_password = ttk.Entry(self.window1, width=15, show="*")
self.new_password.grid(row=1, column=1)
self.repeat_password_label = tk.Label(self.window1, text="")
self.repeat_password_label.grid(row=2, column=0)
self.repeat_password_entry = ttk.Entry(self.window1, width=15, show="*")
self.error1 = tk.Label(self.window1, text="")
self.error1["justify"] = "left"
self.error1.grid(row=3, column=0)
self.error2 = tk.Label(self.window1, text="")
self.error2["justify"] = "left"
self.error2.grid(row=3, column=0)
accept = ttk.Button(self.window1, text="Bestätigen", command=self.accept_button_clicked)
accept.grid(row=4, column=1, sticky="nswe")
quit = ttk.Button(self.window1, text="Beenden", command=self.quit_button_clicked)
quit.grid(row=4 ,column=0, sticky="nswe")
self.window1.mainloop()
def quit_button_clicked(self):
self.window1.destroy()
def quit_button_clicked2(self):
self.window2.destroy()
def accept_button_clicked2(self):
if self.new_username.get() != self.login_username.get() or self.new_password.get() != self.login_password.get():
self.login_alert["text"] = "Anmeldung fehlgeschlagen!"
else:
self.login_alert["text"] = "Anmeldung erfolgreich!"
def accept_button_clicked(self):
self.x = 0
self.error1["text"] = ""
self.error2["text"] = ""
self.repeat_password_label["text"] = ""
username = self.new_username.get()
password = self.new_password.get()
repeat_password = self.repeat_password_entry
if len(username) < 8 or len(password) < 8 or not any(char.isdigit() for char in password) or not any(char.isalpha() for char in password) or not any(char.isupper() for char in password) or not any(char.islower() for char in password):
self.error1["text"] = "Falsche Eingabe, beachte bitte die Anforderungen:\n \nBenutzername: mind. 8 Zeichen\nPasswort: mind. 8 Zeichen, Klein- und Großbuchstaben sowie Ziffern"
elif len(username) > 8 or len(password) > 8 or any(char.isdigit() for char in password) or any(char.isalpha() for char in password) or any(char.isupper() for char in password):
self.new_username.config(state="disabled")
self.new_password.config(state="disabled")
self.repeat_password_label["text"] = "Wiederhole dein Passwort: "
repeat_password.grid(row=2, column=1)
if len(repeat_password.get()) > 0:
if repeat_password.get() != self.new_password.get():
self.error2["text"] = "Die Passwörter stimmen nicht überein. Probier es nochmal."
else:
self.x += 1
self.window1.destroy()
self.window2 = tk.Tk()
self.window2.title("Login")
if self.x == 1:
self.login_alert = tk.Label(self.window2, text="")
self.login_alert["justify"] = "left"
self.login_alert.grid(row=3, column=0)
self.username_label = tk.Label(self.window2, text="Benutzername: ").grid(row=0, column=0)
self.login_username = ttk.Entry(self.window2, width=15)
self.login_username.grid(row=0, column=1)
self.password_label = tk.Label(self.window2, text="Passwort: ").grid(row=1, column=0)
self.login_password = ttk.Entry(self.window2, width=15, show="*")
self.login_password.grid(row=1, column=1)
self.accept2 = ttk.Button(self.window2, text="Bestätigen", command=self.accept_button_clicked2)
self.accept2.grid(row=4, column=1, sticky="nswe")
self.quit2 = ttk.Button(self.window2, text="Beenden", command=self.quit_button_clicked2)
self.quit2.grid(row=4, column=0, sticky="nswe")
def main():
login_formular = LoginFormular()
if __name__ == "__main__":
main()