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.

165 lines
6.6 KiB
Python

import typing
import qtawesome
from PyQt5 import QtGui,QtCore,QtWidgets
from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize
import sys
from PyQt5.QtWidgets import (QApplication, QHeaderView, QStyle, QStyleOptionButton, QTableView, QAbstractItemView)
from PyQt5.QtCore import (pyqtSignal, Qt, QAbstractTableModel, QModelIndex, QRect, QVariant)
from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget, QTableView
from .ModbusModel import *
from .AnalogModel import *
from .HartModel import *
from .HartSimulateModel import *
from .TCRTDModel import *
from .FFSimulateModel import *
from UI.VarManages.Thread import RTDTCThread, AnalogThread, FFSimulateThread, 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, parent=None):
super(VarTableView, self).__init__(parent)
self.parent = parent
self.setHeader()
self.setupUi()
def setHeader(self):
self.setItemDelegateForColumn(10, VarButtonDelegate(self))
self.setItemDelegateForColumn(5, ModbusTypeBox(self))
self.model = ModBusTCPSlaveModel(['ID', '强制值', '当前值', '变量名', '变量描述', '变量类型', '从站地址', '寄存器地址', '工程量下限', '工程量上限', '操作'],[], 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 FFSimulateTableView(VarTableView):
def __init__(self, parent=None):
super(FFSimulateTableView, self).__init__(parent)
self.valueList = []
# self.realList = [0] * 8 + [0] * 8 + [0] * 8
self.workThread = FFSimulateThread(self)
Globals.setValue('FFSimulateThread', self.workThread)
# print(self.workThread)
def setHeader(self):
self.setItemDelegateForColumn(6, FFSimulateButtonDelegate(self))
self.model = FFSimulateModel(['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)