from PyQt5.QtWidgets import QWidget, QLabel, QLineEdit, QPushButton, QFrame, QHBoxLayout, QVBoxLayout, QSplitter, \ QMessageBox from utils.WorkModels import PointModel from utils.core import MainWindowConfig class varCoercion(QWidget): def __init__(self, var, queryModel, row): super().__init__() self.var = var self.queryModel = queryModel self.row = row self.setWindowTitle('变量强制 %s' % self.var.sig_name) self.label = QLabel('设置变量 %s' % self.var.sig_name) self.label1 = QLabel('类型 %s' % self.var.sig_type) self.line_edit = QLineEdit(self) self.btn_OK = QPushButton('OK') self.btn_OK.clicked.connect(self.isokbtn) self.btn_Cancel = QPushButton('Cancel') self.btn_Cancel.clicked.connect(self.close) self.line = QFrame(self) self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.line.setObjectName("line") hbox1 = QHBoxLayout() hbox2 = QHBoxLayout() hbox3 = QHBoxLayout() hbox4 = QHBoxLayout() layout = QVBoxLayout() hbox1.addWidget(QSplitter()) hbox1.addWidget(self.btn_OK) hbox1.addWidget(self.btn_Cancel) hbox2.addWidget(self.label) hbox2.addWidget(QSplitter()) hbox3.addWidget(self.label1) hbox3.addWidget(QSplitter()) layout.addLayout(hbox2) layout.addLayout(hbox3) layout.addLayout(hbox4) layout.addWidget(self.line_edit) layout.addWidget(self.line) layout.addLayout(hbox1) self.setLayout(layout) def getRealAO(self, value, carID, channel): i = PointModel.select().where(PointModel.reg == carID, PointModel.channel == channel)[0] highValue = i.rhi lowValue = i.rlo res = 16 * (value - lowValue) / (highValue - lowValue) + 4 return res / 1000 def keyPressEvent(self, event): # 这里event.key()显示的是按键的编码 if str(event.key()) == '16777220': # 回车 self.isokbtn() # def isokbtn(self): # text = self.line_edit.text() # if self.var.sig_type == 'AO': # try: # var = float(text) # except Exception: # QMessageBox.information( # self, # "信息提示", # "请输入浮点数", # QMessageBox.Yes | QMessageBox.No # ) # return # MainWindowConfig.IOMapping.current_value[int(self.var.reg) - 1][int(self.var.channel) - 1] = self.getRealAO( # var, self.var.reg, self.var.channel) # MainWindowConfig.IOMapping.setAOcurrent() # elif self.var.sig_type == 'PT100': # try: # var = float(text) # var = pt100_t2r(var) # except Exception: # QMessageBox.information( # self, # "信息提示", # "请输入浮点数", # QMessageBox.Yes | QMessageBox.No # ) # return # MainWindowConfig.IOMapping.current_value[int(self.var.reg) - 1][int(self.var.channel) - 1] = var # MainWindowConfig.IOMapping.setAOcurrent() # # elif self.var.sig_type == 'TC/T': # try: # var = float(text) # var = RTD_T(var) # except Exception: # QMessageBox.information( # self, # "信息提示", # "请输入浮点数", # QMessageBox.Yes | QMessageBox.No # ) # return # MainWindowConfig.IOMapping.current_value[int(self.var.reg) - 1][int(self.var.channel) - 1] = var # MainWindowConfig.IOMapping.setAOcurrent() # # elif self.var.sig_type == 'DO': # try: # if int(text) not in [0, 1]: # QMessageBox.information( # self, # "信息提示", # "请输入0或1", # QMessageBox.Yes | QMessageBox.No # ) # val = MainWindowConfig.IOMapping.current_value[int(self.var.reg) - 1][int(self.var.channel) - 1] # MainWindowConfig.IOMapping.current_value[ # int(self.var.reg) - 1][int(self.var.channel) - 1] = set_bit_val(byte=val, val=int(text), # index=int(self.var.offset)) # MainWindowConfig.IOMapping.setDIcurrent() # except Exception as e: # QMessageBox.information( # self, # "信息提示", # "请输入0或1", # QMessageBox.Yes | QMessageBox.No # ) # # else: # return # self.queryModel.forceList.add(self.var.sig_name) # self.queryModel.datas[self.row]['force_value'] = text # self.close() def isokbtn(self): text = self.line_edit.text() if self.var.sig_type in ('AO', 'DO', 'TC/T', 'PT100'): self.queryModel.datas[self.row]['force_value'] = text MainWindowConfig.IOMapping.force_value[self.var.sig_name] = float(text) self.close() else: QMessageBox.information( self, "信息提示", "该类型无法强制", QMessageBox.Yes | QMessageBox.No )