使QTreeView自动调整大小为内容

rai*_*ner 5 resize pyqt qtreeview qscrollarea

我正在尝试QTreeView自动调整其内容的大小.这是我的设置:我想创建一个"智能"工具提示这是一个QWidgetQt.Tool | Qt.FramelessWindowHint作为WindowFlags,这很好地工作.它包含一些布局,其中包含一些按钮(大小不变)和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)
Run Code Online (Sandbox Code Playgroud)

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

小智 1

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

可能会给您一些关于您需要什么的提示。它是一个布局,您可以将其放入滚动窗口中,当主窗口调整大小时,它将重新排序内部的所有小部件以适应