2010-12-01 8 views
1

J'ai implémenté une fenêtre contextuelle informative dans une application python en utilisant un widget Menu Tkinter. J'ai un widget Texte sur un canevas dans la fenêtre racine. J'ai créé un widget Menu dont la racine est son parent. Lorsque je détecte un pointeur de la souris sur le widget de texte, je publie le menu contextuel avec menuWidget.post(). Lorsque j'obtiens un événement de congé du widget de texte, mon intention était de faire disparaître le popup en appelant menuWidget.unpost(), seul le menu contextuel ne disparaît pas jusqu'à ce que je clique ailleurs à l'extérieur du widget de texte.popup 'survoler' avec Tkinter

Premièrement, est-ce une méthode saine pour implémenter une fenêtre d'information? Et quelqu'un peut-il me dire pourquoi le menu contextuel ne disparaîtra pas?

Répondre

2

Ce n'est pas la bonne façon de faire une fenêtre d'information. Sur le Mac et sur les machines Windows, les menus sont des contrôles natifs. Pour cette raison, la commande unpost ne fonctionne pas car tk cède le contrôle à la boucle d'événements système afin d'obtenir un comportement spécifique à la plate-forme. Ce que vous voulez utiliser à la place est une fenêtre de premier niveau avec l'ensemble de fanions overrideredirect. Cela vous permet d'afficher une fenêtre sans bordure où vous voulez. L'avantage de ceci est que vous n'êtes pas limité au texte simple - vous pouvez mettre tout ce que vous voulez dans ce toplevel - un autre widget texte, une toile, des boutons, etc

+0

Got it Bryan. Codé et fonctionnant avec TopLevel. Manque l'effet d'ombre portée cependant. –