我 的 个 人 主 页: 失心疯的个人主页
入 门 教 程 推 荐 : Python零基础入门教程合集
虚 拟 环 境 搭 建 : Python项目虚拟环境(超详细讲解)
PyQt5 系 列 教 程: Python GUI(PyQt5)文章合集
Oracle数据库教程: Oracle数据库文章合集
优 质 资 源 下 载 : 资源下载合集
QSizePolicy 控件尺寸策略
setSizePolicy(self, QSizePolicy) # 通过QSizePolicy对象设置控件尺寸策略
setSizePolicy(self, QSizePolicy.Policy,QSizePolicy.Policy) # 通过QSizePolicy对象枚举值设置控件水平和垂直的尺寸策略
QSizePolicy.Fixed # widget的实际尺寸只参考sizeHint()的返回值,不能伸展(grow)和收缩(shrink)
QSizePolicy.Minimum # 可以伸展和收缩,不过minimumSizeHint()的返回值规定了widget能缩小到的最小尺寸
QSizePolicy.Maximum # 可以伸展和收缩,不过sizeHint()的返回值规定了widget能伸展到的最大尺寸
QSizePolicy.Preferred # 可以伸展和收缩,但没有优势去获取更大的额外控件使自己的尺寸比sizeHint()的返回值更大
QSizePolicy.Expanding # 可以伸展和收缩,它会尽可能多的去获取额外的控件,比Preferred更具优势
QSizePolicy.MinimumExpanding # 可以伸展和收缩,不过minimumSizeHint()的返回值规定了widget能缩小到的最小尺寸。它比preferred更具优势获取额外控件
QSizePolicy.Ignored # 忽略sizeHint()的作用
# 创建QSizePolicy对象
QSizePolicy()
# 创建QSizePolicy对象的同时,通过QSizePolicy的枚举值设置水平和垂直方向策略
QSizePolicy(QSizePolicy.Policy, QSizePolicy.Policy, type: QSizePolicy.ControlType = QSizePolicy.DefaultType)
QSizePolicy(Any)
QSizePolicy(QSizePolicy)
setHorizontalPolicy(self, QSizePolicy.Policy) # 设置水平方向策略
setHorizontalStretch(self, int) # 设置水平方向伸缩因子
setVerticalPolicy(self, QSizePolicy.Policy) # 设置垂直方向策略
setVerticalStretch(self, int) # 设置垂直方向伸缩因子
setRetainSizeWhenHidden(self, bool) # 设置控件隐藏时是否保留空间
setHeightForWidth(self, bool) # 设置小部件的首选高度是否取决于其宽度
setWidthForHeight(self, bool) # 设置小部件的首选宽度是否取决于其高度
expandingDirections(self) -> Qt.Orientations # 返回一个部件是否可以比sizeHint()使用更多的空间
from PyQt5.Qt import *
import sys
class MyLabel(QLabel):
def sizeHint(self):
return QSize(200, 50)
def minimumSizeHint(self):
return QSize(100, 10)
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QSizePolicy-初体验')
self.resize(500, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
lab1 = QLabel('标签1')
lab2 = QLabel('标签2')
lab3 = QLabel('标签3')
btn1 = QPushButton('按钮1')
btn2 = QPushButton('按钮2')
btn3 = QPushButton('按钮3')
mlab1 = MyLabel('自定义标签1')
mlab2 = MyLabel('自定义标签2')
mlab3 = MyLabel('自定义标签3')
lab1.setStyleSheet('background-color:cyan;')
lab2.setStyleSheet('background-color:yellow;')
lab3.setStyleSheet('background-color:green;')
mlab1.setStyleSheet('background-color:cyan;')
mlab2.setStyleSheet('background-color:yellow;')
mlab3.setStyleSheet('background-color:green;')
lab_v_layout = QVBoxLayout()
btn_v_layout = QVBoxLayout()
mlab_v_layout = QVBoxLayout()
h_layout = QHBoxLayout()
self.setLayout(h_layout)
h_layout.addLayout(lab_v_layout)
h_layout.addLayout(btn_v_layout)
h_layout.addLayout(mlab_v_layout)
lab_v_layout.addWidget(lab1)
lab_v_layout.addWidget(lab2)
lab_v_layout.addWidget(lab3)
btn_v_layout.addWidget(btn1)
btn_v_layout.addWidget(btn2)
btn_v_layout.addWidget(btn3)
mlab_v_layout.addWidget(mlab1)
mlab_v_layout.addWidget(mlab2)
mlab_v_layout.addWidget(mlab3)
# 方法1:通过QSizePolicy的枚举值设置水平和垂直方向的策略
# mlab1.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
# mlab2.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum)
mlab1.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
mlab2.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
mlab3.setSizePolicy(QSizePolicy.MinimumExpanding,QSizePolicy.MinimumExpanding)
# 方法2:通过QSizePolicy对象设置策略
# sp = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
# sp = QSizePolicy()
# sp.setVerticalPolicy(QSizePolicy.Preferred)
# sp.setHorizontalPolicy(QSizePolicy.Expanding)
# mlab3.setSizePolicy(sp)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())