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()