Lo he hecho, utilizando el evento generado al hacer scroll.
Todo funciona, pero no tan bien como yo quisiera....pongo el codigo y luego explico por que no va bien, a ver si alguien puede sugerir algo:
Código Python:
Ver original#La primera vez que muestro la tabla, solo
#muestro unas pocas lineas de la PyTable,
#las necesarias para llenar la pantalla
for x in tab.iterrows(start=0, stop=35):
res.append(x[:])
for i, row in enumerate(res):
#aqui almaceno el indice de linea, para usarlo luego
self.indexi = i
for j, col in enumerate(row):
#Y aqui relleno la QTableWidget
item = QTableWidgetItem(str(col))
self.ui.tableWidget.setItem(i, j, item)
Previamente a todo esto ya habia hecho la conexion del evento de scroll asi:
Código Python:
Ver originalQtCore.QObject.connect(self.ui.tableWidget.verticalScrollBar(), QtCore.SIGNAL('valueChanged(int)'), self.updateTable)
Y el slot que responde al evento, es mas o menos como lo anterior:
Código Python:
Ver original@QtCore.pyqtSlot(int)
def updateTable(self, number):
res = []
for x in self.node.iterrows(start=self.indexi+1, stop=self.indexi+number):
res.append(x[:])
for i, row in enumerate(res):
self.indexi = self.indexi + 1
for j, col in enumerate(row):
item = QTableWidgetItem(str(col))
self.ui.tableWidget.setItem(self.indexi, j, item)
QApplication.instance().processEvents()
Ahora, EL PROBLEMA: todo esto funciona bien, el slot responde y todo eso, PERO, la PyTable es muy grande, mas de 1millon de lineas, y al hacer scroll en la QTableWidget, como ya habia definido previamente sus atributos, lo que sucede es que al hacer scroll en la QTableWidget, el scroll es un avance de mas de 5000 lineas, con lo cual al intentar actualizar la QTableWidget con 5000 o mas lineas de golpe, no responde instantaneo, le cuesta varios segundos.
Código Python:
Ver originalself.ui.tableWidget.setRowCount(tab.nrows)
self.ui.tableWidget.setColumnCount(len(tab.colnames))
P.D: tampoco responde bien si haces varios scrolls seguidos, rapidos en la QTableWidget