Widget, botón y señales con Qt en PyQGIS

Hasta ahora, con PyQGIS, habiamos escrito sobre el uso de las clases que tenían que ver con la manipulación de la información de las capas vectoriales y ráster. Sin embargo, si queremos hacer aplicaciones independientes que funcionen dentro o fuera de QGIS tenemos que comenzar a familiarizarnos con las clases de Qt. Aunque el Plugin builder y el Qt4 Designer son herramientas que facilitan esa labor, podría ser conveniente comenzar con aplicaciones sencillas, desde cero, que ilustren el empleo de conceptos básicos como el de Widget, botón y señales.

En este caso, el widget es una aplicación que se gestiona a través de la clase QWidget de PyQt4 y que actua como un framework para las demás aplicaciones que pueden ser programadas dentro de éste; como por ejemplo el botón.

Tanto el widget como el botón tienen características propias (dimensiones, texto, estilo, color) que se definen en el código siguiente y son auto explicativas. Mención aparte merece el tema del “backgroud-color” cuyo código hexadecimal fue pinchado con la aplicación gcolor tomando como muestra la barra de menú de QGIS (para que el widget tuviese ese color).

# -*- coding: utf-8 -*-
import os
from qgis.gui import *
from PyQt4.QtGui import QWidget, QPushButton


def testSignal():
    
    iface.messageBar().pushMessage("", 
                                   u"El botón ha sido clickado", 
                                   QgsMessageBar.INFO, 5)
    
    w.close()
    
    
# Se crea un widget con un botón y se muestra
w = QWidget()
w.setWindowTitle('Simple widget')
w.resize(400, 200)
w.move(500, 250)
w.setStyleSheet( "background-color : #DCDCDC" ); #color de fondo gris

# Se crea el botón. Se asigna como padre la ventana anterior
btn = QPushButton(w)

# Se asigna un nombre al objeto. Función de QObject
btn.setObjectName('object_name')

# Se indica texto emergente. Función de QWidget
btn.setToolTip('This is a <b>QPushButton</b> widget')

# Se asigna el texto del botón. Función de QAbstractButton
btn.setText('Prueba')

# Se indica que este sea el botón por defecto. Función de QPushButton
btn.setDefault(True)

# Se inicia el tamaño y posición relativa
btn.setMinimumHeight(40)
btn.setMinimumWidth(150)
btn.move(130, 80)

btn.clicked.connect(testSignal)

# Se muestra la ventana
w.show()

Otra mención aparte la merece la captura del evento de clickear por parte de la función testSignal que produce un mensaje informativo de que éste efectivamente lo ha sido. Ha sido generado empleado la barra de mensajes, iface.messageBar().pushMessage(), del módulo de qgis.gui; ya no se usa la ventana de la Python Console. Además, en la función testSignal, se cierra el widget mediante el método ‘close’.

Ejecutando el código desde el icono “Run script” de la Python Console:

widget1

observamos la ventana del widget con su botón ‘Prueba’ encapsulado.

La imagen siguiente muestra lo que ocurre después que el botón ‘Prueba’ ha sido clickado:

widget2

La barra azul de mensaje (información) se despliega por espacio de 5 segundos anunciando el evento.

En el artículo siguiente haremos mención a otras barras de mensaje en las cuales se muestran los de advertencia.

Esta entrada fue publicada en PyQGIS, QGIS, Software Libre. Guarda el enlace permanente.

Una respuesta a Widget, botón y señales con Qt en PyQGIS

  1. Pingback: Widget, botón y señales en PyQGIS con QtDesigner | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s