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

113 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)
self.resizeSection(index, 50 * (content[2].count('\r\n') + 1))
return
class VarTableView(QTableView):
def __init__(self, parent=None):
super(VarTableView, self).__init__(parent)
self.parent = parent
self.setHeader()
self.setupUi()
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)
class PressureTBlockView(VarTableView):
def __init__(self, datas = None):
super().__init__()
self.datas = datas
self.initUI()
def initUI(self):
if not self.datas:
self.datas = PressureTranslationBlock.getallParame()
for index, data in enumerate(self.datas):
desc = data[2].replace('\r\n', '').replace('\n', '')
lines = [desc[i:i+50] + "\r\n" for i in range(0, len(desc), 50)]
# 合并列表为一个字符串,移除最后一个换行符
result = "".join(lines).rstrip("\r\n")
data[2] = result
data = data + ['', '', '']
self.model.append_data(data)
self.setVerticalHeader(ParamsVHeader(self, self.model.datas))
1 year ago
class AIFunctionBlockView(PressureTBlockView):
def __init__(self):
self.datas = AIFunctionBlock.getallParame()
super().__init__(self.datas)
class PhysicalBlockView(PressureTBlockView):
def __init__(self):
self.datas = PhysicalBlock.getallParame()
super().__init__(self.datas)