在此示例中,无法使QLabel具有包含其文本的最小大小。我需要布局和堆叠式小部件,然后将其自身调整为适合标签所需的最小尺寸。
我使用了https://www.tutorialspoint.com/pyqt/pyqt_qstackedwidget.htm中的代码来演示我的问题。
设置大小策略似乎在应用程序启动时起作用,但是增加应用程序宽度最终会导致标签在列表达到一定宽度后扩展。
{{1}}
答案 0 :(得分:1)
除去仅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)