Script de Python para filtrar por patrón de texto los métodos de Clases en PyQGIS

Cuando se empieza con PyQGIS a través del PyQGIS Developer Cookbook la ilusión inicial se convierte en frustación al ver que éste, muy pronto, es incapaz de satisfacer nuestras espectativas. Un comentario emitido por Martin Laloux, en uno de sus artículos para GeoTux, ya señalaba que el PyQGIS Developer Cookbook resultaba bastante complejo para el principiante; especialmente en los procesos de iteración. Buscando información acerca de cuál sería la mejor manera para introducirme seriamente en la programación de la API de PyQIS encontré que, según mi opinión, la mejor opción sería adquirir el libro de Gary Sherman “The PyQGIS Programmer’s Guide. Extending QGIS 2.x with Python”. En el se detalla lo que voy a expresar a continuación.

Para programar con PyQGIS hay que tener un entendimiento básico de la documentación de la API de QGIS y Qt. Sin embargo, con más de 500 clases listadas en la documentación la pregunta es por dónde empezar? En su libro, Sherman comienza con la interfase de QGIS (iface) y los procedimientos asociados a la QgsVectorLayer. Lo tomaremos como base. Sin embargo, para valorar verdaderamente la utilidad de ésto es necesario seguir sus recomendaciones. Para ello, lo primero que vamos a hacer es crear una carpeta para almacenar todos nuestros scripts. Yo la establecí, en Windows, en /Users/zeito/pyqgis_scripts (se omite la unidad y se invierte el sentido de la barra inclinada). Aunque también se acepta la barra inclinada en el sentido tradicional de Windows, es conveniente hacerlo de esta forma porque nos evitaremos sorpresas desagradables con las secuencias de escape al establecer las rutas a los archivos vectoriales y rásteres.

Ahora, lo siguiente, es establecer la variable de entorno PATHPYTHON en los Settings -> System de QGIS; tal como se encuentra en la siguiente imagen:

pyqgis

Con esto podremos importar directamente nuestros scripts a la consola de Python en QGIS y los procedimientos asociados a ellos. Sin embargo, antes de presentar nuestro script vamos a averiguar el número y el nombre de métodos y procedimientos asociados a iface en la consola de Python. Esto se logra con dir(iface) que produce una lista de ellos. Asignádola a la variable L, la vamos a introducir en una función, conjuntamente con el patrón de texto objeto de búsqueda, para que nos devuelva una lista con las coincidencias. El resultado de dir(iface) se encuentra en la siguiente imagen y tiene 244 elementos en su lista.

iface

El script propuesto, denominado signal2.py, es el siguiente:

import re

#Introduzca patron de texto y lista 
def get_patt(keyword, L):

#declara lista vacia
    list = []

    for item in L:
        signal = re.search(keyword,item)
        if signal is not None:
            list.append(item)

    print list  #imprime lista con resultados

el cual permite encontrar el patrón de texto, que se señala en primer término, en la lista que se pasa conjuntamente a la función get_patt().

En la consola de Python de QGIS, para investigar la ocurrencia del patrón zoom en la lista de 244 elementos, se tiene que:

Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on zeito-PC
## Type help(iface) for more info and list of methods.
import signal2
from signal2 import  get_patt
L = dir(iface)
get_patt('zoom', L)
['zoomFull', 'zoomToActiveLayer', 'zoomToNext', 'zoomToPrevious']

Para probar los resultados devueltos simplemente carguen un shapefile al MapCanvas de QGIS, reduzcan el tamaño del mapa con el scroll button del mouse y luego apliquen los comandos atómicos que se encuentran abajo en la consola de Python de QGIS.

iface.zoomFull()
iface.zoomToPrevious()

No se requiere cargar previamente iface de qgis.utils porque esto se hace ahora automáticamente al abrir una consola de Python. No obstante, si esos comandos van a ser usados en un script si hay que incluir previamente lo siguiente:

from qgis.utils import iface
Esta entrada fue publicada en Código Python, PyQGIS, Software Libre. Guarda el enlace permanente.

3 respuestas a Script de Python para filtrar por patrón de texto los métodos de Clases en PyQGIS

  1. Pingback: Aplicación de un script de Python para filtrar por patrón de texto los métodos de la Clase QgsVectorLayer en PyQGIS | El Blog de José Guerrero

  2. Pingback: Review del libro PyQGIS Programmer's Guide - MappingGIS

  3. Pingback: La función get_patt en el aprendizaje de PyQGIS | 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