From 6e3c3625fc120ba771eb9f93deb1490cb161aea0 Mon Sep 17 00:00:00 2001 From: "ZHANGXUXU\\95193" <951937200@qq.com> Date: Thu, 6 Jun 2024 18:00:47 +0800 Subject: [PATCH] =?UTF-8?q?0606=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Static/Main.qss | 45 ++++++- Static/PA块信息表.xlsx | Bin 25312 -> 24914 bytes Static/down.png | Bin 0 -> 3858 bytes UI/BlockParameterManageWidget.py | 219 ++++++++++++++++++++++--------- UI/LoadingDataWidget.py | 2 +- UI/SearchAddressWidget.py | 13 +- 6 files changed, 209 insertions(+), 70 deletions(-) create mode 100644 Static/down.png diff --git a/Static/Main.qss b/Static/Main.qss index fda4bf6..cef233e 100644 --- a/Static/Main.qss +++ b/Static/Main.qss @@ -4,6 +4,39 @@ QComboBox#dataTypeCombox, QComboBox#orderCombox{ } +QComboBox#tbcombox{ + + background-color: #f0f0f0; + + border: none; + + padding-left: 5px; + + border-radius: 5px; + + margin-left: -10px; + +} + +QComboBox#tbcombox::drop-down{ + + image: url(Static/down.png); + + subcontrol-origin: padding; + + subcontrol-position: top right; + + background-color: #f0f0f0; + + width: 15px; + + border:none; + + border-radius: 5px; + +} + + QTabBar::close-button { @@ -462,4 +495,14 @@ QProgressBar { color: black; - } \ No newline at end of file + } + +QWidget#tbwidget{ + + background-color: #ffffff; + + padding: 0px; + + margin: 0px; + +} diff --git a/Static/PA块信息表.xlsx b/Static/PA块信息表.xlsx index 942cfd1e0372a4382a702889a54b7bc0014bb755..7f944c11a68cfb554cb17e93699b516f3cef4acb 100644 GIT binary patch delta 17197 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 literal 0 HcmV?d00001 diff --git a/UI/BlockParameterManageWidget.py b/UI/BlockParameterManageWidget.py index 86f9510..a7c8ca5 100644 --- a/UI/BlockParameterManageWidget.py +++ b/UI/BlockParameterManageWidget.py @@ -1,7 +1,8 @@ +from tkinter.ttk import Combobox import qtawesome - -from PyQt5.QtWidgets import QPushButton,QStackedWidget, QLineEdit, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QSplitter, QButtonGroup +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import QStyledItemDelegate, QStyle, QComboBox, QMessageBox, QPushButton,QStackedWidget, QLineEdit, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QSplitter, QButtonGroup from utils.DBModels.DeviceParModels import * from UI.BlockParameterView import ParmView from UI.SearchAddressWidget import SearchAddressWidget @@ -9,9 +10,134 @@ from UI.SearchAddressWidget import SearchAddressWidget from utils.DBModels.DeviceParModels import * from UI.LoadingDataWidget import LoadingDataWidget +class HideTextDelegate(QStyledItemDelegate): + def paint(self, painter, option, index): + # 仅在下拉列表中绘制文本,避免在ComboBox显示区域绘制 + if option.state & QStyle.State_Enabled: + super().paint(painter, option, index) + + def sizeHint(self, option, index): + # 返回原始大小,确保下拉列表项不受ComboBox宽度影响 + return super().sizeHint(option, index) + +class TbCombox(QComboBox): + def __init__(self): + super().__init__() + self.initUI() + + def initUI(self): + # 创建ComboBox + + self.addItems(["选项很长很长很长", "选项2", "选项3"]) + self.setEditable(True) # 设置为可编辑以应用样式表隐藏文本 + self.setObjectName('tbcombox') + # 设置样式隐藏文本 + self.lineEdit().setStyleSheet("color: transparent; border:none; background-color: #f0f0f0") + self.lineEdit().setCursor(Qt.ArrowCursor) + self.lineEdit().setReadOnly(True) + + # 设置自定义代理以调整下拉列表行为 + self.delegate = HideTextDelegate(self) + self.setItemDelegate(self.delegate) + + # 设置ComboBox的固定大小 + self.setFixedSize(30, 40) + + # 确保下拉列表宽度适应最长项 + max_width = max(self.fontMetrics().width(self.itemText(i)) for i in range(self.count())) + self.view().setMinimumWidth(max_width) + + + +class DynamicAddBlock(QHBoxLayout): + def __init__(self, blocklist): + super().__init__() + self.blocklist = blocklist + self.buttonlist = [] + self.blockViewlist = [] + self.initUI() + + def initUI(self): + pbNumber = self.blocklist[0] + tbNumber = self.blocklist[1] + fbNumber = self.blocklist[2] + + for i in range(pbNumber): + pblockBtn = QPushButton('物理块') + + pblockBtn.setCheckable(True) + 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.buttonlist.append(pblockBtn) + physicalBlockView = ParmView(PhysicalBlock) + self.blockViewlist.append(physicalBlockView) + if i == 0: + pblockBtn.setChecked(True) + + + + for i in range(fbNumber): + fblockBtn = QPushButton('功能块' + str(i + 1)) + 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.buttonlist.append(fblockBtn) + aiFunctionBlockView = ParmView(AIFunctionBlock) + self.blockViewlist.append(aiFunctionBlockView) + + for i in range(tbNumber): + tbwidget = QWidget() + tbwidget.setObjectName('tbwidget') + tblayout = QHBoxLayout() + + tbwidget.setLayout(tblayout) + tbcombox = TbCombox() + + tblockBtn = QPushButton('转换块' + str(i + 1)) + tblockBtn.setObjectName("parameBtn") + tblockBtn.setFixedSize(90, 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) + self.buttonlist.append(tblockBtn) + pressureTBlockView = ParmView(PressureTranslationBlock) + self.blockViewlist.append(pressureTBlockView) + + 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): + tbType = combox.itemText(index) + button.setText(tbType) + class BlockParameterManageWidget(QWidget): def __init__(self): @@ -20,12 +146,12 @@ class BlockParameterManageWidget(QWidget): def initUI(self): - self.pressureTBlockView = ParmView(PressureTranslationBlock) - self.aiFunctionBlockView = ParmView(AIFunctionBlock) - self.physicalBlockView = ParmView(PhysicalBlock) + + blocklist = [1,2,2] + self.blockLayout = DynamicAddBlock(blocklist) self.mainlayout = QVBoxLayout() - self.parameStackWidget = QStackedWidget() + self.settingLayout = QHBoxLayout() self.deviceAddressLabel = QLabel('从站地址') self.deviceAddressLabel.setObjectName('deviceAddressLabel') @@ -42,55 +168,19 @@ class BlockParameterManageWidget(QWidget): self.deviceAddressSearchBtn.clicked.connect(self.searchAddress) self.deviceAddressSearchBtn.setObjectName("parameBtn") - self.pblockBtn = QPushButton('物理块') - self.pblockBtn.setCheckable(True) - self.pblockBtn.setChecked(True) - self.pblockBtn.setObjectName("parameBtn") - self.pblockBtn.setIcon(qtawesome.icon('fa.th-large', color='#1fbb6f')) - # self.pblockBtn.setCheckable(True) - self.pblockBtn.clicked.connect(lambda: self.switchParameterWidget('pblockBtn')) - - self.fblockBtn = QPushButton('功能块') - self.fblockBtn.setCheckable(True) - self.fblockBtn.setObjectName("parameBtn") - self.fblockBtn.setIcon(qtawesome.icon('fa.th-large', color='#1fbb6f')) - self.fblockBtn.clicked.connect(lambda: self.switchParameterWidget('fblockBtn')) - # self.pblockBtn.setCheckable(True) - - self.tblockBtn = QPushButton('转换块') - self.tblockBtn.setObjectName("parameBtn") - self.tblockBtn.setCheckable(True) - self.tblockBtn.setIcon(qtawesome.icon('fa.th-large', color='#1fbb6f')) - self.tblockBtn.clicked.connect(lambda: self.switchParameterWidget('tblockBtn')) - # self.tblockBtn.setCheckable(True) - - self.parameterButtonGroup = QButtonGroup() - self.parameterButtonGroup.setExclusive(True) - self.parameterButtonGroup.addButton(self.pblockBtn) - self.parameterButtonGroup.addButton(self.fblockBtn) - self.parameterButtonGroup.addButton(self.tblockBtn) - - self.settingLayout.addWidget(self.deviceAddressLabel, 1) self.settingLayout.addWidget(self.deviceAddressEdit, 1) self.settingLayout.addWidget(self.confirmBtn, 1) self.settingLayout.addWidget(self.deviceAddressSearchBtn, 1) - self.settingLayout.addWidget(self.pblockBtn, 1) - self.settingLayout.addWidget(self.fblockBtn, 1) - self.settingLayout.addWidget(self.tblockBtn, 1) - self.settingLayout.addWidget(QSplitter(), 18) + # self.settingLayout.addLayout(self.blockLayout) + + self.splitter = QSplitter() + self.settingLayout.addWidget(self.splitter, 18) - self.mainlayout.addLayout(self.settingLayout,1) - self.parameStackWidget.addWidget(self.physicalBlockView) - self.parameStackWidget.addWidget(self.aiFunctionBlockView) - self.parameStackWidget.addWidget(self.pressureTBlockView) - - - - - self.mainlayout.addWidget(self.parameStackWidget, 20) + self.widget = QWidget() + self.mainlayout.addWidget(self.widget, 20) # self.proxy = QtCore.QSortFilterProxyModel(self) # self.parameTableView.proxy = self.proxy @@ -111,22 +201,25 @@ class BlockParameterManageWidget(QWidget): self.setLayout(self.mainlayout) - def switchParameterWidget(self,blockType): - match blockType: - case "pblockBtn": - self.parameStackWidget.setCurrentIndex(0) - case "fblockBtn": - self.parameStackWidget.setCurrentIndex(1) - case "tblockBtn": - self.parameStackWidget.setCurrentIndex(2) - def refreshData(self): - - self.loadingDataWidget = LoadingDataWidget() - self.loadingDataWidget.loadData() - - model = self.parameStackWidget.currentWidget().model - model.updateColumn(5, '查询中...') + if self.deviceAddressEdit.text(): + self.splitter.deleteLater() + self.widget.deleteLater() + self.loadingDataWidget = LoadingDataWidget() + self.loadingDataWidget.loadData() + + + self.settingLayout.addLayout(self.blockLayout) + self.settingLayout.addWidget(QSplitter(), 18) + self.mainlayout.addWidget(self.blockLayout.parameStackWidget, 20) + model = self.blockLayout.parameStackWidget.currentWidget().model + model.updateColumn(5, '查询中...') + else: + reply = QMessageBox.question(self.parent(), + '警告', + "请输入从站地址", + QMessageBox.Yes) + return def searchAddress(self): self.searchAddressWidget = SearchAddressWidget(self.deviceAddressEdit) diff --git a/UI/LoadingDataWidget.py b/UI/LoadingDataWidget.py index 5f82341..65da807 100644 --- a/UI/LoadingDataWidget.py +++ b/UI/LoadingDataWidget.py @@ -8,7 +8,7 @@ class LoadDataThread(QThread): def run(self): for i in range(101): - time.sleep(0.05) # 模拟数据加载过程 + time.sleep(0.01) # 模拟数据加载过程 self.progress.emit(i) class LoadingDialog(QDialog): diff --git a/UI/SearchAddressWidget.py b/UI/SearchAddressWidget.py index ae99d2f..629ec60 100644 --- a/UI/SearchAddressWidget.py +++ b/UI/SearchAddressWidget.py @@ -22,6 +22,8 @@ class CustomProgressBar(QProgressBar): return f"{currentValue}/{maxValue}" + + class SearchAddressWidget(QWidget): def __init__(self, deviceAddressEdit): super().__init__() @@ -48,7 +50,7 @@ class SearchAddressWidget(QWidget): self.confirmBtn.clicked.connect(self.onConfirm) self.cancelBtn = QPushButton('取消') - + self.bottomLayout.addWidget(self.confirmBtn) self.bottomLayout.addWidget(QSplitter()) self.bottomLayout.addWidget(self.cancelBtn) @@ -61,8 +63,8 @@ class SearchAddressWidget(QWidget): self.setWindowTitle('从站地址查找') self.test = DPV1Master('192.168.3.10', 502) - self.test.searchSlave(self.updateProgress) - self.cancelBtn.clicked.connect(self.test.closeThread) + self.test.searchMaster(self.updateProgress) + self.cancelBtn.clicked.connect(self.cancelSearch) # self.timer = QTimer() # self.timer.timeout.connect(self.updateProgress) # self.timer.start(500) @@ -73,8 +75,6 @@ class SearchAddressWidget(QWidget): self.progressBar.setValue(address) if isSlave: self.addressListWidget.addItem(QListWidgetItem(str(address))) - # QApplication.processEvents() # 确保UI及时更新 - # QTimer.singleShot(100, lambda: None) # 暂停一小段时间,模拟任务执行时间 def onCellClicked(self, double = False): self.address = self.addressListWidget.currentItem().text() @@ -86,3 +86,6 @@ class SearchAddressWidget(QWidget): self.deviceAddressEdit.setText(self.address) self.close() + def cancelSearch(self): + self.test.closeThread + self.close() \ No newline at end of file