步骤1:我必须继承QHeaderView类并重写resizeEvent()函数,我从这里得到了它,但是他正在重写TableView的函数,而我是针对HeaderView编写的。
步骤2:然后,我将headerview的sectionResized连接到新函数以处理列的大小调整。 我希望能够在保持总宽度不变的情况下调整特定列的大小,做到这一点,当我缩小一列时,我将下一列以相同的数量扩展,反之亦然。 我以为我不需要执行步骤2,但是事实证明这是必要的。
在这个工作示例下面,我添加了一个水平拆分器,以便您可以尝试使用表调整大小功能。
import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant
class TableModel(QAbstractTableModel):
def __init__(self, parent, datain, headerdata):
QAbstractTableModel.__init__(self, parent)
self.arraydata=datain
self.headerdata=headerdata
def rowCount(self,p):
return len(self.arraydata)
def columnCount(self,p):
if len(self.arraydata)>0:
return len(self.arraydata[0])
return 0
def data(self, index, role):
if not index.isValid():
return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
return QVariant(self.arraydata[index.row()][index.column()])
def headerData(self, col, orientation, role):
if orientation==Qt.Horizontal and role==Qt.DisplayRole:
return self.headerdata[col]
return None
class MyHeaderView(QtWidgets.QHeaderView):
def __init__(self,parent):
QtWidgets.QHeaderView.__init__(self,Qt.Horizontal,parent)
self.sectionResized.connect(self.myresize)
def myresize(self, *args):
'''Resize while keep total width constant'''
# keep a copy of column widths
ws=[]
for c in range(self.count()):
wii=self.sectionSize(c)
ws.append(wii)
if args[0]>0 or args[0] |