【问题标题】:PyQt Set column widthsPyQt 设置列宽
【发布时间】:2017-12-12 04:35:15
【问题描述】:

我有一个简单的 QTableView,我基本上想模仿这个:

view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)

但是,我实际上不能使用它,因为它会在每一行上调用 sizeHint,这在我的情况下是不可接受的,因为小部件需要在启动时做出响应,并且所有行的计算都需要很长时间。因此,这不是一个选项。

我知道单列的大小,它总是相同的,并且总是高度最大的。但是,此单元格的宽度可能并不总是一行中所有单元格中最宽的。我通过这样做使这些单元格的大小正确,但这显然会使所有单元格的大小相同,而且现在很多单元格都太宽了。

view.horizontalHeader().setDefaultSectionSize(200)
view.verticalHeader().setDefaultSectionSize(100)

我也尝试设置单独的列宽,但这似乎对宽度没有任何影响,如下所示:

view.setColumnWidth(0, 5)

另外,设置单个列的宽度也不是很好,因为我无法提前知道它们的宽度。

有什么方法可以使用(或模拟)ResizeToContents 方法(如上所示),但不需要检查所有单元格大小?

【问题讨论】:

    标签: python qt pyqt qt5 pyqt5


    【解决方案1】:

    您是否尝试过使用setResizeContentsPrecision 优化ResizeToContents 模式?

    设置使用 ResizeToContents 时 QHeaderView 计算大小的精确度。较低的值将提供不太准确但快速的自动调整大小,而较高的值将提供更准确的调整大小,但可能会很慢。

    数字精度指定在计算首选大小时应考虑多少个部分。

    默认值为 1000,这意味着具有自动调整大小的水平列在进行自动调整大小时将查看最多 1000 行。

    特殊值 0 表示它只会查看可见区域。特殊值 -1 表示查看所有元素。

    【讨论】:

    • 这正是我想要的,非常感谢。只是一个后续问题。这可以完美地处理列宽,但是,如果我尝试对垂直标题做同样的事情,它仍然会在所有行上调用 sizeHint。在这种情况下,这不是一个真正的问题,因为我知道我想要什么高度,但是我不明白为什么这不仅仅只看可见的行(它不知道有多少行可见的?)。此外,如果我将垂直标题精度设置为 ex。 2,所有的行仍然被检查。有什么见解吗?
    • @Pavlin,很高兴您通过这种方式找到了一些解决方法。我像你一样使用它,没有应用到行的高度,所以我不能告诉你更多。你用 -1、0 或一个小数字观察到相同的行为?
    • 我尝试了各种不同的值,但它们都导致必须检查所有行。无论如何,谢谢!
    猜你喜欢
    • 2016-11-01
    • 2020-11-28
    • 2017-05-12
    • 2017-09-13
    • 1970-01-01
    • 2011-05-26
    • 2013-09-15
    • 2010-10-31
    • 2010-10-30
    相关资源
    最近更新 更多