Programm umschrieben für if __name__ == "__main__":
Verfasst: Freitag 30. April 2021, 21:16
Hallo Zusammen,
ich würde gerne mein Programm umschreiben, damit es auch mit if __name__ == "__main__": läuft.
Leider stecke ich da irgendwie fest. Ich habe schon einiges probiert. Ich habe es dann allerdings nur geschafft ohne, dass sich die Farbe der "textbox_02" ändert.
Ansonsten habe ich die Fehlermeldung "NameError: name 'userInput' is not defined" bekommen.
Habt ihr da ein paar Tipps für mich?
Vielen Dank schon Mal.
LeoPold
ich würde gerne mein Programm umschreiben, damit es auch mit if __name__ == "__main__": läuft.
Leider stecke ich da irgendwie fest. Ich habe schon einiges probiert. Ich habe es dann allerdings nur geschafft ohne, dass sich die Farbe der "textbox_02" ändert.
Ansonsten habe ich die Fehlermeldung "NameError: name 'userInput' is not defined" bekommen.
Habt ihr da ein paar Tipps für mich?
Vielen Dank schon Mal.
LeoPold
Code: Alles auswählen
import tkinter as tk
# Länder Wörterbuch
country_dict = {
"Albanien": "AL", "Andorra": "AD", "Aserbaidschan": "AZ", "Bahrain": "BH", "Belgien": "BE", "Bosnien und Herzegowina": "BA", "Brasilien": "BR",
"Britische Jungferninseln": "VG", "Bulgarien": "BG", "Costa Rica": "CR", "Dänemark": "DK", "Deutschland": "DE", "Dominikanische Republik": "DO",
"El Salvador": "SV", "Estland": "EE", "Färöer Inseln": "FO", "Finnland": "FI", "Frankreich": "FR", "Georgien": "GE", "Gibraltar": "GI",
"Griechenland": "GR", "Grönland": "GL", "Grossbritannien": "GB", "Guatemala": "GT", "Irak": "IQ", "Irland": "IE"
}
country_dict_inv = {v: k for k, v in country_dict.items()}
# Funktion für die Umwandlung von Buchstaben in Zahlen:
def encode(countrycode):
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
number = ALPHABET.index(countrycode) + 10
return number
# Funktion für den IBAN-Check:
def ibanCheck(iban_list, iban):
iban_summe = ""
for i in range(4, len(iban_list)):
iban_summe = iban_summe + str(iban_list[i])
summe = int(iban_summe + str(iban_list[0]) + str(iban_list[1]) + "0" + "0")
check = str(98 - summe % 97).zfill(2)
if check == iban[2:4]:
return True
else:
return False
# Funktion für die Prüfung der IBAN und die Ausgabe der Textausgabe:
def checkInput(*args):
iban = userInput.get()
iban = iban.replace(" ", "").upper()
print(iban)
if iban[0:2].isalpha() and iban[2:4].isdigit():
output_text_01.set("Deine Eingabe: " + str(iban))
iban_list = [d if d.isdigit() else str(encode(d)) for d in iban]
if ibanCheck(iban_list, iban) == True and iban[0:2] in country_dict_inv:
output_text_02.set("Der Ländercode " + str(iban[0:2]) + " entspricht: " + str(
country_dict_inv.get(iban[0:2])) + ". Die Prüfung war erfolgreich!")
textbox_02["fg"] = "green"
elif ibanCheck(iban_list, iban) == True and iban[0:2] not in country_dict_inv:
output_text_02.set("Der Ländercode ist 'nicht' bekannt. Die Prüfung war erfolgreich!")
textbox_02["fg"] = "#1f4f16"
elif ibanCheck(iban_list, iban) == False and iban[0:2] in country_dict_inv:
output_text_02.set("Der Ländercode " + str(iban[0:2]) + " entspricht: " + str(
country_dict_inv.get(iban[0:2])) + ". Die Prüfung war nicht erfolgreich!")
textbox_02["fg"] = "red"
elif ibanCheck(iban_list, iban) == False and iban[0:2] not in country_dict_inv:
output_text_02.set("Der Ländercode ist 'nicht' bekannt. Die Prüfung war nicht erfolgreich!")
textbox_02["fg"] = "red"
else:
output_text_01.set("Deine Eingabe: " + str(iban))
output_text_02.set("Dies entspricht nicht den IBAN-typischen Vorgaben!")
textbox_02["fg"] = "#9c612f"
# Eingabefeld leeren:
userInput.set("")
# Erzeugung des Fensters
tkWindow = tk.Tk()
tkWindow.title("Programm zur Prüfung einer IBAN")
# Erzeugung der String-Variablen
userInput = tk.StringVar(tkWindow)
output_text_01 = tk.StringVar(tkWindow)
output_text_02 = tk.StringVar(tkWindow)
# InfoLabels:
infotext = "Programm zur Prüfung einer nationalen oder internationalen IBAN\n" \
"Anzahl der im Programm verfügbaren Länder: " + str(len(country_dict))
infoLabel_01 = tk.Label(tkWindow, text=infotext, font=("Arial, 10"))
infoLabel_01.grid(column=0, row=0, columnspan=4, padx="75", pady="5")
infoLabel_02 = tk.Label(tkWindow, text="IBAN: ", font=("Arial, 11"))
infoLabel_02.grid(column=0, row=1, padx="5", pady="5", sticky="e")
# Input- / Eingabefeld definieren
input_field = tk.Entry(tkWindow, textvariable=userInput, width=40, font=("Arial, 12"))
input_field.grid(column=1, row=1, columnspan=2, pady="5")
input_field.focus()
# Button definieren
submit = tk.Button(tkWindow, text=" prüfen ", font=("Arial, 12"), command=checkInput)
submit.grid(column=3, row=1, padx="5", pady="5")
# Textfeld unter dem Button
textbox_01 = tk.Label(tkWindow, textvariable=output_text_01, font=("Arial, 11"))
textbox_01.grid(column=0, row=2, columnspan=4, padx="5", pady="3")
textbox_02 = tk.Label(tkWindow, textvariable=output_text_02, font=("Arial, 11"))
textbox_02.grid(column=0, row=3, columnspan=4, padx="5", pady="3", sticky="n")
# "Return"-Taste soll auch den Enter-Button auslösen / betätigen
tkWindow.bind("<Return>", checkInput)
# Aktivierung des Fensters
tkWindow.mainloop()