Python 在 PyQt 中填充多个表的函数
Python function to populate multiple tables in PyQt
我有一个具有多种功能的 class,几乎每个人都必须填充不同的 QTableWidgets。 我想创建一个给定 table 名称的函数,headers 和数据填充所述 table.
这是有效的(但是静态的并且只适用于一个 table "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 传递给函数,然后替换不起作用,如果我传递 table 名称(tableParada)它也不起作用。那么:
- 我应该向函数传递什么才能使其工作?
- 还有别的方法吗?
- 有可能吗?
抱歉,我是 Python + PyQt 的新手,面向 object 的编程,这也是我第一次 post 在 Whosebug 上,英语不是我的母语。我真的很想以正确的方式做到这一点。
提前致谢!
尝试传递 self.ui.tableParada
而不是字符串 'tableParada'
。您需要传递实际的小部件对象。
我有一个具有多种功能的 class,几乎每个人都必须填充不同的 QTableWidgets。 我想创建一个给定 table 名称的函数,headers 和数据填充所述 table.
这是有效的(但是静态的并且只适用于一个 table "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 传递给函数,然后替换不起作用,如果我传递 table 名称(tableParada)它也不起作用。那么:
- 我应该向函数传递什么才能使其工作?
- 还有别的方法吗?
- 有可能吗?
抱歉,我是 Python + PyQt 的新手,面向 object 的编程,这也是我第一次 post 在 Whosebug 上,英语不是我的母语。我真的很想以正确的方式做到这一点。
提前致谢!
尝试传递 self.ui.tableParada
而不是字符串 'tableParada'
。您需要传递实际的小部件对象。