Cuando se empieza a desarrollar plugins para QGIS, es frecuente pensar que un botón debería “hacer algo” por sí solo.
En realidad, un botón no hace absolutamente nada… hasta que le indicamos qué debe hacer.
En este artículo veremos cómo recuperar los valores introducidos por el usuario en la interfaz de un plugin QGIS, comprender dónde se almacenan esos valores y desmitificar lo que ocurre realmente cuando se hace clic en un botón.
El objetivo no es escribir mucho código, sino comprender la conexión entre la interfaz gráfica y la lógica del plugin, sin jerga innecesaria.
Recuperar y utilizar los datos introducidos por el usuario
En los artículos anteriores, creamos un plugin QGIS mínimo, añadimos un botón a la interfaz y mostramos una ventana de diálogo al hacer clic sobre él.
Ese fue un paso importante.
Sin embargo, nuestro plugin todavía no realiza ninguna tarea útil.
En este artículo vamos a dar el siguiente paso fundamental: recuperar los valores introducidos por el usuario y utilizarlos en el código Python del plugin.
Pero antes…
Cuando una persona comienza a desarrollar plugins QGIS, su primer contacto con el código Python puede resultar intimidante.
Múltiples archivos, clases, métodos y palabras clave desconocidas pueden dar la impresión de que todo es mucho más complicado de lo que realmente es.
La buena noticia es que no es necesario comprenderlo todo desde el principio.
Leer código es una habilidad que se adquiere progresivamente.
Si todavía no lo has leído, te recomendamos consultar:
Cómo Leer el Código de un Plugin QGIS sin Entrar en Pánico
Ese artículo propone un método sencillo y tranquilizador para comprender el código de un plugin sin sentirse abrumado.
¿Por qué un botón no “hace nada” por sí solo?
Hay un concepto fundamental que conviene entender desde el principio:
Una ventana de diálogo Qt no ejecuta ninguna acción por sí misma.
Su función consiste únicamente en:
- mostrar campos de entrada,
- permitir al usuario introducir o seleccionar valores,
- presentar información mediante una interfaz gráfica.
Por ejemplo, una ventana puede contener:
- campos de texto,
- listas desplegables,
- casillas de verificación,
- campos numéricos.
Si el plugin nunca lee esos valores, no ocurrirá nada.
Y eso es completamente normal.
La ventana es únicamente la interfaz de usuario.
El comportamiento real del plugin está definido por el código Python que recupera y utiliza esos valores.
¿Dónde se almacenan los valores?
Cada campo mostrado en una ventana es un objeto Python creado a partir del archivo .ui diseñado con Qt Designer.
Algunos ejemplos habituales son:
QLineEdit→ campo de textoQComboBox→ lista desplegableQCheckBox→ casilla de verificaciónQSpinBox→ campo numérico
Estos widgets son accesibles a través del objeto de diálogo, normalmente llamado dlg.
Por ejemplo:
self.dlg.lineEdit
self.dlg.comboBox
self.dlg.checkBox
El valor introducido por el usuario se almacena dentro del propio widget.
No existe ningún almacenamiento oculto.
Si el plugin necesita ese valor, debe recuperarlo explícitamente desde el widget correspondiente.
Esta idea tan simple constituye la base de toda interacción entre el usuario y un plugin QGIS.
Leer valores: ejemplos sencillos
Una vez que sabes dónde se almacenan los valores, el siguiente paso consiste en recuperarlos desde los widgets de la ventana.
Cada tipo de widget dispone de su propio método para acceder a los datos introducidos por el usuario.
Campo de texto (QLineEdit)
texto = self.dlg.lineEdit.text()
textocontiene lo que el usuario ha escrito en el campo.
Lista desplegable (QComboBox)
opcion = self.dlg.comboBox.currentText()
opcioncontiene el elemento actualmente seleccionado.
Casilla de verificación (QCheckBox)
activo = self.dlg.checkBox.isChecked()
activocontieneTrueoFalse.
Campo numérico (QSpinBox)
valor = self.dlg.spinBox.value()
valorcontiene un valor numérico.
En esta etapa no es necesario comprender todos los detalles técnicos.
Lo importante es recordar que cada widget dispone de un método específico para acceder a su contenido.
El momento crucial: ¿cuándo leer los valores?
Uno de los errores más frecuentes entre los principiantes consiste en intentar leer los valores antes de que el usuario haya validado la ventana.
En un plugin QGIS clásico, los valores solo deben recuperarse después de que el usuario haya aceptado el diálogo.
Por ejemplo:
result = self.dlg.exec_()
if result:
# leer los valores aquí
La llamada a exec_() muestra la ventana y espera a que el usuario interactúe con ella.
Solo cuando el usuario pulsa Aceptar (o valida la ventana de alguna otra forma) el código continúa ejecutándose.
Si intentas leer los valores antes de ejecutar exec_(), normalmente obtendrás campos vacíos o valores predeterminados.
El usuario debe completar la ventana y validarla antes de que el plugin pueda acceder de forma fiable a los datos introducidos.
Este es uno de los conceptos más importantes cuando se trabaja con diálogos Qt.
La ventana recopila información del usuario.
Tu código recupera esa información únicamente después de que la ventana haya sido validada.
Una forma sencilla de entenderlo
Puedes imaginar una ventana de diálogo como un formulario que espera ser completado.
El proceso siempre sigue la misma secuencia:
- El plugin muestra la ventana.
- El usuario introduce información.
- El usuario pulsa Aceptar.
- El plugin recupera los valores.
- El plugin ejecuta una acción.
Si uno de estos pasos falta, el proceso queda incompleto.
Comprender esta secuencia facilita enormemente entender cómo interactúan los plugins QGIS con sus usuarios.
Ejemplo completo mínimo
Vamos a reunir todos los elementos en un ejemplo sencillo y deliberadamente minimalista.
result = self.dlg.exec_()
if result:
texto = self.dlg.lineEdit.text()
opcion = self.dlg.comboBox.currentText()
activo = self.dlg.checkBox.isChecked()
print("Texto:", texto)
print("Opción:", opcion)
print("Opción activa:", activo)
En este punto, el plugin no realiza:
- ningún análisis,
- ningún procesamiento complejo,
- ninguna interacción con capas QGIS.
El objetivo es simplemente demostrar que el plugin puede recuperar correctamente la información introducida por el usuario.
Una vez que logras hacerlo, ya has establecido la conexión entre la interfaz gráfica y el código Python.
Y eso representa un paso muy importante en el desarrollo de plugins.
¿Por qué no ocurre nada si no lees los valores?
Esta es una de las preguntas más frecuentes entre quienes empiezan.
Un plugin QGIS no es un formulario automático.
No existe ninguna magia oculta detrás de la interfaz.
Cuando un usuario escribe un texto, selecciona una opción o marca una casilla, QGIS simplemente almacena esa información dentro del widget correspondiente.
Si tu código nunca recupera ese valor, dicho valor nunca se utilizará.
No ocurre nada porque el plugin no ha recibido ninguna instrucción sobre qué hacer con la información introducida.
Este comportamiento es intencionado.
Permite al desarrollador tener un control total sobre el comportamiento del plugin y sobre las acciones que deben ejecutarse.
Los datos introducidos por el usuario solo se vuelven útiles cuando tu código los recupera y los utiliza explícitamente.
Lo que has aprendido
Al finalizar este artículo, ya sabes:
- dónde se almacenan los valores introducidos por el usuario;
- cómo recuperarlos en Python;
- cuándo deben recuperarse;
- por qué no ocurre nada hasta que el plugin utiliza esos valores explícitamente.
Estos conceptos constituyen la base de cualquier plugin QGIS interactivo.
Tanto si tu plugin realiza un cálculo sencillo como un análisis espacial complejo, casi siempre comenzará recopilando información del usuario.
¿Qué veremos en el próximo artículo?
Hasta ahora, nuestro plugin es capaz de recuperar la información introducida por el usuario.
Sin embargo, todavía no hace nada útil con ella.
En el próximo artículo veremos cómo transformar esos datos en acciones concretas.
Aprenderemos a:
- validar los datos introducidos;
- aplicar reglas de negocio;
- tomar decisiones en función de las elecciones del usuario;
- controlar el comportamiento del plugin.
Recuperar los valores es el primer paso.
Utilizarlos de forma inteligente es lo que convierte un plugin en una herramienta realmente útil.
Artículo siguiente: Desarrollar un Plugin QGIS: Aplicar Lógica de Negocio a los Datos Introducidos por el Usuario