0828update

main
zcwBit 1 year ago
parent d9995cc51d
commit 7820ba0dfb

@ -474,6 +474,38 @@ QWidget#deviceWidget{
}
QWidget#scroWidget{
background-color: white;
hight: 25px;
}
QScrollArea#scroArea{
border: none;
}
QScrollBar#scroBar{
background: white;
height: 5px;
}
QScrollBar#scroBar::handle{
background: gray;
height: 5px;
}

Binary file not shown.

Binary file not shown.

@ -176,6 +176,7 @@ class AreaWidget(QWidget):
self.orderCombox = QComboBox()
self.orderCombox.addItems(['不转换', '字节转换', '字转换', '字内转换'])
self.orderCombox.setObjectName('orderCombox')
self.orderCombox.setCurrentIndex(1)
# self.orderCombox.setFixedSize(90, 27)
self.byteLineLabel = QLabel('字节长度:')

@ -3,7 +3,7 @@ import qtawesome
from PyQt5.QtGui import QPixmap, QPainter, QIcon
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QStyledItemDelegate, QStyle, QComboBox, QMessageBox, QPushButton,QStackedWidget, QLineEdit \
, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QSplitter, QButtonGroup, QDialog, QRadioButton
, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QSplitter, QScrollArea, QButtonGroup, QDialog, QRadioButton
from utils.DBModels.DeviceParModels import *
from UI.BlockParameterView import ParmView
from UI.SearchAddressWidget import SearchAddressWidget
@ -12,11 +12,12 @@ from utils.DBModels.DeviceParModels import *
from utils import Globals
from UI.LoadingDataWidget import LoadingDataWidget
from UI.EditAddressWidget import EditAddressWidget
from UI.SoftKeyBoardEdit import *
from model.ProjectModel.BlockManage import BlockManage, BlockType, TBType
class ShowImage(QWidget):
def __init__(self, image_path):
super().__init__()
@ -84,11 +85,14 @@ class DynamicAddBlock(QHBoxLayout):
self.initUI()
def initUI(self):
self.setContentsMargins(0, 0, 0, 0)
pbNumber = self.blocklist[0]
tbNumber = self.blocklist[1]
fbNumber = self.blocklist[2]
for i in range(pbNumber):
pblockBtn = QPushButton('物理块')
@ -238,7 +242,7 @@ class BlockParameterManageWidget(QWidget):
self.settingLayout = QHBoxLayout()
self.deviceAddressLabel = QLabel('从站地址')
self.deviceAddressLabel.setObjectName('deviceAddressLabel')
self.deviceAddressEdit = QLineEdit()
self.deviceAddressEdit = SoftKeyBoardEdit()
self.deviceAddressEdit.returnPressed.connect(self.loadBlackData)
self.deviceAddressEdit.setObjectName("deviceAddressEdit")
@ -272,6 +276,11 @@ class BlockParameterManageWidget(QWidget):
self.settingLayout.addWidget(self.refershDataBtn, 1)
# self.settingLayout.addLayout(self.blockLayout)
# self.settingLayout.setSpacing(5)
self.scroArea = QScrollArea()
self.scroArea.setObjectName('scroArea')
self.scroArea.horizontalScrollBar().setObjectName('scroBar')
self.splitter = QSplitter()
self.settingLayout.addWidget(self.splitter, 18)
@ -288,7 +297,7 @@ class BlockParameterManageWidget(QWidget):
address = self.deviceAddressEdit.text()
# print(address)
if address:
pattern = re.compile(r'^(?:[1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-7])$')
pattern = re.compile(r'^(?:[3-9]|[1-9][0-9]|1[0-1][0-9]|12[0-6])$')
match = pattern.match(address)
else:
@ -299,7 +308,7 @@ class BlockParameterManageWidget(QWidget):
return
if not match:
QMessageBox.warning(self, '提示', '请输入2 - 127')
QMessageBox.warning(self, '提示', '请输入3 - 126')
return
if self.initUIstat:
@ -319,8 +328,12 @@ class BlockParameterManageWidget(QWidget):
Globals.setValue('blockManage', self.blockManage)
blocklist = self.blockManage.getBlockNums()
self.blockLayout = DynamicAddBlock(blocklist, self.blockManage.TBTypeList)
self.settingLayout.addLayout(self.blockLayout, 7)
self.settingLayout.addWidget(self.splitter, 11)
self.scroWidget = QWidget()
self.scroWidget.setObjectName('scroWidget')
self.scroWidget.setLayout(self.blockLayout)
self.scroArea.setWidget(self.scroWidget)
self.settingLayout.addWidget(self.scroArea, 18)
# self.settingLayout.addWidget(self.splitter, 11)
self.mainlayout.addWidget(self.blockLayout.parameStackWidget, 20)
self.initUIstat = False
self.recordAddress = address #记录链接成功的站地址
@ -344,12 +357,15 @@ class BlockParameterManageWidget(QWidget):
self.blockLayout.deleteLater()
self.splitter.deleteLater()
self.splitter = QSplitter()
# self.scroArea.deleteLater()
blocklist = self.blockManage.getBlockNums()
TbtypeList = self.blockManage.TBTypeList
self.blockLayout = DynamicAddBlock(blocklist, TbtypeList)
self.settingLayout.addLayout(self.blockLayout, 7)
self.settingLayout.addWidget(self.splitter, 11)
self.scroWidget.setObjectName('scroWidget')
self.scroWidget.setLayout(self.blockLayout)
self.scroArea.setWidget(self.scroWidget)
self.settingLayout.addWidget(self.scroArea, 18)
self.mainlayout.addWidget(self.blockLayout.parameStackWidget, 20)
self.recordAddress = address #记录链接成功的站地址
else:
@ -406,6 +422,7 @@ class BlockParameterManageWidget(QWidget):
self.blockLayout.deleteLater()
self.splitter.deleteLater()
self.splitter = QSplitter()
self.scroArea.deleteLater()
self.widget = ShowImage('Static/pict.png')
self.mainlayout.addWidget(self.widget, 20)
self.settingLayout.addWidget(self.splitter,18)

