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> et
menu.popup () code> apparemment ne sont pas introspects dans GTK2. Selon le Site PygObject , dans gtk3
menu.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.