使QTreeView自动调整大小到内容

时间:2013-02-24 15:08:18

标签: resize pyqt qtreeview qscrollarea

我正在尝试让QTreeView自动调整其内容的大小。这是我的设置:我正在尝试创建一个“智能”工具提示,QWidget Qt.Tool | Qt.FramelessWindowHintWindowFlags,效果很好。它包含一些布局,其中包含一些按钮(大小不变)和QTreeView。现在,无论何时将行添加到QTreeView的模型中,QTreeView都应自动增加其大小以避免垂直滚动条。

在工具提示窗口小部件和QSizePolicy.Expanding上设置QTreeView没有改变任何内容 - 也许我在这里缺少一些额外的标记或其他内容。

我还尝试了以下蛮力方法:

class ToolTip:
    def __init__(self):
        ...
        self.itemView.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
        self.itemView.verticalScrollBar().rangeChanged.connect(self.resizeViewVertically)

    def resizeViewVertically(self, min, max):
        self.resize(self.width(), self.height() + max)

大部分时间都有效,但并非总是如此。每隔一段时间(每隔一段时间,确切地说,但我不知道这是否是巧合),使用此代码,视图正确调整大小(即所有内容都适合,并且不需要滚动条),但滚动条不会消失,允许滚动到最后一行下方的空白区域。

1 个答案:

答案 0 :(得分:0)

您可能想要参考此项的工作原理: http://ftp.ics.uci.edu/pub/centos0/ics-custom-build/BUILD/PyQt-x11-gpl-4.7.2/examples/layouts/flowlayout.py

可以给你一些关于你需要什么的提示。它是一个布局,你可以放入一个滚动窗口以获得isntance,当主窗口被rsize时,它将重新排序所有小部件以适应