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.

152 lines
5.9 KiB
Python

from PyQt5 import QtCore
from PyQt5.QtWidgets import (QHeaderView, QStyle, QStyleOptionButton, QTableView, QAbstractItemView)
from PyQt5.QtCore import (pyqtSignal, Qt, QRect)
from PyQt5.QtWidgets import QTableView
from .ModbusModel import *
from .AnalogModel import *
from .HartModel import *
from .HartSimulateModel import *
from .TCRTDModel import *
from UI.VarManages.Thread import RTDTCThread, AnalogThread, HartSimulateThread
from utils import Globals
class CheckBoxHeader(QHeaderView):
checkClicked = pyqtSignal(bool)
sectionClicked = pyqtSignal(int)
_x_offset = 4
_y_offset = 0
_width = 25
_height = 25
def __init__(self, orientation=Qt.Horizontal, parent=None, changeY = None):
self.isOn = False
self.changeY = changeY
super(CheckBoxHeader, self).__init__(orientation, parent)
def paintSection(self, painter, rect, logicalIndex):
painter.save()
super(CheckBoxHeader, self).paintSection(painter, rect, logicalIndex)
painter.restore()
if self.changeY:
self._y_offset = int((rect.height()-self._width)/2.) + 4
else:
self._y_offset = int((rect.height()-self._width)/2.)
if logicalIndex == 0:
option = QStyleOptionButton()
option.rect = QRect(rect.x() + self._x_offset, rect.y() + self._y_offset, self._width, self._height)
option.state = QStyle.State_Enabled | QStyle.State_Active
if self.isOn:
option.state |= QStyle.State_On
else:
option.state |= QStyle.State_Off
self.style().drawControl(QStyle.CE_CheckBox, option, painter)
def mousePressEvent(self, event):
index = self.logicalIndexAt(event.pos())
if 0 == index:
x = self.sectionPosition(index)
if x + self._x_offset < event.pos().x() < x + self._x_offset + self._width and self._y_offset < event.pos().y() < self._y_offset + self._height:
if self.isOn:
self.isOn = False
else:
self.isOn = True
self.checkClicked.emit(self.isOn)
self.update()
else:
self.sectionClicked.emit(index)
super(CheckBoxHeader, self).mousePressEvent(event)
class VarTableView(QTableView):
def __init__(self, modbusType, parent=None):
super(VarTableView, self).__init__(parent)
self.parent = parent
self.modbusType = modbusType
self.setHeader()
self.setupUi()
def setHeader(self):
self.setItemDelegateForColumn(10, VarButtonDelegate(self))
self.setItemDelegateForColumn(5, ModbusTypeBox(self))
self.model = VarTableModel(['ID', '强制值', '当前值', '变量名', '变量描述', '变量类型',
'从站地址', '寄存器地址', '工程量下限', '工程量上限', '操作'],
[], modbusType = self.modbusType, table = self)
def setupUi(self):
self.setShowGrid(True)
self.setAlternatingRowColors(True)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.setModel(self.model)
self.header = CheckBoxHeader()
self.header.setStretchLastSection(True)
self.header.setSectionResizeMode(QHeaderView.Stretch)
self.header.checkClicked.connect(self.model.headerClick)
self.setHorizontalHeader(self.header)
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.header.setSectionResizeMode(0, QHeaderView.Fixed)
self.header.resizeSection(0, 70)
class HartTableView(VarTableView):
def __init__(self, parent=None):
super(HartTableView, self).__init__(parent)
def setHeader(self):
self.setItemDelegateForColumn(8, HartButtonDelegate(self))
self.model = HartModel([' ID', '仪器名', '描述', '电流值', '参数1', '参数2','参数3', '参数4','操作'], [], table=self)
class TcRtdTableView(VarTableView):
def __init__(self, parent=None):
super(TcRtdTableView, self).__init__(parent)
self.setItemDelegateForColumn(5, TcRtdTypeDelegate(self))
self.valueList = [0] * 16
self.mvList = [0] * 16
self.workThread = RTDTCThread(self)
Globals.setValue('RTDTCThread', self.workThread)
# self.workThread.getValueList.connect(self.getValueList)
def setHeader(self):
self.setItemDelegateForColumn(9, TcRtdButtonDelegate(self))
self.model = TcRtdModel(['ID', '强制值', '当前值', '变量名', '变量描述', '变量类型', '工程量下限', '工程量上限', '补偿值', '操作'], [], table=self)
class AnalogTableView(VarTableView):
def __init__(self, parent=None):
super(AnalogTableView, self).__init__(parent)
self.valueList = [0] * 8 + [0] * 8 + [0] * 8
self.realList = [0] * 8 + [0] * 8 + [0] * 8
self.workThread = AnalogThread(self)
Globals.setValue('AnalogThread', self.workThread)
def setHeader(self):
self.setItemDelegateForColumn(8, AnalogButtonDelegate(self))
self.model = AnalogModel(['ID', '强制值', '当前值', '变量名', '变量描述', '变量类型', '工程量下限', '工程量上限', '操作'], [], table=self)
class HartSimulateTableView(VarTableView):
def __init__(self, parent=None):
super(HartSimulateTableView, self).__init__(parent)
self.valueList = []
# self.realList = [0] * 8 + [0] * 8 + [0] * 8
self.workThread = HartSimulateThread(self)
Globals.setValue('HartSimulateThread', self.workThread)
def setHeader(self):
self.setItemDelegateForColumn(9, HartSimulateButtonDelegate(self))
self.model = HartSimulateModel([' ID', '仪器名', '描述', '主变量', '过程变量1', '过程变量2', '过程变量3', '工程量下限', '工程量上限', '操作'], [], table=self)