@Dopefish: Das Argument `bname` wird nicht verwendet. `self.bname` erzeugt ein Attribut mit dem Namen `bname` und nicht mit einem Namen der in einer Zeichenkette steht, die an den lokalen Namen `bname` gebunden ist. Und wenn die Methode mehrfach aufgerufen wird, dann ist das Attribut `bname` natürlich nur an den letzten Wert gebunden weil eine Zuweisung an einen neuen Wert die Bindung an den alten aufhebt, oder anders gesagt ein Namen oder ein Attribut kann zu jedem gegebenen Zeitpunkt immer nur an *einen* Wert gebunden sein.
Fenstergrösse und Position sowie absolute Platzierung von Widgets in Containerwidgets sollte man nicht machen. Das sieht auf anderen Systemen mit anderen Einstellungen und anderer Anzeigehardware sonst eventuell komisch oder unschön aus, oder ist sogar unbedienbar wenn Widgets anfangen andere Widgets zu verdecken. Die Methoden `geometrie()` und insbesondere `place()` sollte man deshalb nach möglichkeit meiden.
`incdecs()` ist ja ein schäusslicher Name. Funktionen und Methodennamen sollten Tätigkeiten beschreiben, und zwar möglichst treffend die Tätigkeit die sie ausführen. Abkürzungen die nicht allgemein bekannt sind, sollte man vermeiden. Die Methode müsste also eher `add_value()` oder `add_to_counter()` oder so ähnlich heissen. Und `buttonmaker()` eher `make_button()` oder besser `create_button()`. Namen sollten auch nicht sinnlos durchnummeriert werden. Oder wie in diesem Fall „an”nummeriert. Einfach `photo` würde reichen.
Das `PhotoImage` muss man aufheben auf Python-Seite, denn sonst werden die Grafikdaten freigegeben, auch wenn die Tk-Seite die eigentlich noch braucht. Wenn man mehr als eines davon haben möchte, dann könnte man es zum Beispiel an das `Button`-Exemplar als Attribut binden auf dem es auch angezeigt wird. Und dann muss man natürlich auch alle `Button`\s aufheben. Zum Beispiel in einer Liste oder einem Wörterbuch. In letzterem könnte man den Namen `bname` dann als Schlüssel verwenden.
Dem
Style Guide for Python Code nach gehst Du ein wenig sehr sparsam mit Leerzeichen um. Das kann man besser lesen wenn nicht alles so zusammenklebt.
Edit: Es bleibt übrigens nicht nur die letzte Schaltfläche übrig, es sind alle da — nur wird das Bild nur beim letzten angezeigt weil die anderen wie oben schon erwähnt zerstört werden solange man auf der Python-Seite keine Referenz auf das `PhotoImage`-Exemplar behält.