Le jeudi 28 mai 2009 20:57:50 Vicente Sole, vous avez écrit : > Hello, > > I am writing a generic data handling application in which I need to be > able to show the contents of a numpy array in a sort of > table/spreadsheet. The array can be big (1024 x 1024 floats or may be > even more). > > Is there a faster way of filling a table than looping through all the > array elements and introducing them in the table cells one by one? >
You should use a QTableView with a model you write (which should derivate from QAbstractTableModel) like the file attached. -- David Douard LOGILAB, Paris (France), +33 1 45 32 03 12 Formations Python, Numpy, Debian : http://www.logilab.fr/formations Développement logiciel sur mesure : http://www.logilab.fr/services Informatique scientifique : http://www.logilab.fr/science
import numpy from PyQt4 import QtCore, QtGui Qt = QtCore.Qt class NumpyModel(QtCore.QAbstractTableModel): def __init__(self, narray, parent=None): QtCore.QAbstractTableModel.__init__(self, parent) self._array = narray def rowCount(self, parent=None): return self._array.shape[0] def columnCount(self, parent=None): return self._array.shape[1] def data(self, index, role=Qt.DisplayRole): if index.isValid(): if role == Qt.DisplayRole: row = index.row() col = index.column() return QtCore.QVariant("%.5f"%self._array[row, col]) return QtCore.QVariant() if __name__ == "__main__": a = QtGui.QApplication([]) w = QtGui.QTableView() d = numpy.random.normal(0,1, (1000,1000)) m = NumpyModel(d) w.setModel(m) w.show() a.exec_()
_______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt