Was sind denn `a`, `m` oder `Y` und was wird mit `z` gemacht? Einbuchstabige Variablennamen sind nie gut, vor allem, wenn sie noch global sind und aus dem Nichts kommen.
Schreibe Funktionen, benutze kein ›global‹ und benenne Deine Variablen aussagekräftig.
Wenn `a` null ist, dann macht die for-Schleife nichts und `z` wird nicht definiert, was dann zwei Zeilen später zu einem NameError führt, falls `m == 1`, was man aber nicht wissen kann, weil das auch aus dem Nichts kommt.
`Text` ist ein String und wird per `split` zu einer Liste von Strings, dem Du dann wieder den Wert eines Strings zuweist. Variablen sind nicht teuer, man muß sie nicht sofort recyclen.
Ein String per `str` nochmal in einen String umzuwandeln ist sinnlos.
Indexzugriffe vermeiden, und benutze Stringformatierung statt hier mit + zu arbeiten.
Keine nakten `except`, das macht es unmöglich, Programmierfehler zu finden. Wenn Du testen willst, ob die Datei lesbar ist, reicht ein IOError.
`Daten` ist keine Funktion. Funktionen werden nach Tätigkeiten benannt, vergiß dass es `global` gibt, hier willst Du eine Funktion schreiben, die als Rückgabewert die Listbox hat. Was soll `MEtext` bedeuten?
Die vier if-Blöcke unterscheiden sich nur durch column und row. Der Aufruf gehört also hinter die ifs und für column und row kannst Du Variablen benutzen.
Code: Alles auswählen
def create_listbox(window, number, content):
display = tk.Listbox(master=window, height=1, width=35, bd=2, font=("Courier", 13), relief=tk.RAISED)
display.insert(END, content)
if number <= 26:
column = 0
row = number
elif number <= 52:
column = 5
row = number - 26
elif number <= 78:
column = 11
row = number - 52
elif number <= 104:
column = 5
row = number - 78
else:
raise ValueError("number too large")
display.grid(column=column, row=row, columnspan=20, pady=3, padx=3, sticky=tk.W)
return display
Da Du nur EINE globale Variable `Anzeige` hast, kann `Detail` auch nur die letzte Listbox ansprechen. Was ist der Sinn, einen Knopf zu erzeugen, der explizit NICHT angezeigt wird?