0311更新

main
ZHANGXUXU\95193 2 years ago
parent 0e55c20ff2
commit f603f2816f

@ -54,7 +54,7 @@ QPushButton#initAddDeviceButton, QPushButton#initAreaAddButton{
}
QPushButton#initAddDeviceButton:hover, QPushButton#initAreaAddButton:hover{
QPushButton#initAddDeviceButton:hover, QPushButton#initAreaAddButton:hover, QPushButton#deviceAddButton:hover, QPushButton#addareabutton:hover{
color: #1a86d8;
@ -105,19 +105,31 @@ QLabel#dataTypeLabel, QLabel#dataOrderLabel, QLabel#byteLineLabel{
}
QLabel#pvUpperLimit, QLabel#pvLowerLimit, QLabel#pvUnit{
font-size: 24px;
}
QLabel#areaValueLabel{
color: #0160aa;
}
QLineEdit#byteLineEdit{
font-size: 24px;
QLineEdit#byteLineEdit, QLineEdit#areaLineEdit {
}
font-size: 28px;
QLineEdit#areaLineEdit {
font-size: 28px;
}

@ -1,76 +0,0 @@
from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QComboBox, QDialogButtonBox, QApplication, QMessageBox
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtCore import Qt
import sys
import re
class AreaSettingWidget(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
layout = QFormLayout()
varType = QComboBox()
varType.addItems(['AI', 'AO', 'DI', 'DO'])
varType.setObjectName('varType')
channelNums = QLineEdit()
channelNums.setObjectName('channelNums')
channelBytes = QLineEdit()
channelBytes.setObjectName('channelBytes')
layout.addRow('协议类型:', varType)
layout.addRow('通道数:', channelNums)
layout.addRow("字节长度:", channelBytes)
button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
ok_button = button_box.button(QDialogButtonBox.Ok)
ok_button.setText("确定") # 设置Ok按钮的文本
cancel_button = button_box.button(QDialogButtonBox.Cancel)
cancel_button.setText("取消") # 设置Cancel按钮的文本
button_box.accepted.connect(self.check_input)
button_box.rejected.connect(self.reject)
layout.addRow(button_box)
self.setWindowIcon(QIcon('Static/zhjt.ico'))
self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) # 去掉标题栏的问号
self.setLayout(layout)
self.setWindowTitle("通道配置")
def getParameters(self):
varType = self.findChild(QComboBox, "varType").currentText()
channelNums = self.findChild(QLineEdit, "channelNums").text()
channelBytes = self.findChild(QLineEdit, "channelBytes").text()
return varType, channelNums, channelBytes
def check_input(self):
varType, channelNums, channelBytes = self.getParameters()
if not channelNums or not channelBytes:
QMessageBox.warning(self, '警告', '有值未输入。')
elif not re.match(r'^[-+]?\d*\.?\d*$', channelNums) or not re.match(r'^[-+]?\d*\.?\d*$', channelBytes):
QMessageBox.warning(self, '警告', '请输入数字。')
else:
self.accept() # 所有输入都是数字且不为空时接受对话框
def dataTypeTranslate(self, order):
self.dataTypeDict = {'不转换': 'ABCD', '字节转换': 'DCBA', '字转换': 'CDAB', '字转换': 'BADC'}
return self.dataTypeDict[order]
if __name__ == '__main__':
app = QApplication(sys.argv)
window = AreaSettingWidget()
window.show()
sys.exit(app.exec_())

