Suite

Comment puis-je ajouter une action d'une barre d'outils QGIS à ma barre d'outils personnalisée par programmation ?


J'ai une barre d'outils et je veux qu'elle ait une action déjà existante, mais en vérifiant la documentation, j'ai seulement trouvé des méthodes pour ajouter des actions nouvellement créées, pas celles déjà existantes. Y a-t-il un moyen de faire cela?

L'action que je souhaite ajouter est l'outil Toucher, Zoomer et Panoramique de la barre d'outils de navigation cartographique. Je sais que je peux le référencer de cette façon:

qgis.utils.iface.mapNavToolToolBar().actions()[0]

Mais je n'y peux rien.


Vous avez besoin:

Pour ajouter une nouvelle barre d'outils avec :

barre d'outils = iface.addToolBar(u'Mon test')

Ensuite, ajoutez l'action native au nouveaubarre d'outils:

# Exemple pour la barre d'outils panoramique.addAction(iface.actionPan())

Si vous voulez la liste complète des actions, accédez à la documentation de l'API QGisInterface.


Vous trouverez peut-être utile de regarder le code généré par le Générateur de plugins plugin, en particulier le add_action() méthode qu'il génère, qui est ce qui accroche les icônes de plugin dans les barres d'outils et les menus.

Cet extrait semble prometteur…

si add_to_toolbar : self.toolbar.addAction(action)

Vous avez déjà découvert comment obtenir l'existantaction(un objet QAction). Maintenant, vous avez juste besoin de l'extrait pour obtenir la barre d'outils à laquelle vous souhaitez ajouter l'icône.

En regardant l'API pour qgisInterface, il semble qu'il existe déjà une méthode pour vous permettre de créer une barre d'outils…

myaction = qgis.utils.iface.mapNavToolToolBar().actions()[0] mytoolbar = qgis.utils.iface.addToolBar("helloworld") mytoolbar.addAction(myaction)

Je viens d'essayer dans la console et ça marche. (S'il n'apparaît pas, faites un clic droit sur l'arrière-plan de la barre d'outils et assurez-vous que 'helloworld' est coché)

ÉDITER

Vous venez de réaliser que vous voulez accéder à une barre d'outils existante, que vous n'avez pas créée vous-même.

QgisInterfaces'étendQObjet, qui a unfindChild(type,nom)méthode. Cependant, l'exécution depuis la console renvoie une liste vide

print qgis.utils.iface.findChildren(PyQt4.QtGui.QToolBar,u'helloworld') >>> []

Espérons que quelqu'un avec plus de connaissances Qt puisse répondre à cela. Je pense qu'il peut y avoir un problème avec la lecture de données comme celle-ci à travers les threads :/


Voir la vidéo: QGIS tutorial - Create and edit shapefile. (Octobre 2021).