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.
		
		
		
		
		
			
		
			
				
	
	
		
			192 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			192 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Python
		
	
| import qtawesome
 | |
| from PyQt5 import QtGui
 | |
| from PyQt5.QtCore import Qt, QVariant, QSize
 | |
| from PyQt5.QtWidgets import QHBoxLayout, QWidget, QMessageBox, QComboBox
 | |
| from model.ProjectModel.VarManage import *
 | |
| from UI.VarManages.ModbusModel import *
 | |
| from utils import Globals
 | |
| import re
 | |
| 
 | |
| class HartSimulateModel(VarTableModel):
 | |
|     def __init__(self, header, data: list, table = None):
 | |
|         '''
 | |
|         header : 表头变量
 | |
|         data : 表格内容
 | |
|         table : 缺省参数
 | |
|         '''
 | |
|         VarTableModel.__init__(self, header, data, table = table)
 | |
| 
 | |
|     def initTable(self):
 | |
|         self.datas = []
 | |
| 
 | |
|         varDatas = HartSimulateVarManage.getAllVar()
 | |
| 
 | |
| 
 | |
|         if not varDatas:
 | |
|             # self.layoutChanged.emit()
 | |
|             self.table.proxy.invalidate()
 | |
|             return
 | |
|         for x in varDatas:
 | |
|             for i in range(3, 9):
 | |
|                 x.insert(i, '')
 | |
|             x.append('')
 | |
|             self.datas.append(x)
 | |
|         self.checkList = ['Unchecked'] * len(self.datas)
 | |
|         # self.layoutChanged.emit()
 | |
|         self.table.proxy.invalidate()
 | |
| 
 | |
|     def data(self, QModelIndex, role=None):
 | |
|         # print(Qt.__dict__.items())
 | |
|         if role == Qt.TextAlignmentRole:
 | |
|             return Qt.AlignCenter
 | |
|         if not QModelIndex.isValid():
 | |
|             print("行或者列有问题")
 | |
|             return QVariant()
 | |
|         if role == Qt.BackgroundColorRole:
 | |
|             if QModelIndex.row() % 2 == 0 and self.datas[QModelIndex.row()][1] not in Globals.getValue('forceVars'):
 | |
|                 return QtGui.QColor('#EFEFEF')
 | |
|             if self.datas[QModelIndex.row()][1] in Globals.getValue('forceVars'):
 | |
|                 return QtGui.QColor('#00FF7F')
 | |
|         if role == Qt.TextColorRole:
 | |
|             return QtGui.QColor('#1A1A1A')
 | |
|         if role == Qt.CheckStateRole:
 | |
|             if QModelIndex.column() == 0:
 | |
|                 return Qt.Checked if self.checkList[QModelIndex.row()] == 'Checked' else Qt.Unchecked
 | |
|             else:
 | |
|                 return None
 | |
|         if role == Qt.ToolTipRole:
 | |
|             if QModelIndex.column() == 0:
 | |
|                 return self.checkList[QModelIndex.row()]
 | |
|         if role == Qt.DisplayRole or role == Qt.EditRole:
 | |
|             if QModelIndex.row() in self.editableList:
 | |
|                 return self.datas[QModelIndex.row()][QModelIndex.column()]
 | |
|         if role != Qt.DisplayRole:
 | |
|             return QVariant()
 | |
|     
 | |
|         return QVariant(self.datas[QModelIndex.row()][QModelIndex.column()])
 | |
| 
 | |
|     def flags(self, index):
 | |
|         if index.column() == 0:
 | |
|             return Qt.ItemIsEnabled | Qt.ItemIsUserCheckable
 | |
|         if index.row() in self.editableList and index.column():
 | |
|             return Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsEditable
 | |
|         if index.column() in range(3, 9):
 | |
|             return Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsEditable
 | |
|         return Qt.ItemIsEnabled
 | |
| 
 | |
| 
 | |
| class HartSimulateButtonDelegate(VarButtonDelegate):
 | |
|     """该类用于向单元格中添加按钮  任务表格"""
 | |
| 
 | |
|     def __init__(self, parent=None):
 | |
|         super(HartSimulateButtonDelegate, self).__init__(parent)
 | |
| 
 | |
|     def paint(self, painter, option, index):
 | |
|         if not self.parent().indexWidget(index):
 | |
|             button1 = QPushButton(
 | |
|                 qtawesome.icon('fa.play', color='#1fbb6f'),
 | |
|                 "",
 | |
|                 self.parent(),
 | |
|                 clicked=self.start_action
 | |
|             )
 | |
|             button1.setIconSize(QSize(15, 15))
 | |
|             button1.setStyleSheet("border:none;")
 | |
