class STATCHART(QWidget): def __init__(self): #super(QWidget, self).__init__() QWidget.__init__(self) self.setupModel() self.setupViews() def setupModel(self): self.model = QtGui.QStandardItemModel(8, 2, self) self.model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant("Label")) self.model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant("Quantity")) def setupViews(self): self.vbox = QtGui.QVBoxLayout() self.setLayout(self.vbox) splitter = QtGui.QSplitter() table = QtGui.QTableView() self.pieChart = PieView() splitter.addWidget(table) splitter.addWidget(self.pieChart) splitter.setStretchFactor(0, 0) splitter.setStretchFactor(1, 1) table.setModel(self.model) self.pieChart.setModel(self.model) self.selectionModel = QtGui.QItemSelectionModel(self.model) table.setSelectionModel(self.selectionModel) self.pieChart.setSelectionModel(self.selectionModel) table.horizontalHeader().setStretchLastSection(True) self.vbox.addWidget(splitter) def decode(self, typestat): self.model.removeRows(0, self.model.rowCount(QtCore.QModelIndex()), QtCore.QModelIndex()) row = 0 i = 0 for mtype, count in typestat.iteritems(): color = random.randint(0, 0xffffffff) self.model.insertRows(row, 1, QtCore.QModelIndex()) self.model.setData(self.model.index(row, 0, QtCore.QModelIndex()), QtCore.QVariant(mtype)) self.model.setData(self.model.index(row, 1, QtCore.QModelIndex()), QtCore.QVariant(float(count))) self.model.setData(self.model.index(row, 0, QtCore.QModelIndex()), QtCore.QVariant(QtGui.QColor(color)), QtCore.Qt.DecorationRole) row += 1
def setupViews(self): self.vbox = QtGui.QVBoxLayout() self.setLayout(self.vbox) splitter = QtGui.QSplitter() table = QtGui.QTableView() self.pieChart = PieView() splitter.addWidget(table) splitter.addWidget(self.pieChart) splitter.setStretchFactor(0, 0) splitter.setStretchFactor(1, 1) table.setModel(self.model) self.pieChart.setModel(self.model) self.selectionModel = QtGui.QItemSelectionModel(self.model) table.setSelectionModel(self.selectionModel) self.pieChart.setSelectionModel(self.selectionModel) table.horizontalHeader().setStretchLastSection(True) self.vbox.addWidget(splitter)