@ -51,7 +51,8 @@ class VarTableModel(QAbstractTableModel):
print("列索引超出范围")
return
# for row in range(self.rowCount()):
if self.datas[row][2] in ['SENSOR_UNIT']:
if 'unit' in self.datas[row][2].lower():
unit = UnitTable.getUnitSymbolByUnitValue(value)
value = unit if unit else value
self.datas[row][6] = value
@ -77,7 +78,7 @@ class VarTableModel(QAbstractTableModel):
if role == Qt.TextAlignmentRole:
return Qt.AlignCenter
if not QModelIndex.isValid():
print("行或者列有问题")
return QVariant()
if role == Qt.TextColorRole:
@ -139,6 +140,9 @@ class VarTableModel(QAbstractTableModel):
def updateValue(self, valueList):
for index, value in enumerate(valueList):
if 'unit' in self.datas[index][2].lower():
unit = UnitTable.getUnitSymbolByUnitValue(value)
value = unit if unit else value
self.datas[index][6] = value
self.table.proxy.invalidate()
@ -198,7 +202,7 @@ class VarButtonDelegate(QItemDelegate):
boxLayout.addWidget(refreshButton,1)
combox.index = [index.row(), index.column()]
elif objectType == 'SENSOR_UNIT':
elif 'unit' in objectType.lower():
comboxUnit = QComboBox()
comboxUnit.setObjectName('modeCombox')
comboxUnit.addItem('下拉选择')
@ -265,11 +269,10 @@ class VarButtonDelegate(QItemDelegate):
"请输入强制值",
QMessageBox.Yes)
return
match dataType:
case "Float":
if dataType in ['Float', 'DS-36', 'Unsigned16', 'Unsigned8']:
pattern = re.compile(r'^[+-]?(\d+(\.\d*)?|\.\d+)$')
for value in values:
pattern = re.compile(r'[^0-9\.-]+')
if not value or re.findall(pattern, str(value)):
if not value or not re.findall(pattern, str(value)):
reply = QMessageBox.question(self.parent(),
'警告',
"请输入强制值或数字",

@ -7,7 +7,7 @@ from PyQt5.QtCore import QSize, Qt
from PyQt5.Qt import *
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtWidgets import QHBoxLayout, QAbstractItemView, QVBoxLayout, QSplitter, \
QApplication, QLabel, QGridLayout, QLineEdit, QComboBox, QTextEdit, QCheckBox,QVBoxLayout,QListView, QMainWindow, QStackedWidget, QMessageBox
QApplication, QLabel, QGridLayout, QComboBox, QTextEdit, QCheckBox,QVBoxLayout,QListView, QMainWindow, QStackedWidget, QMessageBox
from PyQt5.QtWidgets import QSizePolicy, QWidget
from ctypes import POINTER, cast
@ -21,7 +21,7 @@ from win32.lib import win32con
from windoweffect.window_effect import WindowEffect
from windoweffect.c_structures import MINMAXINFO, NCCALCSIZE_PARAMS
from utils.DBModels.DeviceModels import DeviceDB
from UI.SoftKeyBoardEdit import *
class DeviceDialog(QDialog):
@ -36,22 +36,22 @@ class DeviceDialog(QDialog):
self.resize(306, 451)
self.setObjectName('deviceDialog')
self.deviceNameEdit = QLineEdit()
self.deviceNameEdit = SoftKeyBoardEdit()
self.deviceNameEdit.setPlaceholderText("设备名称")
self.deviceNameEdit.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.deviceNameEdit.setObjectName('deviceMesEdit')
self.pvUpperEdit = QLineEdit()
self.pvUpperEdit = SoftKeyBoardEdit()
self.pvUpperEdit.setPlaceholderText("量程上限")
self.pvUpperEdit.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.pvUpperEdit.setObjectName('deviceMesEdit')
self.pvLowerEdit = QLineEdit()
self.pvLowerEdit = SoftKeyBoardEdit()
self.pvLowerEdit.setPlaceholderText("量程下限")
self.pvLowerEdit.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.pvLowerEdit.setObjectName('deviceMesEdit')
self.pvUnitEdit = QLineEdit()
self.pvUnitEdit = SoftKeyBoardEdit()
self.pvUnitEdit.setPlaceholderText("单位")
self.pvUnitEdit.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.pvUnitEdit.setObjectName('deviceMesEdit')

@ -23,7 +23,7 @@ from windoweffect.c_structures import MINMAXINFO, NCCALCSIZE_PARAMS
from utils.DBModels.DeviceModels import DeviceDB
from model.ConfigModel.GSDManage import GsdParser
from UI.SoftKeyBoardEdit import *
from protocol.ModBus.DPV1Master import DPV1Master
class EditAddressWidget(QDialog):
@ -37,12 +37,12 @@ class EditAddressWidget(QDialog):
self.resize(306, 350)
self.setObjectName('deviceDialog')
self.newAddressEdit = QLineEdit()
self.newAddressEdit = SoftKeyBoardEdit()
self.newAddressEdit.setPlaceholderText("请输入目标站地址")
self.newAddressEdit.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.newAddressEdit.setObjectName('deviceMesEdit')
self.oldAddressEdit = QLineEdit()
self.oldAddressEdit = SoftKeyBoardEdit()
self.oldAddressEdit.setPlaceholderText("请输入原站地址")
self.oldAddressEdit.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.oldAddressEdit.setObjectName('deviceMesEdit')

@ -119,6 +119,7 @@ class MainWindow(QWidget):
self.valueBtn.setIcon(qtawesome.icon('fa.pencil', color='#1fbb6f'))
self.valueBtn.setIconSize(QSize(25, 25))
self.valueBtn.setCheckable(True)
self.valueBtn.clicked.connect(self.switchDeviceValueManageWidget)
self.deviceParameterManageBtn = QPushButton('设备参数管理')
@ -211,7 +212,7 @@ class MainWindow(QWidget):
self.stackWidget.addWidget(self.upperWidget)
self.stackWidget.addWidget(QWidget())
self.stackWidget.addWidget(self.blockParameterManageWidget)
self.valueBtn.clicked.connect(lambda : self.stackWidget.setCurrentIndex(0))
self.mainLayout = QVBoxLayout(self)
self.mainLayout.addLayout(toolbarLayout, 1)
@ -310,13 +311,23 @@ class MainWindow(QWidget):
startupInfo.wShowWindow = 2
self.process = subprocess.Popen("D:\\EnTalk PROFIBUS Manager\\DP.exe",startupinfo=startupInfo)
QTimer.singleShot(500, lambda:self.showLowerWidget(self.process))
self.showMaximized()
# self.showFullScreen()
# self.switchBtn.setIcon(QIcon(':/static/varMagH.png'))
def switchDeviceValueManageWidget(self):
self.stackWidget.setCurrentIndex(0)
try:
self.stackWidget.widget(3).clearFocus()
except Exception as e:
pass
def switchDeviceParManageWidget(self):
# if self.deviceParameterManageBtn.isChecked():
self.stackWidget.setCurrentIndex(2)
try:
self.stackWidget.widget(3).clearFocus()
except Exception as e:
pass
# self.deviceParameterManageBtn.setText('变量读写')
self.deviceParameterManageBtn.setIcon(qtawesome.icon('fa.pencil-square-o', color='#1fbb6f'))
@ -336,14 +347,14 @@ class MainWindow(QWidget):
widget = QWidget.createWindowContainer(QWindow.fromWinId(hwnd))
# print(type(widget))
widget.hwnd = hwnd # 窗口句柄
widget.phwnd = 0 # 父窗口句柄
widget.phwnd = int(self.winId()) # 父窗口句柄
widget.style = style # 窗口样式
widget.exstyle = exstyle # 窗口额外样式
widget.wrect = wrect # 窗口位置
self.stackWidget.addWidget(widget)
widget.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.WindowFullScreen)
widget.setWindowFlags(Qt.FramelessWindowHint)
win32gui.SetParent(hwnd, int(self.winId()))