|             button2 = QPushButton(
 | |
|                 qtawesome.icon('fa.pencil', color='#4c8cf2'),
 | |
|                 "",
 | |
|                 self.parent(),
 | |
|                 clicked=self.edit_action
 | |
|             )
 | |
| 
 | |
|             button1.clicked.connect(self.start_action)
 | |
|             button2.clicked.connect(self.edit_action)
 | |
| 
 | |
|             button2.oldName = False
 | |
|             button2.isEdit = True
 | |
|             button1.index = [index.row(), index.column()]
 | |
|             button2.index = [index.row(), index.column()]
 | |
| 
 | |
|             data = self.parent().model.datas[index.row()]
 | |
|             for x in data[:-1]:
 | |
|                 if x != '':
 | |
|                     break
 | |
|             else:
 | |
|                 button2.isEdit = False
 | |
|                 button2.setIcon(qtawesome.icon('fa.save', color='#1fbb6f'))
 | |
|                 self.parent().model.editableList.append(button2.index[0])
 | |
|             h_box_layout = QHBoxLayout()
 | |
|             h_box_layout.addWidget(button1)
 | |
|             h_box_layout.setContentsMargins(2, 0, 0, 2)
 | |
|             h_box_layout.setAlignment(Qt.AlignCenter)
 | |
|             widget = QWidget()
 | |
|             widget.setLayout(h_box_layout)
 | |
|             self.parent().setIndexWidget(
 | |
|                 index,
 | |
|                 widget
 | |
|             )
 | |
| 
 | |
|     def edit_action(self):
 | |
|         sender = self.sender()
 | |
|         model = self.parent().model
 | |
|         if sender.isEdit:
 | |
|             sender.setIcon(qtawesome.icon('fa.save', color='#1fbb6f'))
 | |
|             sender.isEdit = False
 | |
|             sender.oldName = model.datas[sender.index[0]][1]
 | |
|             model.editableList.append(sender.index[0])
 | |
|         else:
 | |
|             varMes = model.datas[sender.index[0]]
 | |
|             name, des = str(varMes[1]), str(varMes[2])
 | |
|             # print(name, des)
 | |
|             if not name :
 | |
|                 reply = QMessageBox.question(self.parent(),
 | |
|                                      '警告',
 | |
|                                      "有字段为空",
 | |
|                                      QMessageBox.Yes)
 | |
|                 return
 | |
|             sender.isEdit = True
 | |
|             model.editableList.remove(sender.index[0])
 | |
|             if sender.oldName:
 | |
|                 HartSimulateVarManage.editVar(name = sender.oldName, Nname = name, des = des)
 | |
|             else:
 | |
|                 HartSimulateVarManage.createVar(varName = name, des = des)
 | |
|             sender.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2'))
 | |
|             rowIndex = sender.index[0]
 | |
|             varMes = HartSimulateVarManage.getByName(name)
 | |
|             model.insert_data(varMes, rowIndex)
 | |
|             model.remove_row(rowIndex + 1)
 | |
| 
 | |
|     def start_action(self):
 | |
|         sender = self.sender()
 | |
|         model = self.parent().model
 | |
|         value1 = model.datas[sender.index[0]][3]
 | |
|         minSpan = model.datas[sender.index[0]][7]
 | |
|         maxSpan = model.datas[sender.index[0]][8]
 | |
|         writeList = [str(x) for x in model.datas[sender.index[0]][3:9]]
 | |
|         pattern = re.compile(r'[^0-9\.-]+')
 | |
|         if minSpan and maxSpan and value1 and not re.findall(pattern, str(value1) + str(minSpan) + str(maxSpan)):
 | |
|             if float(value1) < float(minSpan) or float(value1) > float(maxSpan):
 | |
|                 reply = QMessageBox.question(self.parent(),
 | |
|                                              '警告',
 | |
|                                              "主变量超出量程",
 | |
|                                              QMessageBox.Yes)
 | |
|                 return
 | |
|         for index, value in enumerate(writeList):
 | |
|             if re.findall(pattern, value):
 | |
|                 reply = QMessageBox.question(self.parent(),
 | |
|                                              '警告',
 | |
|                                              "请输入强制值或数字",
 | |
|                                              QMessageBox.Yes)
 | |
|                 return
 | |
| 
 | |
|             try:
 | |
|                 self.parent().workThread.HartSimulate.writeValue(index, value)
 | |
|             except:
 | |
|                 reply = QMessageBox.question(self.parent(),
 | |
|                                                  '警告',
 | |
|                                                  "请先打开通讯",
 | |
|                                                  QMessageBox.Yes)
 | |
|                 return
 | |
| 
 | |
|         forceVars = Globals.getValue('forceVars')
 | |
|         forceVars.add(model.datas[sender.index[0]][1])
 | |
|         Globals.setValue('forceVars', forceVars) |