Python函数在PyQt中填充多个表

时间:2016-06-04 03:42:06

标签: python python-3.x object pyqt qtablewidget

我有一个具有多个功能的类,而且几乎每个人都需要填充不同的QTableWidgets。 我想创建一个函数,给定一个表名,标题和数据填充所述表。

这是有效的(但是静态的,仅适用于一个表" tableParada"):

header = ['Horario teórico', 'Entrada a terminal', 'Salida de terminal', 'Tiempo parcial en terminal']
self.ui.tableParada.setRowCount(cantidadFilas)
self.ui.tableParada.setColumnCount(len(header))
self.ui.tableParada.setHorizontalHeaderLabels(header)

for columnas in range(cantidadFilas):
    self.ui.tableParada.setItem(columnas, 0, QTableWidgetItem(str(tiempoTeoricoTerminal[columnas])))
    self.ui.tableParada.setItem(columnas, 1, QTableWidgetItem(str(tiempoInicioTerminal[columnas].time())))
    self.ui.tableParada.setItem(columnas, 2, QTableWidgetItem(str(tiempoFinTerminal[columnas].time())))
    self.ui.tableParada.setItem(columnas, 3, QTableWidgetItem(str(tiempoEnTerminal[columnas])))

这是我提出的(并且不起作用):

def completarTabla(tabla, headerFila, headerColumna, datos):
    """Completado automático de tabla tipo QTableWidget."""
    tabla.setRowCount(len(headerFila))
    tabla.setColumnCount(len(headerColumna))
    tabla.setHorizontalHeaderLabels(headerColumna)
    tabla.setVerticalHeaderLabels(headerFila)

    for fila in range(len(headerFila)):
        for columna in range(len(headerColumna)):
            tabla.setItem(fila, columna, QTableWidgetItem(str(datos[fila][columna])))

问题出在我调用函数时:

headerColumna = ['Horario teórico', 'Entrada a terminal', 'Salida de terminal', 'Tiempo parcial en terminal']
headerFila = []
completarTabla('tableParada', headerFila, headerColumna, tiempo)

我明白了:

Traceback (most recent call last):
File "C:/Users/TIC/Dropbox/TransBus - La Estrella/Programación/control-de-tiempo/query.py", line 362, in queryParada
completarTabla('tableParada', headerFila, headerColumna, tiempo)
File "C:/Users/TIC/Dropbox/TransBus - La Estrella/Programación/control-de-tiempo/query.py", line 659, in completarTabla
tabla.setRowCount(len(headerFila))
AttributeError: 'str' object has no attribute 'setRowCount'

我知道我将str传递给函数然后替换不起作用,如果我传递表名(tableParada)它也不起作用。然后:

  • 我应该传递给它的功能是什么?
  • 还有其他方法吗?
  • 有可能吗?

很抱歉,我是Python + PyQt,面向对象编程的新手,这也是我在stackoverflow上的第一篇文章,英语不是我的母语。我真的很想以正确的方式做到这一点。

提前致谢!

1 个答案:

答案 0 :(得分:0)

尝试传递self.ui.tableParada而不是字符串'tableParada'。您需要传递实际的小部件对象。