-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMetadataFrameModel.py
More file actions
125 lines (101 loc) · 4.29 KB
/
MetadataFrameModel.py
File metadata and controls
125 lines (101 loc) · 4.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
import pandas as pd
class MetadataFrameModel(QtCore.QAbstractTableModel):
def __init__(self, data):
QtCore.QAbstractTableModel.__init__(self)
data.index.name = ''
self._data = data
def rowCount(self, parent=None):
return self._data.shape[0]
def columnCount(self, parnet=None):
return self._data.shape[1]
def data(self, index, role=Qt.DisplayRole):
if index.isValid():
if role == Qt.DisplayRole:
try:
return str(self._data.iloc[index.row(), index.column()]) # '{:.4e}'.format(self._data.iloc[index.row(), index.column()])
except:
return str(self._data.iloc[index.row(), index.column()])
if role == Qt.BackgroundRole:
'''if self.standards is not None:
if index.row() == 0:
return QtGui.QBrush(Qt.white)
elif self.standards in self._data[''][index.row()]:
return QtGui.QBrush(QtGui.QColor(200, 255, 220))'''
return QtGui.QBrush(Qt.white)
return None
def insertRows(self, row, count, index=QtCore.QModelIndex()):
self.beginInsertRows(index, row, count)
new_row = pd.DataFrame([[''] * len(self._data.columns)], columns=self._data.columns)
self._data = self._data.append(new_row, ignore_index=True)
self.endInsertRows()
def setData(self, index, value, role):
if role == Qt.EditRole:
self._data.iloc[index.row(), index.column()] = value
return True
def getData(self):
return self._data
def flags(self, index): # Qt was imported from PyQt4.QtCore
return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable
def headerData(self, col, orientation, role):
if orientation == Qt.Horizontal:
if role == Qt.DisplayRole:
return self._data.columns[col]
if role == Qt.FontRole:
font = QFont()
font.setBold(True)
return font
return None
'''class DataFrameModel(QtCore.QAbstractTableModel):
DtypeRole = QtCore.Qt.UserRole + 1000
ValueRole = QtCore.Qt.UserRole + 1001
def __init__(self, df=pd.DataFrame(), parent=None):
super(DataFrameModel, self).__init__(parent)
self._dataframe = df
def setDataFrame(self, dataframe):
self.beginResetModel()
self._dataframe = dataframe.copy()
self.endResetModel()
def dataFrame(self):
return self._dataframe
dataFrame = QtCore.pyqtProperty(pd.DataFrame, fget=dataFrame, fset=setDataFrame)
@QtCore.pyqtSlot(int, QtCore.Qt.Orientation, result=str)
def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = QtCore.Qt.DisplayRole):
if role == QtCore.Qt.DisplayRole:
if orientation == QtCore.Qt.Horizontal:
return self._dataframe.columns[section]
else:
return str(self._dataframe.index[section])
return QtCore.QVariant()
def rowCount(self, parent=QtCore.QModelIndex()):
if parent.isValid():
return 0
return len(self._dataframe.index)
def columnCount(self, parent=QtCore.QModelIndex()):
if parent.isValid():
return 0
return self._dataframe.columns.size
def data(self, index, role=QtCore.Qt.DisplayRole):
if not index.isValid() or not (0 <= index.row() < self.rowCount() \
and 0 <= index.column() < self.columnCount()):
return QtCore.QVariant()
row = self._dataframe.index[index.row()]
col = self._dataframe.columns[index.column()]
dt = self._dataframe[col].dtype
val = self._dataframe.iloc[row][col]
if role == QtCore.Qt.DisplayRole:
return str(val)
elif role == DataFrameModel.ValueRole:
return val
if role == DataFrameModel.DtypeRole:
return dt
return QtCore.QVariant()
def roleNames(self):
roles = {
QtCore.Qt.DisplayRole: b'display',
DataFrameModel.DtypeRole: b'dtype',
DataFrameModel.ValueRole: b'value'
}
return roles'''