Las clases Qgs…Widget de qgis.gui (PyQGIS)

En el post anterior se consideró la manera de instanciar las aplicaciones tipo menú de persiana (Qgs…ComboBox en qgis.gui) de PyQGIS utilizando la ayuda de un QDialog vacío para mejorar la visualización. En este caso se va a explorar la forma de instanciar las clases Qgs…Widget de qgis.gui; que ya incluyen su propio diseño de QDialog.

Para ello, primero vamos a averiguar, con getPat en la Python Console, cuantas clases de este tipo tenemos.

from qgis.gui import *
from utils import getPat
getPat('Widget', dir(qgis.gui))
['CharacterWidget', 'QgsBlurWidget', 
'QgsCategorizedSymbolRendererV2Widget', 'QgsCentroidFillSymbolLayerV2Widget', 
'QgsColorPreviewWidget', 'QgsColorRampWidget', 
'QgsColorSliderWidget', 'QgsColorTextWidget', 
'QgsColorWidget', 'QgsCustomLayerOrderWidget', 
'QgsDetailedItemWidget', 'QgsDrawSourceWidget',
...
'QgsSingleBandGrayRendererWidget', 'QgsSingleBandPseudoColorRendererWidget', 'QgsSingleSymbolRendererV2Widget', 'QgsSizeScaleWidget', 
'QgsSvgMarkerSymbolLayerV2Widget', 'QgsSvgSelectorWidget', 
'QgsSymbolLayerV2Widget', 'QgsSymbolsListWidget', 
'QgsTransformWidget', 'QgsUserInputDockWidget', 
'QgsVectorFieldSymbolLayerWidget', 'QgsWidgetWrapper']

es decir, unas 70 clases de tipo Widget (se han omitido las clases centrales de la lista por razones de espacio).

Algunas pocas de ellas son clases abstractas que no tienen método ‘show’ y, por tanto, no se podrá instanciar nada para ser visualizado. Tomando como ejemplo la clase QgsSingleBandPseudoColorRendererWidget, vamos a copiar el texto en la Python Console e inmediatamente abrimos un paréntesis “(“. Esto desplegará la lista de parámetros que hay que pasarle al constructor para instanciar la clase. En este caso considerado tenemos que admite dos parámetros. Un objeto de la clase QgsRasterLayer y otro de la clase QgsRectangle (la extensión del ráster). Por tanto:

layer = QgsRasterLayer()
extent = layer.extent()
win = QgsSingleBandPseudoColorRendererWidget(layer, extent)
win.show()

apareciendo la forma desplegada siguiente:

widget1

Si en lugar de un ráster vacío se hubiese utilizado uno real (tipo Single Band Gray; por ejemplo), con su referencia creada mediante ‘iface.activeLayer’, la forma desplegada sería equivalente a ésta (hice click en el botón de ‘Classify’):

widget2

donde captura la información relevante del ráster para obtener las clases de renderizado. Por otra parte, todos los iconos que presenta el Widget tienen la funcionalidad esperada. Sin embargo, debe estar encapsulado dentro de otro que capture la señal de cuál es el renderizado que queremos para la banda.

Para concluir este post vamos a considerar un Widget aplicado a un archivo vectorial; por ejemplo QgsSimpleMarkerSymbolLayerV2Widget. Aquí también se admiten dos parámetros. Un objeto de la clase QgsVectorLayer y el otro, opcional, un QWidget. Con un archivo de puntos cargado en la Map View de QGIS se tiene:

layer = iface.activeLayer()
win = QgsSimpleMarkerSymbolLayerV2Widget(layer)
win.show()

desplegándose lo siguiente:

form

Sólo resta conectar la señal para que realice la selección escogida.

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

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