Popupmenü verschwindet nicht bei Klick auf Anwendung

Fragen zu Tkinter.
Antworten
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Hallo zusammen,

ich hab mal wieder eine Frage:

Üblicherweise ist es doch bei Programmen normalerweise so, dass ein Popupmenü wieder verschwindet, wenn man irgendwo auf einen anderen Teil des zugehörigen Programms klickt. Bei Tkinter gelingt mir dieses gewünschte Verhalten nicht. Das Popup bleibt so lange sichtbar, bis man einen Eintrag in dem Popupmenü auswählt.

Was aber, wenn man aus Versehen das Menü aktiviert hat! Man sollte diesen Vorgang doch zurücksetzen können.

Hier mal mein Minibeispiel, welches die Situation simuliert:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ttk
tk = ttk.Tkinter

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title(u"Popupmenütest")
        
        self.lbl = tk.Label(self,
                            text="""
Mit einem Rechtsklick kann das
Popupmenü gestartet werden!

Wird jedoch kein Eintrag im Popupmenü
angeklickt sondern im Gegenteil
irgendetwas anderes im Fenster, so
verschwindet das Popupmenü nicht!

In bilde mir ein, dass das Popupmenü
üblicherweise verschwindet!
 
:(

""",
                            relief=tk.RIDGE)
        self.lbl.pack(padx=10, pady=10, ipadx=10, ipady=10)
        self.lbl.bind("<3>", self.popup)
    
    def popupaction(self, event):
        print "popupaction started"
    
    def popup(self, event):
        mnu = tk.Menu(self, tearoff=0)
        for i in range(5):
            mnu.add_command(
                label="Eintrag %s" % (i,),
                command=self.popupaction)
            mnu.post(event.x_root, event.y_root)


app = App()
app.mainloop()
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

oh mann - nachdem ich nochmals Tkinterquellen durchforstet habe fand ich

Code: Alles auswählen

tk_popup
, probierte es aus und siehe da - es funktioniert!

Also nur

Code: Alles auswählen

mnu.post
durch

Code: Alles auswählen

mnu.tk_popup
ersetzen!
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Antworten