Mit einheitlicher Einrückung hast Du's irgendwie nicht so, oder? Da gibt's von den meisten Editoren gute Unterstützung mittels Tabulatortaste. Vorher nicht vergessen in den Einstellungen vier echte Leerzeichen pro Tab-Druck einzustellen.
Ein paar Zeilen sind länger als 80 Zeichen. Sternchen-Importe sollte man unterlassen.
Bei ``except`` sollte man immer eine konkrete Ausnahme angeben, sonst wird dort alles behandelt, was eventuell wichtige Fehlermeldungen verschluckt, so dass man Fehler nur sehr schwer finden kann.
Die Namen der Methoden entsprechen nicht dem Style Guide -- kleine_buchstaben_mit_unterstrichen.
Pickle-Dateien müssen als Binärdateien geöffnet werden, sonst können sie unter anderen Betriebssystemen eventuell nicht mehr gelesen werden.
Warum wird der `geldstand` in einer Liste gespeichert die immer nur aus diesem einen Element besteht? Warum geben `kontoAB` und `kontoZU` ein Tupel zurück mit dem Eurozeichen als konstantes zweites Element?
in `kontoAB()` wird der Name `monat` benutzt, woher kommt der? Und würde diese Information nicht auch schon im übergebenen `datum` stecken?
`Finanzen.getmonat()` benutzt das Objekt gar nicht, könnte also eine Funktion sein, und macht mit dem Namen `m` am Ende überhaupt nichts. Die Funktion könnte man sehr einfach durch ein Dictionary ersetzen, das die "Zahlen" auf Monatsnamen abbildet.
Wenn man das Hauptprogramm in eine Funktion steckt, die nur ausgeführt wird wenn das Modul als Programm gestartet wurde, dann lässt es sich im Interpreter als Modul importieren und man kann die einzelnen Komponenten ausprobieren.
Und nun zum Problem:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "forum.py", line 37, in kontoAKT
betrag = kontostand.get()
AttributeError: 'NoneType' object has no attribute 'get'
Offensichtlich ist `kontostand` an dieser Stelle `None`. Schauen wir mal wo und wie der Name an ein Objekt gebunden wird:
Wenn man danach ein ``print kontostand`` einfügt wird ``None`` ausgegeben. Und zwar weil die `grid()`-Methode `None` zurückgibt. Du musst das also in zwei Schritte aufspalten, wenn das `Entry`-Objekt an den Namen `kontostand` gebunden werden soll.
Code: Alles auswählen
kontostand = Entry(root)
kontostand.grid(row=1, column=0)
Was Du da mit ``exec`` versuchst kann ich nur ahnen, aber das ist sicher etwas, das besser mit ``import`` gelöst wird.