2010-12-01 10 views
1

Ich habe ein Informations-Popup in einer Python-App mit einem Tkinter-Menü-Widget implementiert. Ich habe ein Text-Widget auf einer Leinwand im Hauptfenster. Ich habe ein Menü-Widget erstellt, das root als übergeordnetes Element hat. Wenn ich einen Mauszeiger über dem Text-Widget finde, poste ich das Popup-Menü mit menuWidget.post(). Wenn ich ein leave -Ereignis vom Text-Widget bekomme, wollte ich, dass das Popup verschwindet, indem ich menuWidget.unpost() aufrufe, nur das Popup-Menü verschwindet nicht, bis ich irgendwo außerhalb des Text-Widget klicke.'Hover over' Popup mit Tkinter

Erstens, ist dies eine vernünftige Methode zur Implementierung eines Informations-Popup? Und kann mir jemand sagen, warum das Popup-Menü nicht verschwindet?

Antwort

2

Dies ist nicht der richtige Weg, um ein Informations-Popup zu machen. Auf dem Mac und auf Windows-Computern sind Menüs native Steuerelemente. Aus diesem Grund funktioniert der Befehl unpost nicht, da tk cedes die Systemereignisschleife steuert, um plattformspezifisches Verhalten zu erhalten.

Was Sie wollen, ist stattdessen ein Top-Level-Fenster mit dem overrideredirect Flag gesetzt. Auf diese Weise können Sie ein randloses Fenster an einer beliebigen Stelle anzeigen. Der Vorteil ist, dass Sie nicht auf einfachen Text beschränkt sind - Sie können alles, was Sie wollen in diesem Toplevel - ein anderes Text-Widget, eine Leinwand, Schaltflächen, etc.

+0

Bryan. Codiert und arbeitet mit TopLevel. Vermisse den Schatteneffekt jedoch. –

Verwandte Themen