class MainWindow(QtGui.QMainWindow): def __init__(self, nr_columns, rows): super(MainWindow, self).__init__() self.setupModel(nr_columns, rows) self.setupViews() self.statusBar() self.resize(870, 550) def setupModel(self, nr_columns, rows): self.model = QStandardItemModel() root = self.model.invisibleRootItem() i1, i2, i3 = QStandardItem(1), QStandardItem(2), QStandardItem(3) root.appendRow([i1, i2, i3]) self.model.insertRow(0) self.model.setData(QModelIndex(), [1,2,3]) self.model.setData(QModelIndex(), [5,6,7]) self._set_data(nr_columns, rows) def _set_data(self, nr_columns, rows): start_time = time.time() # for row_idx, row in enumerate(rows): # if row_idx % 10 != 0: # pass # self.model.insertRows(row_idx, 1, QtCore.QModelIndex()) # for col_idx, col in enumerate(row): # self.model.setData(self.model.index(row_idx, col_idx, QtCore.QModelIndex()), # col) end_time = time.time() self.statusBar().showMessage("Inserted data in %g" % (end_time - start_time)) def setupViews(self): splitter = QtGui.QSplitter() self.table = QtGui.QTreeView() self.table.setItemDelegate(TreeViewDelegate()) self.table.setModel(self.model) splitter.addWidget(self.table) # button = QtGui.QPushButton('Shuffle', self) # button.clicked.connect(self.shuffle) # button.resize(button.sizeHint()) # splitter.addWidget(button) self.selectionModel = QtGui.QItemSelectionModel(self.model) self.table.setSelectionModel(self.selectionModel) self.setCentralWidget(splitter) def shuffle(self): from random import random as rnd row_count = self.model.rowCount() column_count = self.model.columnCount() new_rows = [[str(rnd())[:4] for _ in xrange(column_count)] for _ in xrange(row_count)] start_time = time.time() self.model.clear() for row_idx, row in enumerate(new_rows): self.model.insertRow(row_idx, row) end_time = time.time() self.statusBar().showMessage("Reset data in %g" % (end_time - start_time))