@ -1,6 +1,6 @@
from PyQt5.QtWidgets import QLineEdit, QVBoxLayout
from UI.SoftKeyBoardEdit import *
class ObjectTypeEditlayout(QVBoxLayout):
def __init__(self, objectType, dataType):
super().__init__()
@ -11,10 +11,10 @@ class ObjectTypeEditlayout(QVBoxLayout):
def initUI(self):
self.editline1 = QLineEdit()
self.editline2 = QLineEdit()
self.editline3 = QLineEdit()
self.editline4 = QLineEdit()
self.editline1 = SoftKeyBoardEdit()
self.editline2 = SoftKeyBoardEdit()
self.editline3 = SoftKeyBoardEdit()
self.editline4 = SoftKeyBoardEdit()
self.editline1.setObjectName('parameEditline')
self.editline2.setObjectName('parameEditline')
self.editline3.setObjectName('parameEditline')
@ -68,7 +68,6 @@ class ObjectTypeEditlayout(QVBoxLayout):
def getEditlineValue(self):
valueList = []
print(self.editlineList,6777)
for editline in self.editlineList:
value = editline.text()
valueList.append(value)

@ -45,7 +45,7 @@ class SoftKeyBoardEdit(QLineEdit):
def mousePressEvent(self, event):
print(Globals.getValue('_touchMode'))
# print(Globals.getValue('_touchMode'))
if Globals.getValue('_touchMode'):
self.toggleTabtip()
event.accept()

