我正在开发一个具有QTableWidget的PyQt应用程序,它可能用于显示大量行.我想,每个列的宽度将由整列的最大元素宽度不仅由在的程序化细胞添加数据到表格部件的时刻显示的最大的元素来定义.
resizeColumnToContents()方法描述中的Qt文档说明了这一点
仅调整可见列的大小.重新实现sizeHintForColumn()以调整隐藏列的大小.
问题是,我究竟应该如何正确地做到这一点?不幸的是,我没有PyQt的实际经验,我无法找到任何这种方法的来源给我任何关于我应该怎么做的线索.
是否可以根据在任何给定时刻显示的当前内容进行调整大小,即在表格小部件收到任何paintEvent之后调整大小?
您只需要子类化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
Run Code Online (Sandbox Code Playgroud)
如果你要做很多添加元素并在resizeColumnToContents之后调用,你可能会想要以某种方式存储结果.这样,您不必每次都遍历所有行.