Klassen. Attribute, Methoden für eine tkinter GUI? Wozu?
Verfasst: Sonntag 20. August 2017, 21:24
Es wird immer wieder geschrieben, man solle Klassen. Attribute und Methoden für eine tkinter GUI verwenden. Aber warum, denn das, wozu auch?
Was man braucht, ist doch nur eine einzige Variable. Man muß in tkinter den Master übergeben. Daher braucht man eine Variable für den Master. Gut, manchmal läßt sich auch eine Funktion nicht vermeiden, da lambda nur für einzeilig ausreicht. Da muß man dann eben auch einen Namen für eine Funktion definieren, die man einmalig aufruft und dann wieder vergessen kann. Oder in diesem Fall war es dann ein Dictionary.
Hier etwa hat man 138 Zeilen Code, wobei Vieles nur Klassendefinitionen mit Zwischenraum sind und das Widget und dessen Layout sind dann doppelt. Und das sind Klassen und Attribute, die man gar nicht braucht:
viewtopic.php?f=18&t=41121&p=314101#p314063
Es geht doch ohne solche Klassen auch viel kürzer:
Dieser Code macht genau dasselbe und ist wesentlich kürzer ohne diesen ganzen Firlefanz mit den Klassen. Na gut, das mit dem vielen master ist ein wenig blöd, aber was muss tkinter auch so etwas unbedingt wollen.
Was man braucht, ist doch nur eine einzige Variable. Man muß in tkinter den Master übergeben. Daher braucht man eine Variable für den Master. Gut, manchmal läßt sich auch eine Funktion nicht vermeiden, da lambda nur für einzeilig ausreicht. Da muß man dann eben auch einen Namen für eine Funktion definieren, die man einmalig aufruft und dann wieder vergessen kann. Oder in diesem Fall war es dann ein Dictionary.
Hier etwa hat man 138 Zeilen Code, wobei Vieles nur Klassendefinitionen mit Zwischenraum sind und das Widget und dessen Layout sind dann doppelt. Und das sind Klassen und Attribute, die man gar nicht braucht:
viewtopic.php?f=18&t=41121&p=314101#p314063
Es geht doch ohne solche Klassen auch viel kürzer:
Code: Alles auswählen
import tkinter as tk
from functools import partial
# so etwas würde man importieren =================
class EventBroker():
def __init__(self):
self._dictionary_ = {}
def subscribe(self,message_id,callback):
self._dictionary_[message_id] = callback
def publish(self,message_id,*args,**kwargs):
self._dictionary_[message_id](*args,**kwargs)
eventbroker = EventBroker()
publish = eventbroker.publish
subscribe = eventbroker.subscribe
# ==============================================
def main():
master = tk.Tk()
master = tk.Frame(master)
master.pack(fill='both', expand=1)
master.rowconfigure(0,weight=1)
master.columnconfigure(0,weight=1)
frames = {}
subscribe('SHOW_FRAME',lambda frame_id, frames=frames: frames[frame_id].lift())
master = tk.Frame(master)
frames['Benutzereinstellungen'] = master
master.grid(sticky='nesw', row=0)
tk.Label(master,font = 'Verdana 12', text='Page One!!!').pack(padx=10, pady=20)
tk.Button(master,text = 'Back to Home',command=partial(publish,'SHOW_FRAME','RemoteManager')).pack()
tk.Button(master,text = 'Page Two',command=partial(publish,'SHOW_FRAME','PageTwo')).pack()
master = tk.Frame(master.master)
frames['PageTwo'] = master
master.grid(sticky='nesw', row=0)
tk.Label(master,font = 'Verdana 12', text='Page Two!!!').pack(padx=10, pady=10)
tk.Button(master,text = 'Back to Home',command=partial(publish,'SHOW_FRAME','RemoteManager')).pack()
tk.Button(master,text = 'Page One',command=partial(publish,'SHOW_FRAME','Benutzereinstellungen')).pack()
master = tk.Frame(master.master)
frames['RemoteManager'] = master
master.grid(sticky='nesw', row=0)
tk.Label(master,text = 'Willkommen im Remote Manager').pack(padx=25, pady=15)
tk.Button(master,text = 'Benutzereinstellungen', width = 18,command=partial(publish,'SHOW_FRAME','Benutzereinstellungen')).pack()
tk.Label(master).pack(padx=25, pady=1)
tk.Button(master,text ='Bildschirmeinstellungen', width = 18).pack()
tk.Label(master).pack(padx=25, pady=1)
tk.Button(master,text = 'Servereinstellungen', width = 18,command=partial(publish,'SHOW_FRAME','PageTwo')).pack()
tk.Label(master).pack(padx=25, pady=1)
frames['RemoteManager'].lift()
frames = None # Globaler Zugriff, nein danke
master = tk.Menu(master.master.master)
master.master['menu'] = master
master = tk.Menu(master,tearoff=0)
master.add_command(label='Komplettes Setup',command=partial(publish,'SHOW_FRAME','RemoteManager'))
master.add_separator()
master.add_command(label='Benutzereinstellungen',command=partial(publish,'SHOW_FRAME','Benutzereinstellungen'))
master.add_command(label='Bildschirmeinstellungen')
master.add_command(label='Servereinstellungen',command=partial(publish,'SHOW_FRAME','PageTwo'))
master.add_separator()
master.add_command(label ='Beenden')
master.master.add_cascade(label='Manager',menu=master)
master = tk.Menu(master.master,tearoff=0)
master.add_command(label='Info')
master.master.add_cascade(label='Hilfe',menu=master)
master = master.master.master
master.mainloop()
if __name__ == '__main__':
main()