@ -11,8 +11,8 @@ from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize
from model.ProjectModel.DeviceManage import Device, DevicesManange
from UI.ButtonLayoutWidget import ButtonWidgets
from UI.RightAreaWidget import RightAreaWidgets
from utils.DBModels.DeviceModels import DeviceDB
@ -21,7 +21,6 @@ class AreaTabWidget(QTabWidget):
super().__init__()
self.deviceWidget = deviceWidget
self.devicesManange = self.deviceWidget.devicesManange
self.initUI()
@ -36,9 +35,9 @@ class AreaTabWidget(QTabWidget):
self.addAreaButton.setObjectName('addareabutton')
self.addAreaButton.setIcon(QIcon('Static/add.png'))
self.addAreaButton.setFlat(True)
self.setCornerWidget(self.addAreaButton)
self.addAreaButton.clicked.connect(self.addAreaTab)
self.setCornerWidget(self.addAreaButton)
# self.state = True
self.initWidget() #初始化界面
@ -86,12 +85,17 @@ class AreaTabWidget(QTabWidget):
def addAreaTab(self, init = False, settingValue = None):
if settingValue is None:
if init:
self.removeTab(0)
tabIndex = self.count()
#判断area右侧布局是是否添加
if self.widget(int(tabIndex - 1)):
if not self.widget(int(tabIndex - 1)).rightAreaWidgetState:
QMessageBox.warning(self, '警告', '有值未输入。')
return
areaWidget = AreaWidget(self)
self.addTab(areaWidget, '通道' + str(tabIndex + 1))
self.setCurrentIndex(tabIndex)
@ -131,6 +135,7 @@ class AreaWidget(QWidget):
self.settingValue = settingValue
self.state = True
self.devicesManange = self.areaTabWidget.devicesManange
self.rightAreaWidgetState = False
self.initUI()
def initUI(self):
@ -138,6 +143,19 @@ class AreaWidget(QWidget):
self.leftLayout = QGridLayout()
self.rightLayout = QGridLayout()
LimitData = self.devicesManange.getLimitData(self.areaTabWidget.deviceName)
self.pvUpperLimit = QLabel('量程上限: {}'.format(LimitData[0]))
self.pvUpperLimit.setObjectName('pvUpperLimit')
self.pvLowerLimit = QLabel('量程下限: {}'.format(LimitData[1]))
self.pvLowerLimit.setObjectName('pvLowerLimit')
self.pvUnit = QLabel('单位: {}'.format(LimitData[2]))
self.pvUnit.setObjectName('pvUnit')
self.dataTypeLabel = QLabel('数据类型:')
self.dataTypeLabel.setObjectName('dataTypeLabel')
# self.dataTypeLabel.setFixedSize(90, 27)
@ -178,13 +196,23 @@ class AreaWidget(QWidget):
hLayout.addWidget(self.okBtn)
hLayout.addWidget(self.delAreaBtn)
self.leftLayout.addWidget(self.dataTypeLabel, 0, 0, 1, 1)
self.leftLayout.addWidget(self.dataTypeCombox, 0, 1, 1, 1)
self.leftLayout.addWidget(self.dataOrderLabel,1, 0, 1, 1 )
self.leftLayout.addWidget(self.orderCombox,1, 1, 1, 1 )
self.leftLayout.addWidget(self.byteLineLabel,2, 0, 1, 1 )
self.leftLayout.addWidget(self.byteLineEdit,2, 1, 1, 1 )
self.leftLayout.addLayout(hLayout, 3, 0, 1, 2)
# vlayout = QVBoxLayout()
# vlayout.addWidget(self.pvUpperLimit)
# vlayout.addWidget(self.pvLowerLimit)
# vlayout.addWidget(self.pvUnit)
self.leftLayout.addWidget(self.pvUpperLimit, 0, 0, 1, 2)
self.leftLayout.addWidget(self.pvLowerLimit, 1, 0, 1, 2)
self.leftLayout.addWidget(self.pvUnit,2, 0, 1, 2)
self.leftLayout.addWidget(self.dataTypeLabel, 3, 0, 2, 1)
self.leftLayout.addWidget(self.dataTypeCombox, 3, 1, 2, 1)
self.leftLayout.addWidget(self.dataOrderLabel,4, 0, 2, 1)
self.leftLayout.addWidget(self.orderCombox,4, 1, 2, 1)
self.leftLayout.addWidget(self.byteLineLabel,5, 0, 2,1)
self.leftLayout.addWidget(self.byteLineEdit,5, 1, 2, 1)
self.leftLayout.addWidget(QSplitter(),6, 0, 2, 2)
self.leftLayout.addLayout(hLayout, 7, 0, 2, 2)
# self.leftLayout.addWidget(self.delAreaBtn, 3, 1, 1, 1)
@ -202,10 +230,14 @@ class AreaWidget(QWidget):
# self.deviceWidgetManage.addArea(mainLayout=mainLayout, leftLayoutWidget=leftLayoutWidgets)
self.setLayout(self.mainLayout)
if self.settingValue is not None:
self.addAreaWidget()
self.settingValue = None
def setByteLineEditValue(self):
byteLineEditValue = self.dataTypeCombox.currentText()
if byteLineEditValue in ['DI','DO']:
@ -215,15 +247,12 @@ class AreaWidget(QWidget):
self.byteLineEdit.setEnabled(True)
def removeAreaTab(self):
# 只点击了新建域按钮,未点击确定按钮时,直接点击删除按钮的删除情况
# 只点击了新建域按钮,未点击确定按钮时,直接点击删除按钮的删除情况
index = self.areaTabWidget.currentIndex()
tabCount = self.areaTabWidget.count()
if self.okBtn.text() == '确定':
if index != -1:
self.areaTabWidget.removeTab(index)
# if tabCount == 1:
# self.areaTabWidget.initWidget()
# self.state = True
#正常点击删除按钮的情况
else:
@ -241,6 +270,14 @@ class AreaWidget(QWidget):
self.areaTabWidget.initWidget()
self.state = True
#重新设置通道显示值
else:
for index in range(self.areaTabWidget.count()):
self.areaTabWidget.setTabText(index, '通道{}'.format(index+1))
@ -262,6 +299,7 @@ class AreaWidget(QWidget):
dataTypeIndex = self.settingValue[0]
orderIndex = self.settingValue[1]
byteLineEditIndex = self.settingValue[2]
self.dataTypeCombox.setCurrentIndex(dataTypeIndex)
self.orderCombox.setCurrentIndex(orderIndex)
self.byteLineEdit.setText(byteLineEditIndex)
@ -269,11 +307,12 @@ class AreaWidget(QWidget):
order = self.dataTypeTranslate(self.orderCombox.currentText())
byteLineEdit = self.byteLineEdit.text()
#判断字节长度的输入是否是数字
pattern = re.compile(r'^\d+$')
pattern = re.compile(r'^[1-7]$')
match = pattern.match(byteLineEdit)
if not match:
QMessageBox.warning(self, '提示', '请输入数字')
QMessageBox.warning(self, '提示', '请输入1 - 8')
return
else:
#设置点击确定后无法编辑,点击编辑后才能编辑
@ -302,11 +341,16 @@ class AreaWidget(QWidget):
widget.deleteLater()
#添加按钮布局
self.buttonWidgets = ButtonWidgets(self, order = order, byteLineEdit = byteLineEdit, dataType = dataType, deviceName = deviceName)
areaLayout.addWidget(self.buttonWidgets)
self.rightAreaWidgets = RightAreaWidgets(self, order = order, byteLineEdit = byteLineEdit, dataType = dataType, deviceName = deviceName)
areaLayout.addWidget(self.rightAreaWidgets)
self.state = False
self.rightAreaWidgetState = True
areaId = DevicesManange.getAreaID(deviceName)
if self.settingValue is not None:
self.isRead = self.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)

