diff --git a/UI/Main/Main.py b/UI/Main/Main.py index 26d3bf3..f6d6a9b 100644 --- a/UI/Main/Main.py +++ b/UI/Main/Main.py @@ -184,9 +184,13 @@ class MainWindow(QMainWindow): # self.setAttribute(Qt.WA_TranslucentBackground) # 设置窗口背景透明 self.setWindowFlag(Qt.FramelessWindowHint) + def exButtonClicked(self, index): + if not Globals.getValue('currentPro') and index != 0: + return -1 self.rightWidget.setCurrentIndex(index) - # print(index) + if index in [4, 5]: + return Globals.setValue('SearchWidget', index) @@ -195,39 +199,38 @@ class MainWindow(QMainWindow): if proType == -1: return elif proType in ['0', '1']: - self.rightWidget.setCurrentIndex(4) - self.TcpSettingWidget.setupUI() + if self.exButtonClicked(4) != -1: + self.TcpSettingWidget.setupUI() elif proType in ['2', '3']: - self.rightWidget.setCurrentIndex(5) - self.RtuSettingWidget.setupUI() + if self.exButtonClicked(5) != -1: + self.RtuSettingWidget.setupUI() def varShow(self): proType = Globals.getValue('currentProType') - # print(type(proType)) if proType == -1: return elif proType in ['0', '1', '2', '3']: - self.rightWidget.setCurrentIndex(1) + self.exButtonClicked(1) Globals.setValue('SearchWidget', 1) elif proType in ['4']: - self.rightWidget.setCurrentIndex(6) + self.exButtonClicked(6) Globals.setValue('SearchWidget', 6) elif proType in ['5']: - self.rightWidget.setCurrentIndex(7) + self.exButtonClicked(7) Globals.setValue('SearchWidget', 7) elif proType in ['6']: - self.rightWidget.setCurrentIndex(8) + self.exButtonClicked(8) Globals.setValue('SearchWidget', 8) elif proType in ['7']: - self.rightWidget.setCurrentIndex(9) + self.exButtonClicked(9) self.ffWidget.initDevView() Globals.setValue('SearchWidget', 9) elif proType in ['8']: - self.rightWidget.setCurrentIndex(10) + self.exButtonClicked(10) Globals.setValue('SearchWidget', 10) elif proType in ['9']: - self.rightWidget.setCurrentIndex(11) + self.exButtonClicked(11) Globals.setValue('SearchWidget', 11) #枚举参数 diff --git a/UI/ProjectManages/ProjectModel.py b/UI/ProjectManages/ProjectModel.py index 9f767c6..18ad7d5 100644 --- a/UI/ProjectManages/ProjectModel.py +++ b/UI/ProjectManages/ProjectModel.py @@ -233,14 +233,14 @@ class ProjectButtonDelegate(QItemDelegate): def exchange_action(self): # 切换工程按钮槽函数 sender = self.sender() - projectNumber = Globals.getValue('projectNumber') - if projectNumber == sender.index[0]: + projectName = Globals.getValue('currentPro') + if projectName == str(self.parent().model.datas[sender.index[0]][1]): reply = QMessageBox.question(self.parent(), '警告', "工程已打开", QMessageBox.Yes) return - print(sender.index[0]) + # print(sender.index[0]) if sender.index[0] in self.parent().model.editableList: reply = QMessageBox.question(self.parent(), '警告', @@ -255,8 +255,6 @@ class ProjectButtonDelegate(QItemDelegate): if proType in ['0', '1', '2', '3']: Globals.getValue('varTable').model.initTable() - # if lastproType in ['0', '1', '2', '3']: - # Globals.getValue('varTable').model.refreshComboBox() elif proType in ['4']: Globals.getValue('HartTable').model.initTable() elif proType in ['5']: @@ -269,7 +267,6 @@ class ProjectButtonDelegate(QItemDelegate): Globals.getValue('HartSimulateTable').model.initTable() Globals.getValue('userTable').model.initTable() Globals.getValue('HistoryWidget').exchangeProject() - Globals.setValue('projectNumber', sender.index[0]) self.parent().proxy.invalidate() @@ -297,7 +294,7 @@ class ProjectButtonDelegate(QItemDelegate): return if sender.oldName: - if ProjectManage.editProject(name = sender.oldName, Nname = name, des = des): + if ProjectManage.editProject(name = sender.oldName, Nname = name, des = des, proType = proType): reply = QMessageBox.question(self.parent(), '警告', "工程名相同", @@ -319,6 +316,7 @@ class ProjectButtonDelegate(QItemDelegate): proMes.append('') model.insert_data(proMes, rowIndex) model.remove_row(rowIndex + 1) + self.parent().proxy.invalidate() def delete_action(self): @@ -327,6 +325,8 @@ class ProjectButtonDelegate(QItemDelegate): name = str(model.datas[sender.index[0]][1]) ProjectManage.deleteProject(name = name) model.remove_row(sender.index[0]) + if name == Globals.getValue('currentPro'): + Globals.setValue('currentPro', None) class ProTypeBoxDelegate(ProjectButtonDelegate): def __init__(self, parent=None): @@ -341,6 +341,7 @@ class ProTypeBoxDelegate(ProjectButtonDelegate): cmBox = getattr(self, comboBox) item = ['MODBUSTCP 主站模式', 'MODBUSTCP 从站模式', 'MODBUSRTU 主站模式', 'MODBUSRTU 从站模式','HART', 'TCRTD', 'AO/DO/PI', 'FF', 'FF模拟', 'HART模拟'] + # item = ['MODBUSTCP 主站模式', 'MODBUSTCP 从站模式', 'MODBUSRTU 主站模式', 'MODBUSRTU 从站模式'] cmBox.addItems(item) cmBox.index = [index.row(), index.column()] if self.parent().model.datas[index.row()][index.column()] in range(10): diff --git a/UI/TrendManage/ActualTrendWidget.py b/UI/TrendManage/ActualTrendWidget.py index e2c20ce..e6c1586 100644 --- a/UI/TrendManage/ActualTrendWidget.py +++ b/UI/TrendManage/ActualTrendWidget.py @@ -53,14 +53,7 @@ class ActualTrend(QtWidgets.QMainWindow): # self.n += 1 varName = self.varName varMM = ModbusVarManage.getByName(varName) - minY = -100 - maxY = 100 - - - if varMM: - minY, maxY = varMM[-2], varMM[-1] - minY = float(minY) - maxY = float(maxY) + self._dynamic_ax.clear() acttime = time.strftime('%H:%M:%S', time.localtime(time.time())) @@ -81,6 +74,13 @@ class ActualTrend(QtWidgets.QMainWindow): except Exception as e: print(e) + if not varMM[-2] and not varMM[-1]: + minY = min(self.yQueue.list) - 5 + maxY = max(self.yQueue.list) + 5 + else: + minY = float(varMM[-2]) - float(5) + maxY = float(varMM[-1]) + float(5) + name_list = self.xQueue.list value_list = np.array(self.yQueue.list) pos_list = np.arange(len(name_list)) diff --git a/UI/TrendManage/TrendWidget.py b/UI/TrendManage/TrendWidget.py index 7153423..c314be5 100644 --- a/UI/TrendManage/TrendWidget.py +++ b/UI/TrendManage/TrendWidget.py @@ -183,6 +183,8 @@ class TrendWidgets(QWidget): # 获取所有的趋势表 mems = InfluxMem.get_all() self.proName = Globals.getValue('currentPro') + if not self.proName: + return self.timeBox.clear() if mems is 'Error': return diff --git a/UI/VarManages/VarWidget.py b/UI/VarManages/VarWidget.py index c03295d..b0fac44 100644 --- a/UI/VarManages/VarWidget.py +++ b/UI/VarManages/VarWidget.py @@ -268,7 +268,8 @@ class VarWidgets(QtWidgets.QWidget): path = QFileDialog.getOpenFileName(self, "Choose File", "./","VarExcel (*.xlsx);;All Files (*)")[0] if not path: return - ModbusVarManage.importModbusVar(path) + result = ModbusVarManage.importModbusVar(path) + QMessageBox.question(self.parent(), '提示', result, QMessageBox.Yes) self.varView.model.initTable() def exportVar(self): diff --git a/model/ProjectModel/ProjectManage.py b/model/ProjectModel/ProjectManage.py index 2ab20c3..3194f2e 100644 --- a/model/ProjectModel/ProjectManage.py +++ b/model/ProjectModel/ProjectManage.py @@ -111,13 +111,16 @@ class ProjectManage(object): # print(name) # print(Globals.getValue('currentPro')) Client.initDB() - if name == Globals.getValue('currentPro'): - Globals.getValue('currentProDB').close() + if not Project.getByName(name): print('不存在的工程', Project.getByName(name)) return try: - shutil.rmtree(os.path.join('project', name)) + if name == Globals.getValue('currentPro'): + self.closePopen() + Globals.getValue('currentProDB').close() + Globals.setValue('currentPro', None) + QTimer.singleShot(1000, lambda:shutil.rmtree(os.path.join('project', name))) except OSError as e: print(e) Project.deleteProject(name = name) @@ -150,6 +153,8 @@ class ProjectManage(object): if proType == '7': Globals.getValue('FFThread').start() + + # initDB @classmethod def closePopen(self): @@ -260,20 +265,46 @@ class ProjectManage(object): return historyDB @classmethod - def editProject(self, name, Nname, des): + def editProject(self, name, Nname, des, proType): # 修改工程信息 name = str(name) Nname = str(Nname) des = str(des) Client.initDB() - if Project.getByName(Nname): + + + if name == Nname: + if name == Globals.getValue('currentPro'): + self.editCurProject(name, Nname, proType, des) + return + Project.update(projectName = Nname, description = des).where(Project.projectName == name).execute() + QTimer.singleShot(1000, lambda:os.rename(os.path.join('project', name), os.path.join('project', Nname))) + elif Project.getByName(Nname): return '已有同名工程' elif not Project.getByName(name): print('不存在的工程') return else: + if name == Globals.getValue('currentPro'): + self.editCurProject(name, Nname, proType, des) + return Project.update(projectName = Nname, description = des).where(Project.projectName == name).execute() - os.rename(os.path.join('project', name), os.path.join('project', Nname)) + QTimer.singleShot(1000, lambda:os.rename(os.path.join('project', name), os.path.join('project', Nname))) + + @classmethod + def editCurProject(self, name, Nname, proType, des): + self.closePopen() + Globals.getValue('currentProDB').close() + Project.update(projectName = Nname, description = des).where(Project.projectName == name).execute() + QTimer.singleShot(1000, lambda:self.reNameCurProDir(name, Nname, proType)) + Globals.getValue('MainWindow').varWidget.initIcon() + Globals.setValue('currentPro', Nname) + + @classmethod + def reNameCurProDir(self, name, Nname, proType): + os.rename(os.path.join('project', name), os.path.join('project', Nname)) + self.switchProject(Nname, proType) + @classmethod def getAllProject(self): diff --git a/model/ProjectModel/VarManage.py b/model/ProjectModel/VarManage.py index 06c3579..6b00387 100644 --- a/model/ProjectModel/VarManage.py +++ b/model/ProjectModel/VarManage.py @@ -44,26 +44,39 @@ class ModbusVarManage(object): maxIndex = index # print(IDIndex, slaveIndex, nameIndex, desIndex, typeIndex, addrIndex, minIndex, maxIndex) if IDIndex == None or slaveIndex == None or nameIndex == None or desIndex == None or typeIndex == None or addrIndex == None or minIndex == None or maxIndex == None: - print('表头错误') + # print('表头错误') return '表头错误' + errorConList = [] for index, row in enumerate(list(ws.iter_rows())[1:]): try: l = [str(x.value) for x in row] varName = l[nameIndex] varType = l[typeIndex] - des = l[desIndex] + des = '' if l[desIndex] == 'None' else l[desIndex] address = l[addrIndex] slaveID = l[slaveIndex] - min = l[minIndex] - max = l[maxIndex] + min = '' if l[minIndex] == 'None' else l[minIndex] + max = '' if l[maxIndex] == 'None' else l[maxIndex] + if {varName, varType, address, slaveID} & {'None'}: + errorConList.append('第{}行导入失败,有关键字段为空'.format(str(index + 1))) + continue + + if varType not in ['0', '1', '3', '4']: + errorConList.append('第{}行导入失败,变量类型有误'.format(str(index + 1))) + continue if ModBusVar.getByName(varName): ModBusVar.update(varType = varType, description = des, address = address, slaveID = slaveID, min = min, max = max, order = 'int').where(ModBusVar.varName == varName).execute() else: ModBusVarModel = ModBusVar() ModBusVarModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = 'int') except Exception as e: - print(e) - print('第{}行导入出错'.format(index + 1)) + errorConList.append('第{}行导入失败,{}'.format(str(index + 1), str(e))) + continue + else: + if errorConList: + return '\r\n'.join(errorConList) + else: + return '导入成功' @classmethod def exportModbusVar(self, excelPath):