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/BlockParameterView.py

107 lines
3.8 KiB
Python

1 year ago
from PyQt5 import QtCore
from PyQt5.QtGui import QTextDocument
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QHeaderView, QAbstractItemView, QTableView, QWidget, QDesktopWidget
from UI.BlockParameterModel import VarTableModel, VarButtonDelegate, ComboBoxDelegate
from utils.DBModels.DeviceParModels import *
class ParamsVHeader(QHeaderView):
def __init__(self, parent, datas):
super().__init__(Qt.Vertical, parent)
self.datas = datas
def resizeEvent(self, event):
"""Resize table as a whole, need this to enable resizing"""
super(QHeaderView, self).resizeEvent(event)
for index, content in enumerate(self.datas):
self.setSectionResizeMode(index, QHeaderView.Fixed)
1 year ago
desHeight = 50 * (content[2].count('\r\n') + 1)
valueHeight = 50 * (content[5].count('\r\n') + 1)
height = desHeight if desHeight > valueHeight else valueHeight
self.resizeSection(index, height)
if content[3] == 'DS-36':
self.resizeSection(index, height)
if content[3] == 'DS-34':
self.resizeSection(index, height)
1 year ago
return
1 year ago
class ParmView(QTableView):
1 year ago
def __init__(self, dbModel = None, blcoknumber = None, blockType = None):
1 year ago
super().__init__()
self.dbModel = dbModel
1 year ago
self.blcoknumber = blcoknumber
1 year ago
self.blockType = blockType
1 year ago
self.setHeader()
self.setupUi()
1 year ago
self.setData()
1 year ago
def setHeader(self):
self.setItemDelegateForColumn(6, VarButtonDelegate(self))
self.setItemDelegateForColumn(5, ComboBoxDelegate(self))
self.model = VarTableModel(['相对索引', '参数名', '描述', '数据类型', '访问', '当前值', '输入值'], [], table = self)
def setupUi(self):
self.setShowGrid(True)
self.setAlternatingRowColors(True)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.setObjectName('BlockView')
1 year ago
#设置单元格宽度比例
self.header = self.horizontalHeader()
self.header.setSectionResizeMode(QHeaderView.Interactive)
self.header.setStretchLastSection(True)
self.proxy = QtCore.QSortFilterProxyModel(self)
# # self.parameTableView.proxy = self.proxy
self.proxy.setSourceModel(self.model)
self.setModel(self.proxy)
self.setCustomColumnWidths([1, 3, 9, 2, 2, 2, 2])
# self.header.checkClicked.connect(self.model.headerClick)
# self.setHorizontalHeader(self.header)
# self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
# self.header.setSectionResizeMode(0, QHeaderView.Fixed)
# self.header.resizeSection(0, 70)
def setCustomColumnWidths(self, ratios):
# 计算总比例
totalRatio = sum(ratios)
# 获取窗口宽度
screen = QDesktopWidget().screenGeometry()
width = screen.width() - 80
# 根据比例设置每列的宽度
for i, ratio in enumerate(ratios):
columnWidth = int(width * (ratio / totalRatio))
self.setColumnWidth(i, columnWidth)
1 year ago
def setData(self):
# self.datas = PressureTranslationBlock.getallParame()
self.datas = self.dbModel.getallParame()
1 year ago
for index, data in enumerate(self.datas):
1 year ago
data[5] = ''
1 year ago
desc = data[2].replace('\r\n', '').replace('\n', '')
1 year ago
lines = [desc[i:i+40] + "\r\n" for i in range(0, len(desc), 40)]
1 year ago
# 合并列表为一个字符串,移除最后一个换行符
result = "".join(lines).rstrip("\r\n")
data[2] = result
data = data + ['', '', '']
self.model.append_data(data)
1 year ago
self.resizeHeader()
def resizeHeader(self):
1 year ago
self.setVerticalHeader(ParamsVHeader(self, self.model.datas))
1 year ago
1 year ago