@ -1,61 +0,0 @@
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QMdiArea, QAction, QInputDialog, QDialog, QFormLayout, QLineEdit, \
QMdiSubWindow, QDialogButtonBox, QWidget, QComboBox, QTabBar, QTabWidget, QGridLayout, QLabel, QPushButton, QSpacerItem,QSizePolicy
from AreaSettingWidget import AreaSettingWidget
import sys
class AreaWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.sub_window = QMdiSubWindow() # 创建一个子窗口
self.layoutAI = QGridLayout()
self.widget = QWidget()
self.widget.setLayout(self.layoutAI)
self.newbtn = QPushButton('New')
self.delbtn = QPushButton('Del')
self.layoutAI.addWidget(self.newbtn, 0, 0)
self.layoutAI.addWidget(self.delbtn, 0, 1)
self.newbtn.clicked.connect(lambda: self.newArea)
self.delbtn.clicked.connect(self.delArea)
self.layoutAI.addWidget(self.newbtn, 0, 0, 1, 1)
self.layoutAI.addWidget(self.delbtn, 0, 2, 1, 1)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.layoutAI.addItem(self.horizontalSpacer, 0, 1, 1, 1)
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.layoutAI.addItem(self.verticalSpacer, 1, 0, 1, 1)
# self.sub_window.setGeometry(100, 100, 400, 300)
self.sub_window.setWidget(self.widget)
def newArea(self):
# print(1)
areaSettingWidget = AreaSettingWidget()
if areaSettingWidget.exec_() == QDialog.Accepted:
deviceName, proType, varType = areaSettingWidget.getParameters()
def delArea(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
window = AreaWidget()
window.show()
sys.exit(app.exec_())

@ -1,86 +0,0 @@
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QMdiArea, QAction, QInputDialog, QDialog, QFormLayout, QLineEdit, \
QMdiSubWindow, QDialogButtonBox, QWidget, QComboBox, QTabBar, QTabWidget, QGridLayout, QLabel, QPushButton, QSpacerItem,QSizePolicy, QCheckBox, QVBoxLayout
from UI.AreaSettingWidget import AreaSettingWidget
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap, QIcon
import sys
from model.ProjectModel.DeviceManage import Device
class DelAreaWidget(QDialog):
def __init__(self, deviceName):
super().__init__()
self.checkbox_data ={}
self.deviceName = deviceName
self.delAreaRowAndColunm = []
self.initUI()
self.intType = 0
self.foloatType = 1
def initUI(self):
vorlayout = QVBoxLayout() #主布局
# layout = QGridLayout()
jsonCons = Device.getAreaJson(self.deviceName)
row = 1
if jsonCons is None:
return
else:
for jsoncon in jsonCons:
varType = jsoncon["type"]
channelNums = jsoncon["nums"]
channelBytes = jsoncon["bytes"]
text = varType + ": " + channelBytes + 'Byte' + '数量:'+ channelNums
checkbox = QCheckBox(text)
vorlayout.addWidget(checkbox)
checkbox.stateChanged.connect(self.checkbox_state_changed)
self.checkbox_data[checkbox] = row
row += 1
button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
ok_button = button_box.button(QDialogButtonBox.Ok)
ok_button.setText("确定") # 设置Ok按钮的文本
cancel_button = button_box.button(QDialogButtonBox.Cancel)
cancel_button.setText("取消") # 设置Cancel按钮的文本
button_box.accepted.connect(self.getDelAreaRowAndColunm)
button_box.rejected.connect(self.reject)
vorlayout.addWidget(button_box)
self.setWindowIcon(QIcon('Static/zhjt.ico'))
self.setWindowTitle("删除通道")
self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint)#去掉标题栏的问号
self.setLayout(vorlayout)
def checkbox_state_changed(self, state):
sender = self.sender() # 获取触发信号的对象
if isinstance(sender, QCheckBox):
if state == 2: # 选中状态
self.delAreaRowAndColunm.append(self.checkbox_data[sender]) # 从字典中获取行列信息
elif state == 0: # 取消选中状态
self.delAreaRowAndColunm.remove(self.checkbox_data[sender])
def getDelAreaRowAndColunm(self):
self.accept()
return self.delAreaRowAndColunm
if __name__ == '__main__':
app = QApplication(sys.argv)
# Client.initDB()
window = DelAreaWidget()
window.show()
sys.exit(app.exec_())

