@ -1,3 +1,4 @@
from ast import mod
import typing
import typing
import sys
import sys
@ -35,7 +36,7 @@ class QPushButton(QtWidgets.QPushButton):
class VarTableModel ( QAbstractTableModel ) :
class VarTableModel ( QAbstractTableModel ) :
''' 变量表模型类 '''
''' 变量表模型类 '''
def __init__ ( self , header , data : list , table = None ) :
def __init__ ( self , header , data : list , modbusType = None , table = None ) :
'''
'''
header : 表头变量
header : 表头变量
data : 表格内容
data : 表格内容
@ -48,16 +49,14 @@ class VarTableModel(QAbstractTableModel):
self . supportedDragActions ( )
self . supportedDragActions ( )
self . table = table
self . table = table
self . editableList = [ ] # 表格中可编辑项
self . editableList = [ ] # 表格中可编辑项
self . modbusType = modbusType
def initTable ( self ) :
def initTable ( self ) :
self . datas = [ ]
self . datas = [ ]
self . editableList = [ ]
self . editableList = [ ]
self . table . parent . initIcon ( )
if self . table :
# proType = Globals.getValue('currentProType')
self . table . parent . initIcon ( )
varDatas = ModbusVarManage . getAllVar ( self . modbusType )
varDatas = ModbusVarManage . getAllVar ( )
if not varDatas :
if not varDatas :
# self.layoutChanged.emit()
# self.layoutChanged.emit()
self . table . proxy . invalidate ( )
self . table . proxy . invalidate ( )
@ -189,43 +188,27 @@ class VarTableModel(QAbstractTableModel):
def refreshComboBox ( self ) :
def refreshComboBox ( self ) :
#功能类型的index是5, 通讯类型index是10
#功能类型的index是5, 通讯类型index是10
for num in range ( 1 , 3 ) :
for i in range ( len ( self . datas ) ) :
for i in range ( len ( self . datas ) ) :
cbRow = str ( ' cb ' + str ( i ) + str ( num * 5 ) )
cbRow = str ( ' cb ' + str ( i ) + str ( 5 ) )
index = self . index ( i , int ( num * 5 ) )
index = self . index ( i , int ( 5 ) )
delegate = self . table . itemDelegate ( index )
delegate = self . table . itemDelegate ( index )
delegate . paint ( self . table , QStyleOptionViewItem ( ) , index )
delegate . paint ( self . table , QStyleOptionViewItem ( ) , index )
try :
try :
comboBox = getattr ( delegate , cbRow )
comboBox = getattr ( delegate , cbRow )
# print(comboBox, i, num, cbRow)
# print(comboBox, i, num, cbRow)
except Exception as e :
except Exception as e :
continue
continue
if num == 1 :
if self . datas [ i ] [ 5 ] in [ 0 , 1 ] :
if self . datas [ i ] [ 5 ] in [ 0 , 1 ] :
comboBox . setCurrentIndex ( self . datas [ i ] [ 5 ] )
comboBox . setCurrentIndex ( self . datas [ i ] [ 5 ] )
elif self . datas [ i ] [ 5 ] in [ 3 , 4 ] :
elif self . datas [ i ] [ 5 ] in [ 3 , 4 ] :
comboBox . setCurrentIndex ( self . datas [ i ] [ 5 ] - 1 )
comboBox . setCurrentIndex ( self . datas [ i ] [ 5 ] - 1 )
else :
else :
comboBox . setCurrentIndex ( - 1 )
comboBox . setCurrentIndex ( - 1 )
if num == 2 :
if self . datas [ i ] [ 10 ] in [ 0 , 1 , 2 , 3 ] :
comboBox . setCurrentIndex ( self . datas [ i ] [ 10 ] )
else :
comboBox . setCurrentIndex ( - 1 )
class ModBusTCPSlaveModel ( VarTableModel ) :
def __init__ ( self , header , data : list , table = None ) :
'''
header : 表头变量
data : 表格内容
table : 缺省参数
'''
VarTableModel . __init__ ( self , header , data , table = table )
@ -324,10 +307,11 @@ class VarButtonDelegate(QItemDelegate):
def indexChange ( self ) :
def indexChange ( self ) :
sender = self . sender ( )
sender = self . sender ( )
modbusType = self . parent ( ) . modbusType
index = sender . currentIndex ( )
index = sender . currentIndex ( )
text = sender . itemText ( index )
text = sender . itemText ( index )
name = self . parent ( ) . model . datas [ sender . index [ 0 ] ] [ 3 ]
name = self . parent ( ) . model . datas [ sender . index [ 0 ] ] [ 3 ]
ModbusVarManage . editOrder ( name , text )
ModbusVarManage . editOrder ( name , text , modbusType )
self . parent ( ) . model . datas [ sender . index [ 0 ] ] [ sender . index [ 1 ] ] = text
self . parent ( ) . model . datas [ sender . index [ 0 ] ] [ sender . index [ 1 ] ] = text
def start_action ( self ) :
def start_action ( self ) :
@ -385,50 +369,50 @@ class VarButtonDelegate(QItemDelegate):
def edit_action ( self ) :
def edit_action ( self ) :
sender = self . sender ( )
sender = self . sender ( )
model = self . parent ( ) . model
model = self . parent ( ) . model
modbusType = self . parent ( ) . modbusType
fucationCbRow = str ( ' cb ' + str ( sender . index [ 0 ] ) + str ( 5 ) )
fucationCbRow = str ( ' cb ' + str ( sender . index [ 0 ] ) + str ( 5 ) )
fucationIndex = self . parent ( ) . model . index ( sender . index [ 0 ] , 5 )
fucationIndex = self . parent ( ) . model . index ( sender . index [ 0 ] , 5 )
fucationDelegate = self . parent ( ) . itemDelegate ( fucationIndex )
fucationDelegate = self . parent ( ) . itemDelegate ( fucationIndex )
fucationCheckbox = getattr ( fucationDelegate , fucationCbRow )
fucationCheckbox = getattr ( fucationDelegate , fucationCbRow )
modbusTypeCbRow = str ( ' cb ' + str ( sender . index [ 0 ] ) + str ( 10 ) )
modbusTypeIndex = self . parent ( ) . model . index ( sender . index [ 0 ] , 10 )
modbusTypeDelegate = self . parent ( ) . itemDelegate ( modbusTypeIndex )
modbusTypeCheckbox = getattr ( modbusTypeDelegate , modbusTypeCbRow )
if sender . isEdit :
if sender . isEdit :
sender . setIcon ( qtawesome . icon ( ' fa.save ' , color = ' #1fbb6f ' ) )
sender . setIcon ( qtawesome . icon ( ' fa.save ' , color = ' #1fbb6f ' ) )
sender . isEdit = False
sender . isEdit = False
sender . oldName = model . datas [ sender . index [ 0 ] ] [ 3 ]
sender . oldName = model . datas [ sender . index [ 0 ] ] [ 3 ]
model . editableList . append ( sender . index [ 0 ] )
model . editableList . append ( sender . index [ 0 ] )
fucationCheckbox . setEnabled ( True )
fucationCheckbox . setEnabled ( True )
modbusTypeCheckbox . setEnabled ( True )
else :
else :
varMes = model . datas [ sender . index [ 0 ] ]
varMes = model . datas [ sender . index [ 0 ] ]
name , des , varType , slaveID , address , min , max , modbusType, order = str ( varMes [ 3 ] ) , str ( varMes [ 4 ] ) , str ( varMes [ 5 ] ) , str ( varMes [ 6 ] ) , str ( varMes [ 7 ] ) , str ( varMes [ 8 ] ) , str ( varMes [ 9 ] ) , str ( varMes [ 10 ] ) , str ( varMes [ 1 1] )
name , des , varType , slaveID , address , min , max , order = str ( varMes [ 3 ] ) , str ( varMes [ 4 ] ) , str ( varMes [ 5 ] ) , str ( varMes [ 6 ] ) , str ( varMes [ 7 ] ) , str ( varMes [ 8 ] ) , str ( varMes [ 9 ] ) , str ( varMes [ - 1] )
# print(name, des, varType, slaveID, address, min, max, order)
# print(name, des, varType, slaveID, address, min, max, order)
if not name or not varType :
if not name or not varType :
reply = QMessageBox . question ( self . parent ( ) ,
reply = QMessageBox . question ( self . parent ( ) ,
' 警告 ' ,
' 警告 ' ,
" 有字段为空 " ,
" 有字段为空 或输入错误 " ,
QMessageBox . Yes )
QMessageBox . Yes )
return
return
if sender . oldName and ModBusVar . getByName ( sender . oldName ) :
if sender . oldName and Globals( ) [ modbusType + ' Var ' ] . getByName ( sender . oldName ) :
if sender . oldName == name or [ varMes [ 3 ] for varMes in model . datas ] . count ( name ) < 2 :
if sender . oldName == name or [ varMes [ 3 ] for varMes in model . datas ] . count ( name ) < 2 :
ModbusVarManage . editVar ( name = sender . oldName , Nname = name , des = des , varType = varType , slaveID = slaveID , address = address , min = min , max = max , order = order , modbusType = modbusType )
ModbusVarManage . editVar ( name = sender . oldName , Nname = name , des = des ,
varType = varType , slaveID = slaveID , address = address ,
min = min , max = max , order = order , modbusType = modbusType )
else :
else :
QMessageBox . information ( self . parent ( ) , ' 提示 ' , ' 已有同名变量 ' )
QMessageBox . information ( self . parent ( ) , ' 提示 ' , ' 已有同名变量 ' )
return
return
else :
else :
res = ModbusVarManage . createVar ( varName = name , varType = varType , des = des , address = address , slaveID = slaveID , min = min , max = max , order = order , modbusType = modbusType )
res = ModbusVarManage . createVar ( varName = name , varType = varType , des = des ,
address = address , slaveID = slaveID , min = min ,
max = max , order = order , modbusType = modbusType )
if res :
if res :
QMessageBox . information ( self . parent ( ) , ' 提示 ' , ' 已有同名变量 ' )
QMessageBox . information ( self . parent ( ) , ' 提示 ' , ' 已有同名变量 ' )
return
return
sender . setIcon ( qtawesome . icon ( ' fa.pencil ' , color = ' #4c8cf2 ' ) )
sender . setIcon ( qtawesome . icon ( ' fa.pencil ' , color = ' #4c8cf2 ' ) )
rowIndex = sender . index [ 0 ]
rowIndex = sender . index [ 0 ]
varMes = ModbusVarManage . getByName ( name )
varMes = ModbusVarManage . getByName ( name , modbusType )
varMes . append ( ' int ' )
varMes . append ( ' int ' )
varMes . insert ( 1 , ' ' )
varMes . insert ( 1 , ' ' )
varMes . insert ( 2 , ' ' )
varMes . insert ( 2 , ' ' )
@ -437,7 +421,6 @@ class VarButtonDelegate(QItemDelegate):
sender . isEdit = True
sender . isEdit = True
fucationCheckbox . setEnabled ( False )
fucationCheckbox . setEnabled ( False )
modbusTypeCheckbox . setEnabled ( False )
model . editableList . remove ( sender . index [ 0 ] )
model . editableList . remove ( sender . index [ 0 ] )
@ -459,29 +442,22 @@ class VarButtonDelegate(QItemDelegate):
class ModbusTypeBox ( QItemDelegate ) :
class ModbusTypeBox ( QItemDelegate ) :
def __init__ ( self , parent = None ) :
def __init__ ( self , parent = None ) :
super ( ModbusTypeBox , self ) . __init__ ( parent )
super ( ModbusTypeBox , self ) . __init__ ( parent )
self . items = items
self . comboxType = comboxType
def paint ( self , painter , option , index ) :
def paint ( self , painter , option , index ) :
if ( index . column ( ) == 5 or index . column ( ) == 10 ) and index . row ( ) not in self . parent ( ) . model . editableList :
if ( index . column ( ) == 5 ) and index . row ( ) not in self . parent ( ) . model . editableList :
data = self . parent ( ) . model . datas [ index . row ( ) ]
data = self . parent ( ) . model . datas [ index . row ( ) ]
comBox = str ( ' cb ' + str ( index . row ( ) ) + str ( index . column ( ) ) )
comBox = str ( ' cb ' + str ( index . row ( ) ) + str ( index . column ( ) ) )
setattr ( self , comBox , QComboBox ( ) )
setattr ( self , comBox , QComboBox ( ) )
comboBox = getattr ( self , comBox )
comboBox = getattr ( self , comBox )
comboBox . addItems ( self . items )
items = [ ' Coil Status ' , ' Input Status ' , ' Input Register ' , ' Holding Register ' ]
if self . comboxType == ' founctionCombox ' :
comboBox . addItems ( items )
if self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] in [ 0 , 1 ] :
if self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] in [ 0 , 1 ] :
comboBox . setCurrentIndex ( self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] )
comboBox . setCurrentIndex ( self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] )
elif self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] in [ 3 , 4 ] :
elif self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] in [ 3 , 4 ] :
comboBox . setCurrentIndex ( self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] - 1 )
comboBox . setCurrentIndex ( self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] - 1 )
else :
else :
comboBox . setCurrentIndex ( - 1 )
comboBox . setCurrentIndex ( 0 )
elif self . comboxType == ' modbusTypeCombox ' :
if self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] in [ 0 , 1 , 2 , 3 ] :
comboBox . setCurrentIndex ( self . parent ( ) . model . datas [ index . row ( ) ] [ index . column ( ) ] )
else :
comboBox . setCurrentIndex ( - 1 )
# self.parent().model.comboboxList.append(comboBox)
comboBox . currentIndexChanged . connect ( self . indexChange )
comboBox . currentIndexChanged . connect ( self . indexChange )
comboBox . setObjectName ( ' ModbusTypeBox ' )
comboBox . setObjectName ( ' ModbusTypeBox ' )
@ -515,10 +491,7 @@ class ModbusTypeBox(QItemDelegate):
def indexChange ( self ) :
def indexChange ( self ) :
sender = self . sender ( )
sender = self . sender ( )
index = sender . currentIndex ( )
index = sender . currentIndex ( )
if self . comboxType == ' founctionCombox ' :
if index in [ 2 , 3 ] :
if index in [ 2 , 3 ] :
index + = 1
index + = 1
self . parent ( ) . model . datas [ sender . index [ 0 ] ] [ sender . index [ 1 ] ] = index
self . parent ( ) . model . datas [ sender . index [ 0 ] ] [ sender . index [ 1 ] ] = index
elif self . comboxType == ' modbusTypeCombox ' :
self . parent ( ) . model . datas [ sender . index [ 0 ] ] [ sender . index [ 1 ] ] = index