pyqt5_sizePolicy

发布时间 2023-08-25 17:19:54作者: hackerfree

sizePolicy是一个相当复杂的系统
其实pyqt在默认的sizePolicy下已经相当好看了,不过他还是允许自定义的
首先,sizePolicy是QWidget类的属性
所以这是属于控件的,主要使用对象就是程序中的那些控件

各种概念
minimumSize:widget允许的最小大小
minimumSizeHint:widget建议的最小大小
maximumSize:widget允许的最小大小
sizeHint:widget建议的大小
size:目前widget的实际大小

sizePolicy:widget所采用的大小调控策略
horizontalPolicy
verticalPolicy
hasHeightForWidth
hasWidthForHeight
这里面每一个都看起来很简单,但当他们联系起来时,Puzzling!
其中处于顶端的是sizePolicy
其他的属性均为其服务

-----------------------------------------------------
经过痛苦的研究,基本明白了个大概
对于sizePolicy,minimumSize sizeHint minimumSizeHint是起绝对作用的三个属性
可以将其分为两类
min sys: minimumSize&minimumSizeHint
hint sys: sizeHint‘控件建议大小’
min sys中的两个属性联合提供一个‘控件最小大小’值
联合机制:当minimumSize未设置(未设置指其值为QSize(0,0) or QSize())时,‘控件最小大小’取minimumSizeHint的值;
                      当minimumSize有设置,‘控件最小大小’取minimumSize的值,忽略minimumSizeHint
本质上,sizePolicy是为每一个控件提供一个范围区间
Fixed/Maximum Policy:
[‘控件最小大小’,‘控件建议大小’],若此区间=Ø,
也就是‘控件最小大小’>‘控件建议大小’的情况,取[‘控件最小大小’,unlimited)

Minimum/Preferred/Expanding Policy:
[‘控件最小大小’,unlimited)

非常简洁的policy,这是窗口中只有一个控件时实验出来的,那么他们交杂在一起会发生什么?
交杂原则:保证每一个控件的QSize都在其Policy归定的合理QSize区间内
最小对齐原则:如果在满足交杂原则的前提下,取最小值时,控件之间有能力进行对齐(对齐方向为布局管理器的另一个方向e.g. 横->纵),
那么在最小值的设定上要求保持对齐,ps: 此原则大概是为了美观,取最大值时没有限制,完全取决与控件的区间

e.g.
有两个widget均采用Maximum Policy
两者的区间分别为QSize(10,10)-QSize(300,300);QSize(50,50)-QSize(500,500)

那么最终两者实际放在一起区间的调整为: QSize(10,50)-QSize(300,300);QSize(50,50)-QSize(500,500)

 

本探究的环境为fedora,寻找到的规律确实奇葩,和官方文档并不匹配,不知MacOS,Windows上是什么效果