You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PROFIBUS/UI/SearchAddressWidget.py

89 lines
2.9 KiB
Python

1 year ago
import imp
1 year ago
from UI.DeviceDialogWidget import DeviceDialog
import sys
import re
import random
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt, QTimer
from PyQt5.Qt import *
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, \
QApplication, QLineEdit, QWidget, QTableWidget, QSplitter,QVBoxLayout,QPushButton, QProgressBar, QTableWidgetItem, QMessageBox
1 year ago
from PyQt5.QtWidgets import QDialog, QListWidgetItem
from protocol.ModBus.DPV1Master import DPV1Master
1 year ago
1 year ago
class CustomProgressBar(QProgressBar):
def text(self):
# 获取当前值和最大值
currentValue = self.value()
maxValue = self.maximum()
# 返回自定义的显示文本
return f"{currentValue}/{maxValue}"
1 year ago
class SearchAddressWidget(QWidget):
def __init__(self, deviceAddressEdit):
super().__init__()
self.selected_value = None
self.deviceAddressEdit = deviceAddressEdit
self.initUI()
def initUI(self):
self.resize(800, 500)
self.setObjectName('deviceDialog')
1 year ago
self.addressListWidget = QListWidget()
1 year ago
self.addressListWidget.clicked.connect(self.onCellClicked)
self.addressListWidget.doubleClicked.connect(lambda: self.onCellClicked(True))
1 year ago
self.mainlayout = QVBoxLayout()
1 year ago
self.progressBar = CustomProgressBar()
self.progressBar.setMaximum(125)
self.progressBar.setValue(0)
1 year ago
self.bottomLayout = QHBoxLayout()
self.confirmBtn = QPushButton('确定')
self.confirmBtn.clicked.connect(self.onConfirm)
self.cancelBtn = QPushButton('取消')
self.bottomLayout.addWidget(self.confirmBtn)
self.bottomLayout.addWidget(QSplitter())
self.bottomLayout.addWidget(self.cancelBtn)
self.mainlayout.addWidget(self.progressBar)
1 year ago
self.mainlayout.addWidget(self.addressListWidget)
1 year ago
self.mainlayout.addLayout(self.bottomLayout)
self.setLayout(self.mainlayout)
self.setWindowTitle('从站地址查找')
1 year ago
1 year ago
self.test = DPV1Master('192.168.3.10', 502)
1 year ago
self.test.searchSlave(self.updateProgress)
1 year ago
self.cancelBtn.clicked.connect(self.test.closeThread)
1 year ago
# self.timer = QTimer()
# self.timer.timeout.connect(self.updateProgress)
# self.timer.start(500)
1 year ago
1 year ago
def updateProgress(self, address, isSlave):
1 year ago
# 模拟一个任务,逐步更新进度条
1 year ago
self.progressBar.setValue(address)
1 year ago
if isSlave:
self.addressListWidget.addItem(QListWidgetItem(str(address)))
1 year ago
# QApplication.processEvents() # 确保UI及时更新
# QTimer.singleShot(100, lambda: None) # 暂停一小段时间,模拟任务执行时间
1 year ago
def onCellClicked(self, double = False):
self.address = self.addressListWidget.currentItem().text()
1 year ago
if double:
self.onConfirm()
def onConfirm(self):
1 year ago
1 year ago
self.deviceAddressEdit.setText(self.address)
self.close()