@ -39,6 +39,7 @@ if __name__ == '__main__':
Client.initDB()
window = MainWindow()
window.showFullScreen()
# window.showMaximized()
Globals.setValue('MainWindow', window)
# window.show()
sys.exit(app.exec_())

@ -53,7 +53,7 @@ class BlockManage():
# return cls._instance
def __init__(self, _isPa, address = None):
print(_isPa)
# print(_isPa)
self._isPa = _isPa
self.address = address
self.TBTypeList = []
@ -74,7 +74,7 @@ class BlockManage():
def initBlocks(self):
# print(self._isPa,5555)
if not self.DPV1Master.judgeSlave(self.address):
print(self.address)
# print(self.address)
raise RuntimeError(f"连接从站{self.address}失败.")
self.blockDict = {
BlockType.PB : [],
@ -111,16 +111,17 @@ class BlockManage():
else:
dirMesDic[blockIndex] = blockNums
# print(dirMesDic)
entryTuples = []
# entryTuples = []
for key, value in dirMesDic.items():
# print(key, value)
if key == 1:
data = self.DPV1Master.readParm(address = self.address, slot = 1, index = key, length = dirLength + 4 * value)
data = self.DPV1Master.readParm(address = self.address, slot = 1, index = 1, length = dirLength + 4 * value)
else:
data = self.DPV1Master.readParm(address = self.address, slot = 1, index = key, length = 4 * value)
# print(data, int(len(data)/2))
# print(data)
data = struct.unpack('>{}h'.format(int(len(data)/2)), data)
# print(data)
tuples = [(data[i], data[i+1]) for i in range(0, len(data), 2)]
entryTuples += tuples
# print(entryTuples)
@ -130,6 +131,7 @@ class BlockManage():
blkDirMesByte = struct.pack('>h', entryTuples[typeIndex][0])
blkIndex = int(blkDirMesByte[0]) # 目录对象编号
blkoffect = int(blkDirMesByte[1]) # 块从第几个Dir_Entry开始
# print(blkoffect)
numBlk = entryTuples[typeIndex][1] # 块数量
# print(blkIndex, blkoffect, numBlk)
for i in range(numBlk):

@ -120,7 +120,7 @@ class Parm():
valueByte, statusByte = value[:4], value[4].to_bytes(1, byteorder='little')
value = self.unpackFloat(valueByte)
status = self.unpackU8(statusByte)
displayStr = '值:{}\r\n状态:{}'.format(value, status)
displayStr = '值:{}状态:{}'.format(value, status)
return displayStr
def unpackDS32(self, value):
@ -142,7 +142,7 @@ class Parm():
def unpackDS36(self, value):
print(len(value))
# print(len(value))
EU100Byte, EU0Byte, unitByte, decPointByte = value[:4], value[4:8], value[8:10], value[10].to_bytes(1, byteorder='little')
EU100 = self.unpackFloat(EU100Byte)
EU0 = self.unpackFloat(EU0Byte)

Loading…
Cancel
Save