@ -2,11 +2,12 @@ import re
from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QDialogButtonBox, QMessageBox
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
from utils.DBModels.DeviceModels import DeviceDB
class DeviceDialog(QDialog):
def __init__(self, parent=None):
def __init__(self,dataTypeAndModel,parent=None):
super().__init__(parent)
self.dataTypeAndModel = dataTypeAndModel
self.initUI()
def initUI(self):
@ -15,8 +16,6 @@ class DeviceDialog(QDialog):
deviceName = QLineEdit()
deviceName.setObjectName('deviceName')
pvUpperLimit = QLineEdit()
pvUpperLimit.setObjectName('pvUpperLimit')
@ -56,11 +55,15 @@ class DeviceDialog(QDialog):
return deviceName, pvUpperLimit, pvLowerLimit, pvUnit
def check_input(self):
deviceName, pvUpperLimit, pvLowerLimit, pvUnit = self.getParameters()
titleName, pvUpperLimit, pvLowerLimit, pvUnit = self.getParameters()
deviceName = titleName + self.dataTypeAndModel
if not pvUpperLimit or not pvLowerLimit or not pvUnit or not deviceName:
QMessageBox.warning(self, '警告', '有值未输入。')
return
elif DeviceDB.getByName(deviceName):
print(DeviceDB.getByName(deviceName),2343)
QMessageBox.warning(self, '警告', '设备名重复')
return
elif not re.match(r'^[-+]?\d*\.?\d*$', pvUpperLimit) or not re.match(r'^[-+]?\d*\.?\d*$', pvLowerLimit):
QMessageBox.warning(self, '警告', '请输入数字。')
return

