Flackerndes Popupmenu

Fragen zu Tkinter.
Antworten
JörnS
User
Beiträge: 9
Registriert: Montag 31. Oktober 2011, 16:28

Hallo Python-Fetischisten! :-)

Ich habe da ein kleines Problem und mir will keine Lösung einfallen, insbesondere weil ich das Problem dahinter nicht verstehe. Es ist wie folgt:

Ich habe ein kleines Tk-Fenster (und ein Fenster der Engine Panda3D, das sollte aber kein Problem darstellen). Dazu habe ich ein Popupmenu, welches bei Rechtsklick im Panda-Fenster (testweise auch mal auf Tastendruck) aufpoppt. Erstmal kein Problem. Doch sobald das Popup ein zweites oder drittes etc Mal aufgerufen wird, flackert es.
Das Popup wird mehrfach in der Sekunde neu aufgebaut, Events wie <Enter> werden auch dementsprechend oft ausgelöst. Es ist egal, ob sich das Popup über dem Panda-Fenster befindet oder nicht. Der Code ist folgendermaßen:

Code: Alles auswählen

        self.popupmenu = Menu(tkroot, tearoff=0)
        dirtmenu = Menu(self.popupmenu, tearoff=0)
        self.popupmenu.add_cascade(label='Dirt', menu=dirtmenu)
        for i in range(len(liste)):
            b = Menubutton(dirtmenu, text=liste[i])
            b.bind('<Enter>', self.testmich)
            b.pack()

        self.accept('mouse3', self.popup) #Panda3D-spezifisch

    def popup(self):
        #self.popupmenu.post(640, 400)
        try:
            self.popupmenu.tk_popup(640, 400, 0)
        finally:
            self.popupmenu.grab_release()

    def testmich(self, *args):
        print('ja')
Das Ganze ist natürlich etwas aus dem Zusammenhang gerissen, sollte aber alles Wissenswerte enthalten. Und ja, ich weiss dass Menubutton seit Tk 8 veraltet ist, aber mittels add_command() kann man afaik das Event <Enter> nicht abfangen. Verwendetes System ist Lubuntu 12.04 also werden mir Windows-eigene Hacks nicht weiterhelfen. Python-Version ist 2.7.3, Tk 8.5

Danke schon mal!

EDIT sagt, dass ich vergessen habe zu erwähnen: das Problem liegt tatsächlich an den (veralteten) Menubutton()s, mit add_command() flackert es nie. Problem wäre daran das Event <Enter> ....
Zuletzt geändert von Anonymous am Mittwoch 30. Mai 2012, 11:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Antworten