gpt4 book ai didi

pyqt - 在 QTableView 中的所有单元格(不仅显示)上重新实现 sizeHintForColumn() 到 resizeColumnsToContents()

转载 作者:行者123 更新时间:2023-12-01 01:50:03 31 4
gpt4 key购买 nike

我正在开发一个具有 QTableWidget 的 PyQt 应用程序,它可以潜在地用于显示大量行。我希望每个列的宽度将由整个列的最大元素宽度来定义,而不仅仅是由以编程方式将单元格数据添加到表格小部件时显示的最大元素来定义。

Qt docs在 resizeColumnToContents() 方法描述中指出

Only visible columns will be resized.Reimplement sizeHintForColumn() toresize hidden columns as well.

问题是,我到底应该如何正确地做到这一点?不幸的是,我在 PyQt 方面没有真正的经验,并且我无法找到此方法的任何来源来为我提供有关如何执行此操作的任何线索。

是否可以根据在任何给定时刻显示的当前内容来调整大小,即在表格小部件收到任何paintEvents之后调整大小?

最佳答案

您只需继承 QTableWidget 并重写 sizeHintForColumn 方法,返回一个描述所需宽度(以像素为单位)的整数。您可以使用QFontMetricswidth方法来计算宽度。在最长的字符串上。

class MyTable(QtGui.QTableWidget):

def sizeHintForColumn(self, column):

fm = self.fontMetrics()
max_width = 0

for i in range(self.rowCount()):

width = fm.width(self.item(i,column).text()) + 10
if width > max_width:
max_width = width

return max_width

如果您要添加大量元素并随后调用 resizeColumnToContents,您可能希望以某种方式存储结果。这样您就不必每次都循环遍历所有行。

关于pyqt - 在 QTableView 中的所有单元格(不仅显示)上重新实现 sizeHintForColumn() 到 resizeColumnsToContents(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6415343/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com