Warum braucht Du denn Spacer?
Das grid sorgt von selbst dafür, dass Elemente richtig angeordnet werden. Zur Not gibt es Padding.
Warum benutzt Du <ButtonRelease-1> und after? Ereignisfunktionen bei Knöpfen gibt man mit command an.
Ich halte es auch für falsch, alle Farben vorgeben zu wollen. Der Nutzer möchte z.B. das Farbschema gerne selbst angeben, zum Beispiel hoher Kontrast, Und auch sonst würde man alle Konfigurationen gleich beim Erzeugen angeben.
Und schon wird aus dem Codemonster was schön übersichtliches:
Code: Alles auswählen
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.port_list = ['Select Device...',]
self.avr = tk.Radiobutton(self, text='AVR', value='0', indicatoron="0", command=self.avr_clicked)
self.avr.grid(row=0, column=0)
self.ibus = tk.Radiobutton(self, text='IBus', value='1', indicatoron="0", command=self.ibus_clicked)
self.ibus.grid(row=0, column=1)
self.serialports = tk.StringVar(self)
serialports_combobox = ttk.Combobox(self, values=self.port_list, textvariable=self.serialports, state='readonly')
serialports_combobox.grid(row=0, column=2, padx=10)
serialports_combobox.bind("<<ComboboxSelected>>", self.focus)
serialports_combobox.current(0)
tk.Button(self, text='Open', command=self.open_button_clicked).grid(row=0, column=3)
tk.Button(self, text='Close', command=self.close_button_clicked, state=tk.DISABLED).grid(row=0, column=4)
tk.Button(self, text='Custom', command=self.custom_button_clicked).grid(row=0, column=5)