Qt Designer的尺寸策略学习笔记

        在 PySide6(或者 PyQt6)中,小部件的 sizePolicy 主要用于控制小部件在布局中的行为,特别是在调整窗口大小时。sizePolicy 由两个主要策略组成:水平策略和垂直策略。它们可以进一步细分为伸展、固定、最小、最大等类型。

术语解释:    以宽度为例                                                                             

Fixed(固定):小部件的宽度是固定的,不会随父级窗口的大小调整而改变。
Minimum(最小):小部件的宽度可以增大,但不会小于其最小宽度。
Maximum(最大):小部件的宽度可以减小,但不会超过其最大宽度。
Preferred(首选):小部件的宽度会根据内容的需求调整,但也可以随父级窗口的大小调整。
Expanding(扩展):小部件会扩展以填满额外的空间,通常会与其他小部件一起填充布局。
Ignored(忽略):小部件的宽度策略被忽略,不参与布局计算。
MinimumExpanding(最小扩展):小部件将试图在布局中占据足够的空间来显示其内容,并且当布局有额外空间时,也会相应地伸展。

策略的进一步解释和优先级:

Fixed(固定):

小部件的大小是固定的,不随父窗口的大小改变。
优先级最低。


Minimum(最小):

小部件不会小于其最小尺寸,但可以扩展到更大的尺寸。
仍然可以接受布局提供的更多空间,但不会优先占用。


Maximum(最大):

小部件的大小可以扩大到最大尺寸,但不会超过这个值。
这个策略通常与 Minimum 或 Fixed 策略结合使用。


Preferred(首选):

小部件的大小根据内容要求设置一个首选大小,布局会优先考虑这个尺寸。
在没有额外空间的情况下,布局可以根据此值调整小部件的大小。


Expanding(扩展):

小部件会尽可能扩展以填满可用空间,与其他 Expanding 策略的小部件一起竞争空间。
优先级高于 Minimum 和 Preferred。


MinimumExpanding(最小扩展):

小部件至少会保持其最小大小,并有能力扩展以填充额外空间。
在需要时优先于 Minimum 和 Minimum 策略。


Ignored(忽略):

小部件的尺寸策略被忽略,不参与布局计算。
优先级最低,通常不希望使用此策略。
策略之间的关系与优先级


固定(Fixed) 小部件在尺寸方面是最不灵活的,通常不参与空间竞争。

忽略(Ignored) 策略中的小部件在布局中不做任何空间计算,但这同样不利于其大小,因此其使用应该非常谨慎。

最小(Minimum) 策略小部件最小只会按 minimumSizeHint() 的值展示并且可以扩展。

首选(Preferred) 策略给小部件一个理想的空间,但小部件仍然可以在需要时调整尺寸。

扩展(Expanding) 策略优先级更高于 Minimum 和 Preferred,它会尽量占用更多空间。

最小扩展(MinimumExpanding) 策略结合了 Minimum 和 Expanding 策略,可以保证小部件最小需求并尽量扩展。

        使用 Minimun 和 Expanding 时,每个小部件的 伸展因子 决定了其在父容器中所占的空间比例。即使两者都设置为 Expanding,具有更大伸展因子的小部件将占据更多的空间。

        测试用的组态画面,两个QL Abel,label1和label2,作为子部件。一个QFrame,作为父部件,将子部件拖入父部件,以下均以水平策略为例:

        将QFrame ax内设置为水平布局。子部件label1的策略为Minimum,minimumSize =100,maximumSize =400,子部件label2的策略为Expanding,其余默认。

        先把子部件label1拖进父部件,再温习一遍Minimum策略:

 所以,显示结果如下图:

        由于父部件只有label1 一个子部件,所以label1 接受了尽可能多的空间,直至maximumSize:400。如果此时将maximumSize设为默认最大值,它甚至会将父部件占满。这个似乎有些违背常理,在初学的时候曾经纠缠了我很久。因为我明明设的是Minimum策略,它为什么给设在了最大尺寸?所以一定要理解Minimum策略与minimumSize之间的关系,Minimum策略的含义是:小部件有一个尺寸的下限,当某种策略或设置使小部件的尺寸缩小时,尺寸不得小于minimumSize。换言之,实际的尺寸取决于策略的缩放趋势和相邻策略的优先级,以及伸展因子。

        接着往下:把子部件label2拖进父部件:

前面说过,子部件label2的策略为Expanding ,而

所以, 子部件label2的宽的就尽可能大,直到子部件label1的尺寸减小到minimumSize,100。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝海拓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值