如何将QStackedWidget的大小设置为子窗口小部件的最小大小?

时间:2019-08-21 13:48:07

标签: python pyqt pyqt5 qstackedwidget

在此示例中,无法使QLabel具有包含其文本的最小大小。我需要布局和堆叠式小部件,然后将其自身调整为适合标签所需的最小尺寸。

我使用了https://www.tutorialspoint.com/pyqt/pyqt_qstackedwidget.htm中的代码来演示我的问题。

设置大小策略似乎在应用程序启动时起作用,但是增加应用程序宽度最终会导致标签在列表达到一定宽度后扩展。

{{1}}

2 个答案:

答案 0 :(得分:1)

tl; dr

除去仅QStackedWidget以外的所有内容的大小策略设置(必须将其水平策略设置为Maximum),一切都应该没问题。

说明

我不得不承认:我一直觉得QSizePolicy枚举名称令人困惑(我知道我不是唯一的一个),所以我同情你的疑问。

设置拉伸长度只能部分解决该问题,因为有时您可能需要或想要手动设置拉伸长度,这可能会与某些尺寸策略混为一谈。

问题是您将大小策略设置为“最小”,正如QSizePolicy documentation所解释的那样:

  

sizeHint()最小且足够。该小部件可以展开[...]

那是因为Minimum使用GrowFlag
这意味着,如果布局“认为”窗口小部件有一些可用空间,它将使其扩展:Minimum并不意味着窗口小部件将使用其最小尺寸(或者更好的是其{{1 }}),但它将使用minimumSizeHint()作为布局的最小尺寸,同时保持其 expand 的容量;如果有可用空间,它将使用它。

您实际需要的是将水平策略设置为sizeHint(),尤其是将Maximum对象设置为 only (QStackWidget,而不是QWidget容器,或QLabel)。
这是因为Stack实际上使用了Maximum(同样来自QSizePolicy文档):

  

sizeHint()是最大值。小部件可以缩小任何数量   如果其他窗口小部件需要空间,则不会造成损害(例如,分隔符   线)。 不能大于,大​​于sizeHint()提供的大小。

也就是说,请注意,在某些情况下,特别是在标签带有自动换行符的情况下,QLabel存在已知问题。

答案 1 :(得分:0)

不确定这是否是正确的方法,但是添加拉伸因子似乎已经达到了我想要的目的。

hbox.addWidget(self.rightlist, stretch=1)