diff --git a/UI/BlockParameterManageWidget.py b/UI/BlockParameterManageWidget.py index b883c2b..6d67eb3 100644 --- a/UI/BlockParameterManageWidget.py +++ b/UI/BlockParameterManageWidget.py @@ -77,7 +77,7 @@ class DynamicAddBlock(QHBoxLayout): pblockBtn.clicked.connect(lambda _, pbbtn = pblockBtn: self.switchParameterWidget(pbbtn)) self.addWidget(pblockBtn, 3) self.buttonlist.append(pblockBtn) - physicalBlockView = ParmView(PhysicalBlock) + physicalBlockView = ParmView(PhysicalBlock, i) self.blockViewlist.append(physicalBlockView) if i == 0: pblockBtn.setChecked(True) @@ -93,7 +93,7 @@ class DynamicAddBlock(QHBoxLayout): fblockBtn.clicked.connect(lambda _, fbbtn = fblockBtn: self.switchParameterWidget(fbbtn)) self.addWidget(fblockBtn, 3) self.buttonlist.append(fblockBtn) - aiFunctionBlockView = ParmView(AIFunctionBlock) + aiFunctionBlockView = ParmView(AIFunctionBlock, i) self.blockViewlist.append(aiFunctionBlockView) for i in range(tbNumber): @@ -119,7 +119,7 @@ class DynamicAddBlock(QHBoxLayout): self.addWidget(tbwidget, 5) self.buttonlist.append(tblockBtn) for tb in self.tbList: - tbBlockView = ParmView(globals()[tb]) + tbBlockView = ParmView(globals()[tb], i) self.blockViewlist.append(tbBlockView) self.parameterButtonGroup = QButtonGroup() @@ -130,7 +130,12 @@ class DynamicAddBlock(QHBoxLayout): self.parameStackWidget = QStackedWidget() for view in self.blockViewlist: self.parameStackWidget.addWidget(view) - + + def switchParameterWidget(self, buttonType): + + for index , button in enumerate(self.buttonlist): + if button == buttonType: + self.parameStackWidget.setCurrentIndex(index) def switchTbtype(self, index, combox, button): diff --git a/UI/BlockParameterModel.py b/UI/BlockParameterModel.py index 68dcd06..48c88d5 100644 --- a/UI/BlockParameterModel.py +++ b/UI/BlockParameterModel.py @@ -1,12 +1,14 @@ +import imp +from operator import imod import typing import re # from matplotlib.pyplot import box import qtawesome from PyQt5 import QtGui,QtCore,QtWidgets from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize -from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget, QPushButton, QMessageBox, QLineEdit, QComboBox, QStyledItemDelegate +from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget, QPushButton, QMessageBox, QLineEdit, QComboBox, QStyledItemDelegate, QVBoxLayout from UI.LoadingDataWidget import LoadingDataWidget - +from UI.ObjectTypeEditlayout import ObjectTypeEditlayout class VarTableModel(QAbstractTableModel): @@ -128,6 +130,7 @@ class VarTableModel(QAbstractTableModel): self.table.proxy.invalidate() + class VarButtonDelegate(QItemDelegate): """该类用于向单元格中添加按钮 任务表格""" def __init__(self, parent=None): @@ -140,9 +143,15 @@ class VarButtonDelegate(QItemDelegate): "", self.parent() ) - - if 'w' not in self.parent().model.datas[index.row()][4]: + + readORwirte = self.parent().model.datas[index.row()][4] + if 'w' not in readORwirte: return + dataType = self.parent().model.datas[index.row()][3] + objectType = self.parent().model.datas[index.row()][1] + + objectTypeEditlayout = ObjectTypeEditlayout(objectType, dataType) + editlineLayout = objectTypeEditlayout.initUI() startActionBtn.index = [index.row(), index.column()] startActionBtn.setToolTip('强制') @@ -155,15 +164,17 @@ class VarButtonDelegate(QItemDelegate): refreshButton.setToolTip('刷新') refreshButton.clicked.connect(self.refreshData) - parameEditline = QLineEdit() - parameEditline.setObjectName('parameEditline') + refreshButton.index = [index.row(), index.column()] + # parameEditline = QLineEdit() + # # parameEditline.setObjectName('parameEditline') boxLayout = QHBoxLayout() - boxLayout.addWidget(parameEditline) + # boxLayout.addWidget(parameEditline) + boxLayout.addLayout(editlineLayout) boxLayout.addWidget(startActionBtn) boxLayout.addWidget(refreshButton) - startActionBtn.clicked.connect(lambda: self.startAction(parameEditline)) + startActionBtn.clicked.connect(lambda: self.startAction(objectTypeEditlayout)) startActionBtn.setObjectName('startActionBtn') boxLayout.setContentsMargins(2, 0, 0, 2) @@ -174,23 +185,37 @@ class VarButtonDelegate(QItemDelegate): index, widget ) - + - def startAction(self, parameEditline): + def startAction(self, objectTypeEditlayout): sender = self.sender() model = self.parent().model # value = model.datas[sender.index[0]][sender.index[1]] - value = parameEditline.text() - pattern = re.compile(r'[^0-9\.-]+') - if not value or re.findall(pattern, str(value)): + values = objectTypeEditlayout.getEditlineValue() + if not values: reply = QMessageBox.question(self.parent(), - '警告', - "请输入强制值或数字", - QMessageBox.Yes) + '警告', + "请输入强制值或数字", + QMessageBox.Yes) return - + + for value in values: + # print(value) + pattern = re.compile(r'[^0-9\.-]+') + if not value or re.findall(pattern, str(value)): + reply = QMessageBox.question(self.parent(), + '警告', + "请输入强制值或数字", + QMessageBox.Yes) + return + index = model.datas[sender.index[0]][0] + print(index, self.parent().dbModel.__name__, self.parent().blcoknumber + 1) def refreshData(self): + sender = self.sender() + model = self.parent().model + index = model.datas[sender.index[0]][0] + print(index, self.parent().dbModel.__name__, self.parent().blcoknumber + 1) self.loadingDataWidget = LoadingDataWidget() self.loadingDataWidget.loadData() @@ -226,42 +251,3 @@ class ComboBoxDelegate(QStyledItemDelegate): def updateEditorGeometry(self, editor, option, index): editor.setGeometry(option.rect) - -class refreshButtonDelegate(QItemDelegate): - """该类用于向单元格中添加按钮 任务表格""" - def __init__(self, parent=None): - super(refreshButtonDelegate, self).__init__(parent) - - def paint(self, painter, option, index): - if not self.parent().indexWidget(index): - startActionBtn = QPushButton( - qtawesome.icon('mdi6.refresh', color='#1fbb6f'), - "", - self.parent() - ) - - if 'w' not in self.parent().model.datas[index.row()][4]: - return - - - startActionBtn.index = [index.row(), index.column()] - - parameEditline = QLineEdit() - parameEditline.setObjectName('parameEditline') - - boxLayout = QHBoxLayout() - boxLayout.addWidget(parameEditline) - boxLayout.addWidget(startActionBtn) - - startActionBtn.clicked.connect(lambda: self.startAction(parameEditline)) - startActionBtn.setObjectName('startActionBtn') - - boxLayout.setContentsMargins(2, 0, 0, 2) - boxLayout.setAlignment(Qt.AlignCenter) - widget = QWidget() - widget.setLayout(boxLayout) - self.parent().setIndexWidget( - index, - widget - ) - \ No newline at end of file diff --git a/UI/BlockParameterView.py b/UI/BlockParameterView.py index 7ed3df8..e08e8e7 100644 --- a/UI/BlockParameterView.py +++ b/UI/BlockParameterView.py @@ -23,9 +23,10 @@ class ParamsVHeader(QHeaderView): class ParmView(QTableView): - def __init__(self, dbModel = None): + def __init__(self, dbModel = None, blcoknumber = None): super().__init__() self.dbModel = dbModel + self.blcoknumber = blcoknumber self.setHeader() self.setupUi() self.setData() diff --git a/UI/ObjectTypeEditlayout.py b/UI/ObjectTypeEditlayout.py new file mode 100644 index 0000000..b8aecfb --- /dev/null +++ b/UI/ObjectTypeEditlayout.py @@ -0,0 +1,70 @@ + +from PyQt5.QtWidgets import QLineEdit, QVBoxLayout + +class ObjectTypeEditlayout(QVBoxLayout): + def __init__(self, objectType, dataType): + super().__init__() + self.objectType = objectType + self.dataType = dataType + self.editlineList = [] + + + def initUI(self): + self.editline1 = QLineEdit() + self.editline2 = QLineEdit() + self.editline3 = QLineEdit() + self.editline4 = QLineEdit() + self.editline1.setObjectName('parameEditline') + self.editline2.setObjectName('parameEditline') + self.editline3.setObjectName('parameEditline') + self.editline4.setObjectName('parameEditline') + + if self.objectType in ['SCALE_IN', 'SCALE_OUT', 'PV_SCALE']: + self.editline1.setPlaceholderText('请输入高标标度值') + self.editline2.setPlaceholderText('请输入低标标度值') + self.addWidget(self.editline1) + self.addWidget(self.editline2) + self.editlineList.extend([self.editline1, self.editline2]) + + if self.dataType == 'DS-36': + self.editline1.setPlaceholderText('请输入高标标度值') + self.editline2.setPlaceholderText('请输入低标标度值') + self.editline3.setPlaceholderText('请输入高标标度值') + self.editline4.setPlaceholderText('请输入高标标度值') + + self.addWidget(self.editline1) + self.addWidget(self.editline2) + self.addWidget(self.editline3) + self.addWidget(self.editline4) + self.editlineList.extend([self.editline1, self.editline2, self.editline3, self.editline4]) + + if self.dataType == 'DS-50': + self.editline1.setPlaceholderText('请输入仿真转换块值状况') + self.editline2.setPlaceholderText('请输入仿真转换块值') + self.editline3.setPlaceholderText('启用或者警用仿真转换块(0:禁用, <>0:启用)') + + self.addWidget(self.editline1) + self.addWidget(self.editline2) + self.addWidget(self.editline3) + self.editlineList.extend([self.editline1, self.editline2, self.editline3]) + + if self.dataType == '101': + self.editline1.setPlaceholderText('请输入值') + self.editline2.setPlaceholderText('请输入状态码') + self.addWidget(self.editline1) + self.addWidget(self.editline2) + self.editlineList.extend([self.editline1, self.editline2]) + + else: + self.editline1.setPlaceholderText('请输入值') + self.addWidget(self.editline1) + self.editlineList.append(self.editline1) + + return self + def getEditlineValue(self): + + valueList = [] + for editline in self.editlineList: + value = editline.text() + valueList.append(value) + return valueList \ No newline at end of file