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?
Wie schließt man ein Menü?
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
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
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
Das ist ja auch noch keine fertige Lösung. Das sind nur einmal Experimente.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.
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.
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
Das Programmdesign ist ja noch gar nicht da.Sirius3 hat geschrieben:"master.master.master" zeigt ja schon, dass etwas am Programmdesign nicht stimmt.
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()