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.
119 lines
4.4 KiB
Python
119 lines
4.4 KiB
Python
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
|
|
|
|
from utils.DBModels.DeviceParModels import *
|
|
|
|
class ParamsVHeader(QHeaderView):
|
|
def __init__(self, parent, datas):
|
|
super().__init__(Qt.Vertical, parent)
|
|
self.datas = datas
|
|
|
|
# print(1111)
|
|
|
|
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)
|
|
height = 50 * (content[3].count('\r\n') + 1)
|
|
# valueHeight = 50 * (content[5].count('\r\n') + 1)
|
|
# height = desHeight if desHeight > valueHeight else valueHeight
|
|
# print(height, index)
|
|
if content[4] == 'DS-36':
|
|
height = height if height > 5 * 50 else 250
|
|
print(height)
|
|
# self.resizeSection(index, height)
|
|
if content[4] == 'DS-37':
|
|
height = height if height > 4 * 50 else 200
|
|
if content[4] == 'DS-39':
|
|
height = height if height > 7 * 50 else 350
|
|
if content[4] == 'DS-50':
|
|
height = height if height > 4 * 50 else 200
|
|
# self.resizeSection(index, height)
|
|
self.resizeSection(index, height)
|
|
return
|
|
|
|
|
|
class ParmView(QTableView):
|
|
def __init__(self, dbModel = None, blcokIndex = None, blockType = None):
|
|
super().__init__()
|
|
self.dbModel = dbModel
|
|
self.blcokIndex = blcokIndex
|
|
self.blockType = blockType
|
|
self.allUnitList = UnitTable.getAbleUint()
|
|
self.setHeader()
|
|
self.setupUi()
|
|
self.setData()
|
|
|
|
def setHeader(self):
|
|
self.setItemDelegateForColumn(7, 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')
|
|
|
|
#设置单元格宽度比例
|
|
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, 1, 3, 8, 2, 2, 2, 3])
|
|
|
|
|
|
# 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)
|
|
|
|
def setData(self):
|
|
# self.datas = PressureTranslationBlock.getallParame()
|
|
self.datas = self.dbModel.getallParameAndID()
|
|
for index, data in enumerate(self.datas):
|
|
data[6] = ''
|
|
desc = data[3].replace('\r\n', '').replace('\n', '')
|
|
lines = [desc[i:i+40] + "\r\n" for i in range(0, len(desc), 40)]
|
|
# 合并列表为一个字符串,移除最后一个换行符
|
|
result = "".join(lines).rstrip("\r\n")
|
|
data[3] = result
|
|
data = data + ['', '', '']
|
|
self.model.append_data(data)
|
|
self.resizeHeader()
|
|
|
|
def resizeHeader(self):
|
|
# print(self.verticalHeader())
|
|
self.setVerticalHeader(ParamsVHeader(self, self.model.datas))
|
|
# QtCore.QTimer.singleShot(0, self.verticalHeader().updateGeometry)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|