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

118 lines
4.3 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
1 year ago
from UI.BlockParameterModel import VarTableModel, VarButtonDelegate
1 year ago
from utils.DBModels.DeviceParModels import *
class ParamsVHeader(QHeaderView):
def __init__(self, parent, datas):
super().__init__(Qt.Vertical, parent)
self.datas = datas
1 year ago
# print(1111)
1 year ago
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
height = 50 * (content[3].count('\r\n') + 1)
1 year ago
# valueHeight = 50 * (content[5].count('\r\n') + 1)
# height = desHeight if desHeight > valueHeight else valueHeight
# print(height, index)
1 year ago
if content[4] == 'DS-36':
1 year ago
height = height if height > 5 * 50 else 250
print(height)
# self.resizeSection(index, height)
1 year ago
if content[4] == 'DS-37':
1 year ago
height = height if height > 4 * 50 else 200
1 year ago
if content[4] == 'DS-39':
1 year ago
height = height if height > 7 * 50 else 350
1 year ago
if content[4] == 'DS-50':
1 year ago
height = height if height > 4 * 50 else 200
# self.resizeSection(index, height)
self.resizeSection(index, height)
1 year ago
return
1 year ago
class ParmView(QTableView):
1 year ago
def __init__(self, dbModel = None, blcokIndex = None, blockType = None):
1 year ago
super().__init__()
self.dbModel = dbModel
1 year ago
self.blcokIndex = blcokIndex
1 year ago
self.blockType = blockType
1 year ago
self.setHeader()
self.setupUi()
1 year ago
self.setData()
1 year ago
def setHeader(self):
1 year ago
self.setItemDelegateForColumn(7, VarButtonDelegate(self))
1 year ago
# self.setItemDelegateForColumn(5, ComboBoxDelegate(self))
1 year ago
1 year ago
self.model = VarTableModel(['序号','索引', '参数名', '描述', '数据类型', '访问', '当前值', '输入值'], [], table = self)
1 year ago
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)
1 year ago
self.setCustomColumnWidths([1, 1, 3, 8, 2, 2, 2, 3])
1 year ago
# 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[6] = ''
desc = data[3].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")
1 year ago
data[3] = result
1 year ago
data = data + ['', '', '']
self.model.append_data(data)
1 year ago
self.resizeHeader()
def resizeHeader(self):
1 year ago
# print(self.verticalHeader())
1 year ago
self.setVerticalHeader(ParamsVHeader(self, self.model.datas))
1 year ago
# QtCore.QTimer.singleShot(0, self.verticalHeader().updateGeometry)
1 year ago
1 year ago
1 year ago