ich bin ein absoluter Anfänger in Sachen programmieren und versuche mir seit ein paar Wochen bereits python als erste Sprache selbstständig beizubringen.
Entschuldigt also jetzt schon bitte meine unübersichtliche Programmierweise, ich gib mir dennoch Mühe das ganze mit Klassen- und Objektzuteilungen etwas lesbar zu gestalten
Also... Einer meiner ersten Projekte war ein Login-Formular, welches ich über die Konsole ausgegeben habe. Das hat auch recht gut funktioniert:
Code: Alles auswählen
class Login_Formular:
username = "username"
password = "password"
login_u = "login_u"
login_p = "login_p"
p_again = "p_again"
tries = 0
def registration(self):
while self.p_again != self.password:
self.username = input("Gib hier einen neuen Benutzernamen ein: ")
if len(self.username) < 8:
print("Dein Benutzername ist ungültig. Beachte bitte die Anforderungen (mind. 8 Zeichen)")
else:
while self.p_again != self.password:
self.password = input("Gib hier dein neues Passwort ein: ")
if len(self.password) < 8: #mind. 8 Zeichen
print("Dein Passwort ist ungültig. Beachte bitte, dass du mindestens 8 Zeichen verwendest.")
elif not any(char.isdigit() for char in self.password): #Zahlen enthalten
print("Dein Passwort ist ungültig. Beachte bitte, dass du unter anderem auch Ziffern verwendest.")
elif not any(char.isalpha() for char in self.password): #Buchstaben enthalten
print("Dein Passwort ist ungültig. Beachte bitte, dass du unter anderem auch Buchstaben verwendest.")
elif not any(char.isupper() for char in self.password) or not any(char.islower() for char in self.password): #Groß- und Kleinbuchstaben enthalten
print("Dein Passwort ist ungültig. Beachte bitte, dass du unter anderem auch Groß- und Kleinbuchstaben verwendest.")
else:
while self.p_again != self.password:
self.p_again = input("Wiederhole dein Passwort: ")
if self.p_again == self.password:
print(" ")
break
else:
print(" ")
print("Die Passwörter stimmen leider nicht überein, probier es nochmal.")
pass
def login(self):
while True and self.tries < 3:
self.tries += 1
self.login_u = input("Benutzername: ")
self.login_p = input("Passwort: ")
if self.login_u == self.username and self.login_p == self.password:
print("Du hast dich erfolgreich angemeldet.")
exit()
elif self.tries < 3:
print(f"Eingabe des Benutzernamens oder Passworts ist fehlgeschlagen. Du hast noch {3 - self.tries} Versuche.")
else:
print(f"Anmeldung fehlgeschlagen. Dein Zugang ist gesperrt")
exit()
login = Login_Formular()
login.registration()
login.login()
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry("700x400")
root.minsize(width=700, height=400)
root.maxsize(width=700, height=400)
root.title("Login-Formular")
new_username_proof = True
new_password_proof = True
error = None
for i in range(21):
root.columnconfigure(i, weight=1)
root.rowconfigure(i, weight=1)
def new_username():
new_username_label = tk.Label(root, text="Neuer Benutzername: ", font=("Arial", 20))
new_username_label.grid(row=7, column=8)
new_username_input = ttk.Entry(root, width=15, font=("Arial", 20))
new_username_input.grid(row=7, column=9)
def new_password():
new_password_label = tk.Label(root, text="Neues Passwort: ", font=("Arial", 20))
new_password_label.grid(row=9, column=8)
new_password_input = ttk.Entry(root, width=15, font=("Arial", 20), show="*")
new_password_input.grid(row=9, column=9)
def repeat_and_error():
error = tk.Label(root, text=("Falsche Eingabe, beachte bitte die Anforderungen:\n \nBenutzername: mind. 8 Zeichen\nPasswort: mind. 8 Zeichen, Klein- und Großbuchstaben und Ziffern "), font=(16))
error["justify"] = "left"
repeat_password_label = tk.Label(root, text="Wiederhole dein Passwort: ", font=("Arial", 20))
repeat_password_input = ttk.Entry(root, width=15, font=("Arial", 20), show="*")
while False:
if new_username_proof == False or new_password_proof == False:
error.grid(row=14, column=9)
break
else:
error.grid_remove()
repeat_password_label.grid(row=10, column=8)
repeat_password_input.grid(row=10, column=9)
break
def button_clicked():
if len(new_password) < 8 or not any(char.isdigit() for char in new_password) or not any(char.isalpha() for char in new_password) or not any(char.isupper() for char in new_password):
new_password_proof = False
else:
new_password_proof = True
if len(new_username) < 8:
new_username_proof = False
else:
new_username_proof = True
def button():
button = ttk.Button(root, text="Bestätigen", command=button_clicked)
button.grid(row=12, column=9, sticky="nswe")
def open_window():
root.mainloop()
new_username()
new_password()
button()
repeat_and_error()
open_window()
Hauptprobleme sind zum einen ständige Fehlermeldungen darüber, dass Variablen wie zB. 'error' nicht definiert wären, obwohl ich das im Konstrukt der Klasse getan habe und zum anderen, dass die 'error' Meldung bei mehrfacher Betätigung des Buttons 'Bestätigen' (aufgrund von mehrfacher hintereinander folgenden Fehleingaben) und einer anschließenden richtigen Eingabe des usernames und des passwords nicht mehr gelöscht wird. Heißt, es erscheinen dann die repeat_password Elemente, aber die 'error' Meldung bleibt.
Ich versuche seit über einer Woche mithilfe von Eigenrecherche oder ChatGPT die Fehler aus diesem Code raus zu arbeiten, aber leider ohne Erfolg. Umso mehr ich am Code geändert habe, desto schlimmer wurde es. Meine Vermutung ist, dass ich mich bzgl. der Klassen und Objekt Nutzung innerhalb des Codes etwas verhaspelt habe und jetzt vieles durcheinander geworfen habe..
Ich bin über jegliche Art an Kritik sowie Tipps und Tricks zu meinen Codes sehr dankbar !!!
VG
vitellinho