【发布时间】:2019-06-18 23:26:21
【问题描述】:
我正在编写第一个模型。
我不能改变列标题的宽度,但是高度会改变!
标题宽度不起作用。 标题的高度有效。
最小的可重现示例
import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
class QModelTable(QtCore.QAbstractTableModel):
def __init__(self, data_list):
super().__init__()
self.data_list = data_list
def columnCount(self, parent=None, *args, **kwargs):
return len(self.data_list[0])
def rowCount(self, parent=None, *args, **kwargs):
return len(self.data_list)
def data(self, index, role=None):
if not index.isValid():
return None
row = index.row()
col = index.column()
if role == QtCore.Qt.DisplayRole:
return self.data_list[row][col]
def headerData(self, section, orientation, role=None):
if role == QtCore.Qt.SizeHintRole:
if orientation == QtCore.Qt.Horizontal:
# I want a column width of 40px
return QtCore.QSize(40, 40) # The problem is here
test_data = (
('row 1 col 1', 'row 1 col 2', 'row 1 col 3'),
('row 2 col 1', 'row 2 col 2', 'row 2 col 3'),
('row 3 col 1', 'row 3 col 2', 'row 3 col 3'),
)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
model = QModelTable(test_data)
table = QtWidgets.QTableView()
table.setModel(model)
table.show()
sys.exit(app.exec_())
【问题讨论】:
-
我加了一个例子
-
@АлександрРублев SizeHintRole 仅用于计算每列的 sizeHint,在本例中为 40,即小部件将尝试建立该大小如果可能,也就是说,它是理想的,但受制于其他因素,例如:文本的大小,是否建立了固定大小等。例如,如果您减小宽度,您将看到最小宽度为 40。
-
@eyllanesc 认为事实并非如此。如果我想将列宽设置为 200px,它也不起作用。
-
@АлександрРублев 正如我告诉你的那样,它把它作为参考,但它没有明确使用它,QHeaderView 取决于 ResizeMode 建立使用大小。