6 votos

¿Cómo puedo añadir una acción de una barra de herramientas de QGIS a mi barra de herramientas personalizada programáticamente?

Tengo una barra de herramientas y quiero que tenga una acción ya existente, pero al revisar la documentación solo encontré métodos para agregar acciones recién creadas, no las que ya existen. ¿Existe alguna manera de hacer esto?

La acción que quiero agregar es la herramienta de Tocar, Zoom y Pan de la barra de herramientas de Navegación de Mapas. Sé que puedo hacer referencia de esta manera:

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

Pero no puedo hacer nada con ella.

5voto

Mat Puntos 196

Puede resultarte útil revisar el código generado por el plugin Plugin Builder, especialmente el método add_action() que genera, el cual es lo que engancha los iconos del plugin en barras de herramientas y menús.

Este fragmento parece prometedor...

if add_to_toolbar:
        self.toolbar.addAction(action)

Ya descubriste cómo obtener la acción existente (un objeto QAction). Ahora solo necesitas el fragmento para obtener la barra de herramientas a la que deseas agregar el icono.

Al ver la API de qgisInterface, parece que ya existe un método que te permite crear una barra de herramientas...

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

Acabo de probar eso en la consola y funciona. (Si no aparece, haz clic derecho en el fondo de la barra de herramientas y asegúrate de que 'helloworld' esté marcado)

EDICIÓN

Acabo de darme cuenta de que deseas unirte a una barra de herramientas existente, la cual no has creado tú mismo.

QgisInterface extiende QObject, que tiene un método findChild(type,name). Sin embargo, ejecutar esto desde la consola devuelve una lista vacía.

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

Esperemos que alguien con más conocimientos de Qt pueda responder a esto. Creo que puede haber un problema al leer datos como este a través de hilos :/

5voto

BWW Puntos 302

Necesitas:

Para agregar una nueva barra de herramientas con:

toolbar = iface.addToolBar(u'Mi prueba')

Luego, agrega la acción nativa a la barra de herramientas recién creada:

# Ejemplo para pan
toolbar.addAction(iface.actionPan())

Si deseas ver la lista completa de acciones, ve a la documentación de la API de QGisInterface.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X