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

Reply via email to