Je veux contempler un menu contextuel lorsque l'utilisateur clique sur le bouton droit de la souris sur la ligne d'en-tête d'un J'ai essayé de faire quelque chose comme ce qui est répertorié ici mais faisant Quelles solutions ont trouvé des gens pour cela? P> gtk.treeview code>. Dans gtk3, gtk.treeviewcolumn code> a une méthode get_button (), qui facilite la tâche; Joignez simplement le menu sur le bouton et connectez-le à un événement «cliqué». Cependant, dans GTK2, cela ne fonctionnera pas. Vous ne pouvez appeler qu'une méthode get_widget () code>, qui ne renvoie aucune si vous n'avez pas défini de widget via set_widget () code>. J'ai essayé de mettre un gtk.label code> avec le nom de la colonne dans un gtk.eventbox de code> et définissez-le comme widget après la connexion du eventbox code> à Un rappel pour le "button_press_event", en cliquant dessus, il ne génère pas l'événement. P>
get_parent () code> sur le widget de colonne ne renvoie aucun et n'atteint jamais le bouton car leur code implique. P>
3 Réponses :
Cela semble en effet compliqué, j'avais un coup d'œil sur le source . Apparemment, le (code> parent code> Trick fonctionne (et renvoie l'objet d'alignement), mais votre étiquette personnalisée est ajoutée uniquement au bouton après que l'arboresviewcolumn ait été réalisée, donc avant que l'attribut parent code> Séjours Aucune Code> Donc, Probablement Dernière Dernière dernière fois que votre commande Show The TreeView, vous devriez être en mesure de récupérer les parents (bouton-> hbox-> alignement-> étiquette) et peut joindre votre gestionnaire au signal. < / p>
C'est assez facile en fait, mais vous avez besoin de quelques hacks.
Vous devez d'abord forcer GTK pour créer un bouton d'en-tête pour le GTKTREEEVIEWCOLUMN: P>
def button_release_event(button, event):
if event.button == 3:
menu.popup(event)
widget.connect('button-release-event', button_release_event)
J'écris à Perl, mais cette même approche fonctionne. Merci! De note, je dois ajouter la colonne à l'arborescence avant d'appeler get_widget.
J'aime des exemples de travail sur s.o, j'ai donc décidé de poster un. Tous les crédits sont pour @johan Dahlin! Happy Piratage! P> P>
Je devrais clarifier cela par "dans GTK2, cela ne fonctionnera pas", j'aurais dû dire: "Dans GTK2, la méthode
get_button () code> n'a pas été mise en œuvre.Maintenant, je trouve aussi que
menu.attach_to_widget () code> etmenu.popup () code> apparemment ne sont pas introspects dans GTK2. Selon le Site PygObject , dans gtk3menu.popup () code> a été mis en œuvre à travers un remplacement, mais je ne trouve pas de documentation sur la manière dont cela a été fait.