Seite 1 von 1
Wie schließt man ein Menü?
Verfasst: Montag 12. Juni 2017, 12:58
von Alfons Mittelmeyer
Solange ein Menü geöffnet ist, geht nichts Anderes. An einer Stelle rechts vom Menü ist ein Toplevel. Darin geht nichts, solange das Menü geöffnet ist. Also müßte ich, wenn jemand nach rechts mit der Maus in das Toplevel wechselt, das Menü schließen.
Wie geht das?
Re: Wie schließt man ein Menü?
Verfasst: Montag 12. Juni 2017, 17:08
von Alfons Mittelmeyer
Lösung gefunden. Das Hauptmenü aus und einhängen:
Code: Alles auswählen
self.master.master.master['menu']=''
self.master.master.master['menu']=self.master.master.master.menu
Re: Wie schließt man ein Menü?
Verfasst: Dienstag 13. Juni 2017, 07:07
von Sirius3
"master.master.master" zeigt ja schon, dass etwas am Programmdesign nicht stimmt. Ansonsten würde ich das nicht als Lösung sondern als Hack bezeichnen. Hacks haben beim Programmieren nichts zu suchen.
Re: Wie schließt man ein Menü?
Verfasst: Dienstag 13. Juni 2017, 15:11
von Alfons Mittelmeyer
Sirius3 hat geschrieben:"master.master.master" zeigt ja schon, dass etwas am Programmdesign nicht stimmt. Ansonsten würde ich das nicht als Lösung sondern als Hack bezeichnen. Hacks haben beim Programmieren nichts zu suchen.
Das ist ja auch noch keine fertige Lösung. Das sind nur einmal Experimente.
Außerde funktioniert es auch gar nicht richtig so. Das Menü merkt sich dass es nicht richtig geschlossen wurde und reagiert beim nächstenmal nicht richtig. Der Mauszeiger zeigt plötzlich ein weinig nach rechts unbd wenn man dann außerhalb des Menüs klickt, dann geht es nicht zu. Zudem steht es dann an oberster Front über alles sonstigen Anwendungsfenstern.
Statt es nur aus und wieder einzuhängen, bleibt nur, es vollständig zu löschen mit einem destroy auf das komplette Menü. Es sei denn, ich wüßte, wie man einen Mausklick simulert. Das dürfte aber schwierig sein, denn das wäre ein System Mausklick. Das Menü geht ja auch zu, wenn man irgendwohin auf den Bildschirm klickt. Damit dürfte eine Mausklick Simulation in tkinter wohl nichts bringen.
Re: Wie schließt man ein Menü?
Verfasst: Dienstag 13. Juni 2017, 16:35
von Alfons Mittelmeyer
Sirius3 hat geschrieben:"master.master.master" zeigt ja schon, dass etwas am Programmdesign nicht stimmt.
Das Programmdesign ist ja noch gar nicht da.
Das ist das Grobdesign:
Code: Alles auswählen
import tkinter as tk
class MainMenuCreate(tk.Menu):
def __init__(self,master,**kwargs):
tk.Menu.__init__(self,master,**kwargs)
# destroy menu before ===============
menu_before = master['menu']
if menu_before:
master['menu'] = ''
self.nametowidget(menu_before).destroy()
print('menu_before destroyed')
# define menu =======================
# ...
# enable menu =======================
master['menu'] = self
def MainMenu(master,**kwargs):
master.after_idle(
lambda
call = MainMenuCreate,
master = master,
kwargs = kwargs:
call(master,**kwargs))
class Application(tk.Tk):
def __init__(self,**kwargs):
tk.Tk.__init__(self,**kwargs)
# widget definitions ===================================
MainMenu(self)
# test it ==============
MainMenu(self)
if __name__ == '__main__':
Application().mainloop()
Das heißt das MainMenu kann jederzeit wieder neu aufgebaut werden. Der Aufruf kann sogar vom MainMenu aus erfolgen, das zerstört werden soll, denn der Aufbau erfolgt erst nach after_idle.