diff --git a/Static/Main.qss b/Static/Main.qss index cef233e..13b60c7 100644 --- a/Static/Main.qss +++ b/Static/Main.qss @@ -10,6 +10,8 @@ QComboBox#tbcombox{ border: none; + height: 43px; + padding-left: 5px; border-radius: 5px; @@ -28,7 +30,7 @@ QComboBox#tbcombox::drop-down{ background-color: #f0f0f0; - width: 15px; + width: 20px; border:none; @@ -247,8 +249,8 @@ QPushButton#confirmButton, QPushButton#exitButton{ QPushButton#parameBtn{ border: none; - - width: 54.75px; +/* + width: 54.75px; */ height: 40px; @@ -289,6 +291,55 @@ QPushButton#parameBtn:checked{ } +QPushButton#tbparameBtn{ + + border: none; + + width: 54.75px; + + height: 40px; + + background-color: #f0f0f0; + + /* border-radius: 5px; */ + + border-top-left-radius: 5px; + + border-bottom-left-radius: 5px; + + color: #0e0000; + + font-family: ".SFNSDisplay-Medium"; + + font-size: 17px; + + font-weight: 520; + + + +} + + +QPushButton#tbparameBtn:hover{ + + font: bold; + + border: none; + + background-color: #007bff; + + margin-bottom: -1px; + +} + +QPushButton#tbparameBtn:checked{ + + background-color: #007bff; + + color: #f7f6f6; + +} + QPushButton#startActionBtn:hover{ font: bold; diff --git a/Static/PA块信息表.xlsx b/Static/PA块信息表.xlsx index 7f944c1..7d93c2a 100644 Binary files a/Static/PA块信息表.xlsx and b/Static/PA块信息表.xlsx differ diff --git a/Static/UnitTable.xlsx b/Static/UnitTable.xlsx new file mode 100644 index 0000000..db66608 Binary files /dev/null and b/Static/UnitTable.xlsx differ diff --git a/UI/BlockParameterManageWidget.py b/UI/BlockParameterManageWidget.py index a7c8ca5..b883c2b 100644 --- a/UI/BlockParameterManageWidget.py +++ b/UI/BlockParameterManageWidget.py @@ -1,5 +1,7 @@ +from ast import match_case from tkinter.ttk import Combobox +from numpy import mat import qtawesome from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QStyledItemDelegate, QStyle, QComboBox, QMessageBox, QPushButton,QStackedWidget, QLineEdit, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QSplitter, QButtonGroup @@ -28,7 +30,8 @@ class TbCombox(QComboBox): def initUI(self): # 创建ComboBox - self.addItems(["选项很长很长很长", "选项2", "选项3"]) + self.addItems(["压力转换块 ", "温度转换块", "物位转换块", "流量转换块"]) + self.setEditable(True) # 设置为可编辑以应用样式表隐藏文本 self.setObjectName('tbcombox') # 设置样式隐藏文本 @@ -44,8 +47,8 @@ class TbCombox(QComboBox): self.setFixedSize(30, 40) # 确保下拉列表宽度适应最长项 - max_width = max(self.fontMetrics().width(self.itemText(i)) for i in range(self.count())) - self.view().setMinimumWidth(max_width) + # max_width = max(self.fontMetrics().width(self.itemText(i)) for i in range(self.count())) + self.view().setMinimumWidth(100) @@ -55,6 +58,7 @@ class DynamicAddBlock(QHBoxLayout): self.blocklist = blocklist self.buttonlist = [] self.blockViewlist = [] + self.tbList = ['PressureTranslationBlock', 'TemperatureTranslationBlock', 'LevelTranslationBlock', 'FlowTranslationBlock'] #存放四个转换块 self.initUI() def initUI(self): @@ -66,12 +70,12 @@ class DynamicAddBlock(QHBoxLayout): pblockBtn = QPushButton('物理块') pblockBtn.setCheckable(True) - pblockBtn.setFixedSize(90, 43) + # pblockBtn.setFixedSize(90, 43) pblockBtn.setObjectName("parameBtn") pblockBtn.setIcon(qtawesome.icon('fa.th-large', color='#1fbb6f')) # pblockBtn.setCheckable(True) pblockBtn.clicked.connect(lambda _, pbbtn = pblockBtn: self.switchParameterWidget(pbbtn)) - self.addWidget(pblockBtn) + self.addWidget(pblockBtn, 3) self.buttonlist.append(pblockBtn) physicalBlockView = ParmView(PhysicalBlock) self.blockViewlist.append(physicalBlockView) @@ -82,16 +86,16 @@ class DynamicAddBlock(QHBoxLayout): for i in range(fbNumber): fblockBtn = QPushButton('功能块' + str(i + 1)) - fblockBtn.setFixedSize(90, 43) + # fblockBtn.setFixedSize(90, 43) fblockBtn.setCheckable(True) fblockBtn.setObjectName("parameBtn") fblockBtn.setIcon(qtawesome.icon('fa.th-large', color='#1fbb6f')) fblockBtn.clicked.connect(lambda _, fbbtn = fblockBtn: self.switchParameterWidget(fbbtn)) - self.addWidget(fblockBtn) + self.addWidget(fblockBtn, 3) self.buttonlist.append(fblockBtn) aiFunctionBlockView = ParmView(AIFunctionBlock) self.blockViewlist.append(aiFunctionBlockView) - + for i in range(tbNumber): tbwidget = QWidget() tbwidget.setObjectName('tbwidget') @@ -99,44 +103,46 @@ class DynamicAddBlock(QHBoxLayout): tbwidget.setLayout(tblayout) tbcombox = TbCombox() - - tblockBtn = QPushButton('转换块' + str(i + 1)) - tblockBtn.setObjectName("parameBtn") - tblockBtn.setFixedSize(90, 43) + tbcombox.setCurrentIndex(0) + tblockBtn = QPushButton('压力转换块' + str(i + 1)) + tblockBtn.setObjectName("tbparameBtn") + # tblockBtn.setFixedSize(130, 43) tblockBtn.setCheckable(True) tblockBtn.setIcon(qtawesome.icon('fa.th-large', color='#1fbb6f')) - tblockBtn.clicked.connect(lambda _, tbbtn = tblockBtn: self.switchParameterWidget(tbbtn)) - tbcombox.currentIndexChanged.connect(lambda index, combox = tbcombox, tbbtn = tblockBtn : self.chooseTbtype(index, combox, tbbtn)) - - tblayout.addWidget(tblockBtn) - tblayout.addWidget(tbcombox) - self.addWidget(tbwidget) + # tblockBtn.clicked.connect(lambda _, tbbtn = tblockBtn: self.switchParameterWidget(tbbtn)) + tblockBtn.clicked.connect(lambda _, combox = tbcombox, tbbtn = tblockBtn : self.switchTbtype(combox.currentIndex(), combox, tbbtn)) + tbcombox.currentIndexChanged.connect(lambda index, combox = tbcombox, tbbtn = tblockBtn : self.switchTbtype(index, combox, tbbtn)) + + tblayout.addWidget(tblockBtn, 6) + tblayout.addWidget(tbcombox, 1) + tblayout.setSpacing(0) + self.addWidget(tbwidget, 5) self.buttonlist.append(tblockBtn) - pressureTBlockView = ParmView(PressureTranslationBlock) - self.blockViewlist.append(pressureTBlockView) + for tb in self.tbList: + tbBlockView = ParmView(globals()[tb]) + self.blockViewlist.append(tbBlockView) self.parameterButtonGroup = QButtonGroup() self.parameterButtonGroup.setExclusive(True) for button in self.buttonlist: self.parameterButtonGroup.addButton(button) - - - self.parameStackWidget = QStackedWidget() for view in self.blockViewlist: self.parameStackWidget.addWidget(view) - - - def switchParameterWidget(self, buttonType): - print(buttonType) - for index , button in enumerate(self.buttonlist): - if button == buttonType: - self.parameStackWidget.setCurrentIndex(index) - - def chooseTbtype(self, index, combox, button): + + + def switchTbtype(self, index, combox, button): + tbType = combox.itemText(index) - button.setText(tbType) + buttonNumber = button.text()[-1:] + button.setText(tbType + str(buttonNumber)) + if button.isChecked(): + stackIndex = (int(self.blocklist[0]) + int(self.blocklist[1]) + index) + (int(buttonNumber) - 1) * 4 + self.parameStackWidget.setCurrentIndex(stackIndex) + + + class BlockParameterManageWidget(QWidget): @@ -209,11 +215,11 @@ class BlockParameterManageWidget(QWidget): self.loadingDataWidget.loadData() - self.settingLayout.addLayout(self.blockLayout) - self.settingLayout.addWidget(QSplitter(), 18) + self.settingLayout.addLayout(self.blockLayout, 7) + self.settingLayout.addWidget(QSplitter(), 11) self.mainlayout.addWidget(self.blockLayout.parameStackWidget, 20) model = self.blockLayout.parameStackWidget.currentWidget().model - model.updateColumn(5, '查询中...') + model.updateColumn(5, '查询中sdadadsda\r\nsdasdsasasad\r\nasdsadsad...') else: reply = QMessageBox.question(self.parent(), '警告', diff --git a/model/ClientModel/Client.py b/model/ClientModel/Client.py index f18e294..bf8bd9a 100644 --- a/model/ClientModel/Client.py +++ b/model/ClientModel/Client.py @@ -18,6 +18,6 @@ class Client(object): else: self.deviceDB = SqliteDatabase(dbPath) client_proxy.initialize(self.deviceDB) - modelsArr = [DeviceDB, PressureTranslationBlock, PhysicalBlock, AIFunctionBlock] + modelsArr = [DeviceDB, PressureTranslationBlock, PhysicalBlock, AIFunctionBlock, TemperatureTranslationBlock, LevelTranslationBlock, FlowTranslationBlock, UnitTable] self.deviceDB.connect() self.deviceDB.create_tables(modelsArr, safe = True) diff --git a/utils/DBModels/DeviceParModels.py b/utils/DBModels/DeviceParModels.py index 54c2b25..6b25f44 100644 --- a/utils/DBModels/DeviceParModels.py +++ b/utils/DBModels/DeviceParModels.py @@ -86,4 +86,72 @@ class AIFunctionBlock(PressureTranslationBlock): description = CharField() createTime = CharField() - \ No newline at end of file +class TemperatureTranslationBlock(PressureTranslationBlock): + index = CharField() + paramName = CharField() + objectType = CharField() + dataType = CharField() + saveType = CharField() + dataSize = CharField() + accessType = CharField() + transferType = CharField() + description = CharField() + createTime = CharField() + +class LevelTranslationBlock(PressureTranslationBlock): + index = CharField() + paramName = CharField() + objectType = CharField() + dataType = CharField() + saveType = CharField() + dataSize = CharField() + accessType = CharField() + transferType = CharField() + description = CharField() + createTime = CharField() + + +class FlowTranslationBlock(PressureTranslationBlock): + index = CharField() + paramName = CharField() + objectType = CharField() + dataType = CharField() + saveType = CharField() + dataSize = CharField() + accessType = CharField() + transferType = CharField() + description = CharField() + createTime = CharField() + + +class UnitTable(BaseModel): + unitValue = CharField() + unitSymbol = CharField() + description = CharField() + createTime = CharField() + + # 查询设备是否存在 + @classmethod + def getallParame(cls): + devices = cls.get_all() + if devices is 'error': + return + l = [] + for x in devices: + l.append([x.unitValue, x.unitSymbol, x.description]) + return l + + @classmethod + def getByValue(cls, unitValue): + try: + return cls.get(cls.unitValue == str(unitValue)) + except Exception as e: + return + + def addParame(self, unitValue, unitSymbol, description): + self.unitValue = unitValue + self.unitSymbol = unitSymbol + self.description = description + self.createTime = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') + # print(self.createTime) + self.save() diff --git a/utils/DBModels/InitParameterDB.py b/utils/DBModels/InitParameterDB.py index a43d65c..113c186 100644 --- a/utils/DBModels/InitParameterDB.py +++ b/utils/DBModels/InitParameterDB.py @@ -4,11 +4,12 @@ import pandas as pd class InitParameterDB(): def __init__(self) -> None: self.writeParameter() + self.writeUnitParameter() def writeParameter(self) -> None: blockNames = pd.ExcelFile('static/PA块信息表.xlsx').sheet_names for blockName in blockNames: - parameters = pd.read_excel('static/PA块信息表.xlsx', sheet_name=str(blockName)) + parameters = pd.read_excel('static/PA块信息表.xlsx', sheet_name = str(blockName)) for index, row in parameters.iterrows(): parameter = row.values @@ -16,4 +17,11 @@ class InitParameterDB(): if not clsblockName.getByName(parameter[1]): clsblockName.addParame(index = parameter[0], paramName = parameter[1], objectType = parameter[2], dataType = parameter[3], saveType = parameter[4], dataSize = parameter[5], accessType = parameter[6], transferType = parameter[7], description = parameter[8]) - \ No newline at end of file + + def writeUnitParameter(self): + parameters = pd.read_excel('static/UnitTable.xlsx', sheet_name = 'UnitTable') + for index, row in parameters.iterrows(): + parameter = row.values + clsblockName = UnitTable() + if not clsblockName.getByValue(parameter[0]): + clsblockName.addParame(unitValue = parameter[0], unitSymbol = parameter[1], description = parameter[2]) \ No newline at end of file