@ -17,16 +17,15 @@ class DeviceWidget(QMainWindow):
def __init__(self, dockWidget, devicesManange):
super().__init__()
self.dockWidget = dockWidget
self.forceValues = []
self.devicesManange = devicesManange
self.initUI()
def initUI(self):
#获取DP、PA协议和主从模式
self.proType = self.dockWidget.windowTitle()[0:2]
self.masterSlaveModel = self.dockWidget.windowTitle()[2:4]
self.dataTypeAndModel = self.dockWidget.windowTitle()
self.proType = self.dataTypeAndModel[0:2]
self.masterSlaveModel = self.dataTypeAndModel[2:4]
self.deviceTabWidget = QTabWidget(self)
@ -56,9 +55,11 @@ class DeviceWidget(QMainWindow):
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
if index != -1:
deviceName = self.deviceTabWidget.tabText(index) + self.dockWidget.windowTitle()
print(deviceName,index,222)
self.deviceTabWidget.removeTab(index)
self.devicesManange.delDevice(deviceName = self.deviceName)
DeviceDB.deleteDevice(deviceName = self.deviceName)
self.devicesManange.delDevice(deviceName = deviceName )
DeviceDB.deleteDevice(deviceName = deviceName)
else:
return
if self.deviceTabWidget.count() == 0:
@ -68,11 +69,11 @@ class DeviceWidget(QMainWindow):
def addDeviceWidget(self,init = False,deviceName = None):
if deviceName is None:
dialog = DeviceDialog()
dialog = DeviceDialog(self.dataTypeAndModel)
if dialog.exec_() == QDialog.Accepted:
self.titleName, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters()
self.deviceName = self.titleName + self.dockWidget.windowTitle()
DeviceDB().addDevice(deviceName = self.deviceName, proType = self.proType , masterSlaveModel = self.masterSlaveModel)
self.deviceName = self.titleName + self.dataTypeAndModel
DeviceDB().addDevice(deviceName = self.deviceName, proType = self.proType , masterSlaveModel = self.masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit)
areaTabWidget = AreaTabWidget(self)
if init:
self.deviceTabWidget.removeTab(0)
@ -84,7 +85,6 @@ class DeviceWidget(QMainWindow):
else:
return
else:
self.deviceName = deviceName
self.titleName = self.deviceName[:-4]
areaTabWidget = AreaTabWidget(self)

@ -1,6 +0,0 @@
111111111111111111111111
111111111111111111111111

@ -5,14 +5,13 @@ import re
class forceButton(QPushButton):
def __init__(self, number = None, valueLabel = None, valueEdit = None):
super().__init__()
self.valueEdit = valueEdit
self.valueLabel = valueLabel
self.number = number
self.setObjectName('forceBtn')
self.setText('强制')
class ButtonWidgets(QWidget):
class RightAreaWidgets(QWidget):
def __init__(self, areaWidget, order, byteLineEdit, dataType, deviceName):
super().__init__()
self.areaLineEditValue = []

@ -399,6 +399,16 @@ class DevicesManange():
return
l = []
for x in devices:
l.append([x.deviceName, x.proType, x.masterSlaveModel, x.areaJson])
l.append([x.deviceName, x.proType, x.masterSlaveModel, x.areaJson, x.pvLowerLimit, x.pvUpperLimit, x.pvUnit])
return l
@classmethod
def getLimitData(cls, deviceName):
try:
pvUpperLimit = DeviceDB.getByName(deviceName=deviceName).pvUpperLimit
pvLowerLimit = DeviceDB.getByName(deviceName=deviceName).pvLowerLimit
pvUnit = DeviceDB.getByName(deviceName=deviceName).pvUnit
l =[pvUpperLimit, pvLowerLimit, pvUnit]
return l
except Exception as e:
return print(e)

@ -50,7 +50,7 @@ class DeviceDB(BaseModel):
# 添加设备
def addDevice(self, deviceName, proType, masterSlaveModel=masterSlaveModel, areaJson=json.dumps([]), pvLowerLimit=pvLowerLimit, pvUpperLimit=pvUpperLimit, pvUnit=pvUnit):
def addDevice(self, deviceName, proType, masterSlaveModel=masterSlaveModel, areaJson=json.dumps([]), pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit):
self.deviceName = deviceName
self.proType = proType
self.masterSlaveModel = masterSlaveModel

Loading…
Cancel
Save