You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
2 years ago
|
import typing
|
||
|
|
||
|
from PyQt5.QtCore import QAbstractTableModel, QModelIndex, QVariant, Qt
|
||
|
from PyQt5.QtGui import QColor, QBrush
|
||
|
|
||
|
from Agreement.CS.skio.worker.iomapping import get_bit_val
|
||
|
from utils.core import MainWindowConfig
|
||
|
|
||
|
|
||
|
class variableModel(QAbstractTableModel):
|
||
|
|
||
|
def __init__(self, header, data: list):
|
||
|
QAbstractTableModel.__init__(self, parent=None)
|
||
|
self.datas = data
|
||
|
self.header = header
|
||
|
self.forceList = set()
|
||
|
|
||
|
def append_data(self, x):
|
||
|
self.datas.append(x)
|
||
|
self.layoutChanged.emit()
|
||
|
|
||
|
def remove_row(self, row):
|
||
|
self.datas.pop(row)
|
||
|
self.layoutChanged.emit()
|
||
|
|
||
|
def rowCount(self, parent: QModelIndex = ...) -> int:
|
||
|
if len(self.datas) > 0:
|
||
|
return len(self.datas)
|
||
|
return 0
|
||
|
|
||
|
def columnCount(self, parent: QModelIndex = ...) -> int:
|
||
|
return len(self.header)
|
||
|
|
||
|
def get_data(self):
|
||
|
return self
|
||
|
|
||
|
def data(self, QModelIndex, role=None):
|
||
|
if role == Qt.BackgroundColorRole:
|
||
|
if self.datas[QModelIndex.row()][1] in self.forceList:
|
||
|
return QBrush(QColor(Qt.green))
|
||
|
if not QModelIndex.isValid():
|
||
|
print("行或者列有问题")
|
||
|
return QVariant()
|
||
|
if role != Qt.DisplayRole:
|
||
|
return QVariant()
|
||
|
if role == Qt.DisplayRole:
|
||
|
if QModelIndex.column() == 8:
|
||
|
if self.datas[QModelIndex.row()][7] != None:
|
||
|
return QVariant(
|
||
|
get_bit_val(MainWindowConfig.IOMapping.current_value[int(self.datas[QModelIndex.row()][5]) - 1][
|
||
|
int(self.datas[QModelIndex.row()][4]) - 1],
|
||
|
int(self.datas[QModelIndex.row()][7])))
|
||
|
else:
|
||
|
return QVariant(MainWindowConfig.IOMapping.current_value[int(self.datas[QModelIndex.row()][5]) - 1][
|
||
|
int(self.datas[QModelIndex.row()][4]) - 1])
|
||
|
else:
|
||
|
return QVariant(self.datas[QModelIndex.row()][QModelIndex.column()])
|
||
|
|
||
|
def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any:
|
||
|
if role != Qt.DisplayRole:
|
||
|
return None
|
||
|
|
||
|
|
||
|
if orientation == Qt.Horizontal:
|
||
|
return self.header[section]
|