4 votos

Rellenando QTableWidget con un archivo CSV usando PyQGIS

He logrado poblar un QTableWidget con datos almacenados en una base de datos con el código siguiente:

self.cur.execute("""SELECT column1, column2, column3, column4 from schema.table WHERE column1 IN ('""" + str(self.dlg.mComboBox.currentText()) + """') AND  column2 >= '""" + str(self.dlg.mDateTimeEdit.dateTime().toString("yyyyMMdd")) + """' AND column2 <= '""" + str(self.dlg.mDateTimeEdit_2.dateTime().toString("yyyyMMdd")) + """' """)

self.dlg.tableWidget.setRowCount(0)
self.dlg.tableWidget.setColumnCount(4)
for row_number, row_data in enumerate(self.cur):
    self.dlg.tableWidget.insertRow(row_number)
    for column_number, data in enumerate(row_data):
        self.dlg.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))

Pensé que podría hacer lo mismo con datos CSV, pero en realidad estoy teniendo problemas para mostrar los datos de mi archivo CSV en el qtableview.

¿Cómo puedo abordar esto? No he podido resolver mi problema con los pocos temas relativos que encontré en StackExchange todavía.

Último intento aquí:

    with open('C:/Users/user/AppData/Roaming/QGIS/QGIS3/profiles/default/python/plugins/plugin_test/file.csv', 'rb') as stream:

        self.dlg.tableWidget_2.setRowCount(0)
        self.dlg.tableWidget_2.setColumnCount(0)
        for rowdata in csv.reader(stream):
            row = self.dlg.tableWidget_2.rowCount()
            self.dlg.tableWidget_2.insertRow(row)
            self.dlg.tableWidget_2.setColumnCount(len(rowdata))
            for column, data in enumerate(rowdata):
                item = QtGui.QTableWidgetItem(data.decode('utf8'))
                self.dlg.tableWidget_2.setItem(row, column, item)

Con este último código, no recibo ningún mensaje de advertencia de QGIS, pero tampoco sucede nada

2voto

Yada Puntos 9489

El siguiente código funciona con un CSV arbitrario creado por mí.

import csv

data = []

with open('/home/zeito/Desktop/data_test/data5.csv', 'r') as stream:
    for rowdata in csv.reader(stream):
        data.append(rowdata)

labels = data[0]

del data[0]

from PyQt5.QtCore import Qt

class Dlg(QDialog):

    def __init__(self):
        QDialog.__init__(self)
        self.layout = QGridLayout(self)

        self.tabs = QTabWidget()
        self.tab1 = QWidget()

        self.tabs.addTab(self.tab1,"Tab1")

        nb_row = len(data)
        nb_col = len(data[0])

        self.tab1.layout = QVBoxLayout(self)

        self.table = QTableWidget()
        self.table.setRowCount(nb_row)
        self.table.setColumnCount(nb_col)
        self.table.setHorizontalHeaderLabels(labels)

        for row in range (nb_row):
            for col in range(nb_col):
                item = QTableWidgetItem(str(data[row][col]))
                self.table.setItem(row, col, item)

        self.tab1.layout.addWidget(self.table)
        self.tab1.setLayout(self.tab1.layout)
        self.layout.addWidget(self.tabs, 0, 0)

w = Dlg()
w.resize(600,400)
w.setWindowTitle('Rellenando QTableWidget con un archivo CSV')
w.setWindowFlags(Qt.WindowStaysOnTopHint)
w.show()

El contenido del CSV es el siguiente:

date,temp,hr,ws,ppt
20200901,11.0,15.0,1.0,1.0
20200902,1.0,1.0,1.0,1.0
20200903,1.0,1.0,1.0,1.0
20200904,1.0,1.0,30,1.0
20200905,1.0,22.0,1.0,1.0
20200906,14.0,1.0,15.0,1.0

Después de ejecutar el código anterior en la consola de Python de QGIS, obtuve el siguiente resultado.

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X