5 votos

¿Cómo poblar QTableWidget a través de un plugin?

Estoy tratando de poblar un QTableWidget agregando filas, esto lo hace el usuario haciendo clic en el add botón:

QTableWidget

Tengo el siguiente código para intentar insertar filas pero no pasa nada:

def addButton_clicked():
    # objectName for add button = addButton
    # objectName for QTableWidget = tableWidget
    model = dockwidget.tableWidget
    rowCount = self.model.rowCount()
    self.model.insertRows(rowCount, 1)

add_button = self.dockwidget.addButton
add_button.clicked.connect(addButton_clicked)

El Group y Order las columnas fueron creadas a partir de Qt Designer. Estoy tratando de crear filas en las que el usuario pueda seleccionar un grupo del ToC (en el Group ) y asignar un número entero (en la columna Order columna). ¿Es posible algo así?

Estoy abierto a otras ideas.


El siguiente código de @WKT crea una tabla con columnas y x número de filas. Puedo rellenar la tabla con los nombres de los grupos del ToC. Sin embargo, sólo quiero poblar la primera columna . El código que estoy ejecutando en este momento llena todas las columnas. Aquí está el código:

qTable = self.dockwidget.tableWidget
data = []
group1 = root.findGroup('Group1')
group2 = root.findGroup('Group2')
for child in group1.children():
    data.append(child.name())
for child in group2.children():
    data.append(child.name())
nb_row = len(data)
nb_col = 2
qTable.setRowCount(nb_row)
qTable.setColumnCount(nb_col)

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

qTable.setHorizontalHeaderLabels([u'Column1',u'Column2'])
qTable.resizeColumnsToContents()

QTableWidget

8voto

matt Puntos 211

Permítanme compartir cómo funciona para mí:

self.setWindowTitle(title)

#data = 'Recordset back from postgis'
nb_row = len(data)
nb_col = 2

qTable.setRowCount(nb_row)
qTable.setColumnCount(nb_col)

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

qTable.setHorizontalHeaderLabels([u'Column1',u'Column2'])

qTable.resizeColumnsToContents()

0 votos

Gracias por compartirlo, ¿así que básicamente se rellena inmediatamente la tabla con filas/columnas? Voy a volver a esto en un par de días y le permiten saber cómo me va :)

0 votos

Lo utilizo en un diálogo genérico para mostrar los resultados de una consulta a la base de datos y dejar que el usuario elija una fila. Funciona bien. Cualquier problema, háganoslo saber....

0 votos

Sí, lo siento, tienes razón. Intenté borrar el comentario antes de que pudieras leerlo ;).

2voto

Mue Puntos 2469

Encontré una manera, básicamente sólo necesitas especificar la columna al poblar el QTableWidget (mencionado en el comentario):

qTable = self.dockwidget.tableWidget
data = []
group1 = root.findGroup('Group1')
group2 = root.findGroup('Group2')
for child in group1.children():
    data.append(child.name())
for child in group2.children():
    data.append(child.name())
nb_row = len(data)
nb_col = 2
qTable.setRowCount(nb_row)
qTable.setColumnCount(nb_col)

for row in range(nb_row):
    # Add following line to only populate first column
    for col in [0]:
        item = QTableWidgetItem(str(data[row]))
        qTable.setItem(row,col,item)

qTable.setHorizontalHeaderLabels([u'Column1',u'Column2'])
qTable.resizeColumnsToContents()

QTableWidget

0 votos

Estoy haciendo exactamente lo mismo con mi plugin. Puede ayudarme a saber, en qué archivo y método del plugin debo incluir este código?

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