domingo, 27 de diciembre de 2020

Cómo producir un plugin plantilla tipo botón checkeable para PyQGIS 3

En esta respuesta de gis.stackexchange.com se propone un plugin tipo botón checkeable con la antigua versión de QGIS 2 y que permite desplegar valores de ráster como tooltips. El comportamiento de este tipo de plugins no está en la oferta de Plugin Builder 3 por lo cual sería útil tenerlo disponible como plantilla. La importancia de este tipo de plugins radica en que sólo nos interesa que al hacer click en él se prepare para iniciar una acción y no se despliegue ningún tipo adicional de QDialog.

El plugin se denomina test-tooltip_raster_values y se puede bajar de este link. Una vez bajado, el plugin se descomprime y la carpeta se nombra como template y se coloca en el directorio de plugins de QGIS 3.

El archivo test.py se renombra como template.py; tal como se observa en la imagen siguiente:

Sin embargo, para que funcione adecuadamente, la penúltima línea del archivo __init__.py debe ser modificado en 'classFactory' como se detalla a continuación.

.
.
.
def classFactory(iface):
    # load Test class from file test.py
    from .template import Test
    return Test(iface)

No obstante, hay otras modificaciones que también deben hacerse. Las primeras de ellas están en el archivo metadata.txt; tal como se expone a continuación.

.
.
.
name=template plugin
.
.
.
qgisMinimumVersion=3.0
.
.
.

Las siguientes modifican las librerías PyQt4 a PyQt5 necesarias en QGIS 3 (SIGNAL ya no es necesaria en este caso).

.
.
.
from PyQt5.QtCore import QObject, QTimer, Qt
from PyQt5.QtWidgets import ( QMessageBox, QAction, QMenu, QActionGroup,
                              QWidgetAction, QToolTip)
from PyQt5.QtGui import ( QIcon )
.
.
.

Una vez hechas la modificaciones anteriores se inicia QGIS 3 y en Plugins -> Manage and Install Plugins se activa tal como aparece en la imagen siguiente.

Ahora es sólo necesario comprobar que funciona adecuadamente. Para ello, hacemos click en el icono del plugin y con un ráster cargado colocamos el cursor sobre cualquier punto del mismo. En la imagen a continuación se puede observar que el tooltip se despliega de la manera esperada reflejando el valor del píxel en ese punto.

No hay comentarios: