Las QTableWidget son objetos Qt que pueden ser incorporados fácilmente en los Dialog a través del QtDesigner. Una vez añadidas restaría añadirles funcionalidad permitiendo que las filas y columnas de éstas sean llenadas con información útil.
En el caso que se tratará aquí se tiene pensado añadir una QTableWidget empotrada dentro de una QTabWidget para desplegar el nombre y el tipo de capas que se encuentran en la interface de legendas de QGIS.El diseño y la edición lucen como en la imagen siguiente:
Una vez añadidos estos elementos Qt al QDialog, a la plantilla principal del plugin (archivo *.py) se le añade el código siguiente; el cual permite poblar la filas y columnas de la QTableWidget según un arreglo matricial de datos. El número de filas corresponde a la longitud de la data y se determina dinámicamente y las columnas corresponden a los items que hemos añadido a la QTableWidget mediante el QtDesigner.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | . . . from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, SIGNAL from PyQt4.QtGui import QAction, QIcon, QTableWidgetItem . . . def add_action( . . . expBtn = self.dlg.exportButton expBtn.connect(expBtn, SIGNAL("clicked()"), self.export) legend = self.iface.legendInterface() layers = legend.layers() data = [ [] for i in range(len(layers)) ] for i, layer in enumerate(layers): for j in range(2): data[i].append(layer.name()) if layer.type() == QgsMapLayer.VectorLayer: data[i].append('vector layer') if layer.type() == QgsMapLayer.RasterLayer: data[i].append('raster layer') nb_row = len(data) nb_col = 2 self.dlg.tableWidget.setRowCount(nb_row) self.dlg.tableWidget.setColumnCount(nb_col) for row in range (nb_row): for col in range(nb_col): item = QTableWidgetItem(str(data[row][col])) self.dlg.tableWidget.setItem(row, col, item) return action def initGui(self):. . . |
Después de recargado y ejecutado el plugin se obtiene la visualización siguiente; tal como se esperaba.
No obstante, al plugin le faltaría actualizar la información de la QTableWidget cada vez que se añada o remueva una capa de la Interface de Leyendas. Para ello sólo se requiere adaptar el código que se encuentra en este post.
No hay comentarios:
Publicar un comentario