Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- self.data = pd.read_csv('transactions.txt', sep='t', header=None)
- self.data.columns = ["Name", "Price", "Action"]
- self.model = PandasModel(self.data)
- self.tableViewTransaction.setModel(self.model)
- class PandasModel(QtCore.QAbstractTableModel):
- def __init__(self, df = pd.DataFrame(), parent=None):
- QtCore.QAbstractTableModel.__init__(self, parent=parent)
- self._df = df
- def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
- if role != QtCore.Qt.DisplayRole:
- return QtCore.QVariant()
- if orientation == QtCore.Qt.Horizontal:
- try:
- return self._df.columns.tolist()[section]
- except (IndexError, ):
- return QtCore.QVariant()
- elif orientation == QtCore.Qt.Vertical:
- try:
- # return self.df.index.tolist()
- return self._df.index.tolist()[section]
- except (IndexError, ):
- return QtCore.QVariant()
- def data(self, index, role=QtCore.Qt.DisplayRole):
- if role != QtCore.Qt.DisplayRole:
- return QtCore.QVariant()
- if not index.isValid():
- return QtCore.QVariant()
- return QtCore.QVariant(str(self._df.ix[index.row(), index.column()]))
- def setData(self, index, value, role):
- row = self._df.index[index.row()]
- col = self._df.columns[index.column()]
- if hasattr(value, 'toPyObject'):
- # PyQt4 gets a QVariant
- value = value.toPyObject()
- else:
- # PySide gets an unicode
- dtype = self._df[col].dtype
- if dtype != object:
- value = None if value == '' else dtype.type(value)
- self._df.set_value(row, col, value)
- return True
- def rowCount(self, parent=QtCore.QModelIndex()):
- return len(self._df.index)
- def columnCount(self, parent=QtCore.QModelIndex()):
- return len(self._df.columns)
- def sort(self, column, order):
- colname = self._df.columns.tolist()[column]
- self.layoutChanged.emit()
- self._df.sort_values(colname, ascending= order == QtCore.Qt.AscendingOrder, inplace=True)
- self._df.reset_index(inplace=True, drop=True)
- self.layoutChanged.emit()
- def recordTransaction(self):
- name = self.comboBoxStock.currentText()
- price = self.lineEditMoney.text()
- action = self.comboBoxAction.currentText()
- self.data.loc[len(self.data.index)] = [name, price, action]
- self.tableViewTransaction.model().layoutChanged.emit()
Add Comment
Please, Sign In to add comment