refactor: переписаны модели (#52)

Closes #47
This commit is contained in:
2023-10-02 21:24:28 +03:00
committed by GitHub
parent a3f7c1ac0b
commit 86346b9c5b
8 changed files with 80 additions and 91 deletions

View File

@@ -1,59 +0,0 @@
import numpy as np
from PySide2 import QtCore
from PySide2.QtCore import Qt
class DataModel(QtCore.QAbstractTableModel):
def __init__(self, data=np.array([[]], dtype=np.float32)):
super().__init__()
self._data = data
def updateAllData(self, data):
self.layoutAboutToBeChanged.emit()
self._data = data
self.layoutChanged.emit()
def rowCount(self, index):
return self._data.shape[0]
def columnCount(self, index):
return self._data.shape[1]
def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...):
if role == Qt.DisplayRole:
# if orientation == Qt.Orientation.Horizontal:
if section == 0:
return 'Y'
return f'X{section}'
return None
def flags(self, index):
return Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable
def setData(self, index, value, role):
if role == Qt.EditRole:
try:
value = float(value)
except ValueError:
return False
self._data[index.row(), index.column()] = value
return True
return False
def getData(self):
return self._data
def getY(self):
return self._data[:, 0]
def data(self, index, role):
if role == Qt.DisplayRole or role == Qt.EditRole:
# ?
return float(self._data[index.row(), index.column()])
return None

View File

@@ -0,0 +1,30 @@
import numpy as np
from PySide2.QtCore import Qt
from statapp.models.ro_table_model import ROTableModel
class EditableTableModel(ROTableModel):
def __init__(self, data=np.array([[]], dtype=np.float32)):
super().__init__()
self._data = data
def flags(self, index):
return Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable
def setData(self, index, value, role):
if role == Qt.EditRole:
try:
value = float(value)
except ValueError:
return False
self._data[index.row(), index.column()] = value
return True
return False
def data(self, index, role):
if role == Qt.DisplayRole or role == Qt.EditRole:
return float(self._data[index.row(), index.column()])
return None

View File

@@ -0,0 +1,16 @@
import numpy as np
from PySide2.QtCore import Qt, QModelIndex
from statapp.models.editable_table_model import EditableTableModel
from statapp.models.utils import yx_header
class InputValuesModel(EditableTableModel):
def __init__(self, data=np.array([[]], dtype=np.float32)):
super().__init__(data)
def getHorizontalHeader(self):
return yx_header(self.rowCount(QModelIndex()))
def getY(self):
return self._data[:, 0]

View File

@@ -43,10 +43,6 @@ class ROTableModel(QtCore.QAbstractTableModel):
def getData(self):
return self._data
def getY(self):
return self._data[:, 0]
def data(self, index, role):
if role == Qt.DisplayRole:
return float(self._data[index.row(), index.column()])

2
statapp/models/utils.py Normal file
View File

@@ -0,0 +1,2 @@
def yx_header(count):
return ['Y'] + [f'X{i}' for i in range(1, count)]

View File

@@ -1,6 +1,7 @@
from PySide2.QtCore import QModelIndex
from statapp.models.ro_table_model import ROTableModel
from statapp.models.utils import yx_header
class VarianceAnalysisModel(ROTableModel):
@@ -11,4 +12,4 @@ class VarianceAnalysisModel(ROTableModel):
return ['Мат. ожидание', 'Среднекв. отклонение', 'Минимум', 'Максимум']
def getVerticalHeader(self):
return ['Y'] + [f'X{i}' for i in range(1, self.rowCount(QModelIndex()))]
return yx_header(self.rowCount(QModelIndex()))