PyQt5布局管理(1)
Qt布局管理按简单分可分为绝对位置布局和布局管理器布局
一、绝对位置布局:
组件不放在布局管理器中,通过函数setGeometry(x,y,width,height)来设定组件相对其父窗口的位置。其中x,y是其左上角的坐标位置,width,height是组件的宽和高。
在绝对位置布局中,resize()可以调整组件尺寸,setGeometry()可以调整组件尺寸和位置,甚至重载sizeHint()函数也可以设定组件的尺寸。
存在的问题:绝对位置布局方式,组件的位置和尺寸固定,并不会随着父窗口的尺寸的改变而发生改变。
二、布局器管理布局:
布局管理器类:QHBoxLayout,QVBoxLayout,QGridBoxLayout
布局器的优点是,组件的布局根据用户设置和系统自行布局进行确定位置和尺寸,布局方式灵活,且组件的尺寸可以根据情况发生恰当的改变,布局美观。
1)控件尺寸的设置:
注意:
1.默认情况下,使用布局器布局后,无论是resize()还是setGeometry()都会失去作用,因为布局管理器默认布局尺寸和位置是根据sizeHint()保存的数值进行布局的,这也是我们明明在程序中通过resize()、setGeometry()函数或者在qss样式表中设置了组件的尺寸和位置,但组件的尺寸和位置并不会按照我们的设想布局的原因。
2.在布局管理器中,组件的长和宽默认会随父窗口的调整而缩小或放大,以充分利用额外的空间,这就导致组件设定的尺寸并没有很好的执行的原因。
几点规律:
前提是在布局管理器中
1.组件的默认尺寸跟上述函数设置有关,但更主要根据sizeHint()的值来确定,所以别对上面的函数抱太大希望,也就是说上面的函数在布局器中会失效;
sizeHint()保存着系统推荐的最佳的尺寸,默认条件下,组件的尺寸总是根据这个保存值显示。setSizePolicy可以改变显示方式。
2.如果要固定组件的尺寸,调用setFixSize()。setMaximumSize()和setMinimumSize()分别确定组件的最大和最小尺寸。
3.通常使用setSizePolicy(QSizePolicy,QSizePolicy)用来设定组件缩放模式,参数模式为:
| Constant | Value | Description |
|---|---|---|
| QSizePolicy.Fixed | 0 | 以 QWidget.sizeHint() 保存的值为定值,尺寸不再改变 |
| QSizePolicy.Minimum | GrowFlag | sizeHint()值是最小值,尺寸可以变大,但不能比sizeHint()保存的值更小 |
| QSizePolicy.Maximum | ShrinkFlag | sizeHint() 值为最大值,尺寸可以被挤压到任意小,但不能比sizeHint()保存的值更大 |
| QSizePolicy.Preferred | GrowFlag | ShrinkFlag | 以sizeHint()为最佳选择,但是根据情况也可以变大缩小 |
| QSizePolicy.Expanding | GrowFlag | ShrinkFlag | ExpandFlag | 以sizeHint()为合理的大小,但是会尽可能为组件提供更大的空间,即倾向于扩展 |
| QSizePolicy.MinimumExpanding | GrowFlag | ExpandFlag | sizeHint()是最小尺寸但也足够了,但是会尽可能获得更大的空间 |
| QSizePolicy.Ignored | ShrinkFlag | GrowFlag | IgnoreFlag | 忽略sizeHint()值,尽可能获得更大的空间 |
2)布局管理器的设置:
布局管理器自带的函数可以用于调整组件的位置,主要函数包括:
1.setContentsMargin(int left,int top,int right,int bottom) 设置布局器距离父窗体边缘的距离;
2.setSpacing(int) 设置布局管理器内组件之间的距离,默认继承自父管理器
3.addSpacing(int size) 在布局管理器的末尾添加一个大小不可拉伸的空间(一个QSpacerItem)。 QBoxLayout提供了默认的边距和间距。 该功能增加了额外的空间。
4.addStretch(int factor) 在布局管理器末尾添加一个可拉伸空间(一个QSpacerItem)。空间最小可以为0,但由拉伸因子决定。
5.addSpacrItem(QSpacerItem(int w,int h,QSizePolicy,QSizePolicy)) 添加一个QSpacerItem至布局末尾,作用相当于addSpaceing。但由于QSpacerItem空白项可根据其参数设置的模式表现固定模式或者扩展模式等,因此该函数添加的空白块是可以调节的。
PyQt5布局管理(1)的更多相关文章
- PyQt5——布局管理
PyQt5布局管理使用方法详见:https://blog.csdn.net/jia666666/article/list/3?t=1& PyQt5布局管理汇总: 1.QHBoxLayout 2 ...
- 四、PyQt5布局管理(绝对&相对、水平、垂直、格栅、表单)
目录 一.绝对布局 二.盒布局 三.格栅布局 四.格栅布局跨行跨列显示 布局管理即设置窗体上各个控件的位置,对于新手来说,这是学习的难点. 布局管理根据绝对坐标是否变动分为绝对布局和相对布局两大类.采 ...
- PyQt5布局管理器
布局分类 绝对定位:使用move方法将空间直接定死在某个坐标,不会随着窗口大小的改变而改变 可变布局:使用各种布局管理器,实现组件的位置和大小随着窗口的变化而变化 布局管理器 QHBoxLayout: ...
- pyqt5 -—-布局管理
绝对布局 例如: 我们使用move()方法定位了每一个元素,使用x.y坐标.x.y坐标的原点是程序的左上角. lbl1 = QLabel('Zetcode', self) lbl1.move(15, ...
- PyQt5之布局管理
目录 一 写在开头 1.1 本文内容 二 绝对布局 三 布局类 3.1 水平布局(QHBoxLayout)和垂直布局(QVBoxLayout) 3.2 水平布局和垂直布局实例 3.3 网格布局(QGr ...
- PyQT5速成教程-3 布局管理
本文由 沈庆阳 所有,转载请与作者取得联系! 布局(Layout)管理 Qt Designer中,在工具箱中最上方可以看到有4种布局.分别是垂直布局.水平布局.栅格布局和表单布局. 四种布局 布局 ...
- PyQt5教程——布局管理(4)
PyQt5中的布局管理 布局管理是GUI编程中的一个重要方面.布局管理是一种如何在应用窗口上防止组件的一种方法.我们可以通过两种基础方式来管理布局.我们可以使用绝对定位和布局类. 绝对定位 程序指定了 ...
- PyQt5(2)——调整布局(布局管理器)第一个程序
我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本1 ...
- PyQt5笔记之布局管理
代码:界面与逻辑分离 这是使用Designer做出的GUI,然后通过转换得到的Py代码.(界面文件) # -*- coding: utf-8 -*- # Form implementation gen ...
随机推荐
- dynamic_cast, RTTI, 整理
主要是参考下图,了解内存布局,然后写个实例程序就差不多明白了,但是需要熟悉指针转换. 1) 只有多态类才有RTTI信息,dynamic_cast正是运用RTTI进行转换,属于运行时类型检查. 2) d ...
- Spring Cloud 微服务四:熔断器Spring cloud hystrix
前言:在微服务架构中,一般都是进程间通信,有可能调用链都比较长,当有底层某服务出现问题时,比如宕机,会导致调用方的服务失败,这样就会发生一连串的反映,造成系统资源被阻塞,最终可能造成雪崩.在sprin ...
- Mockito when(...).thenReturn(...)和doReturn(...).when(...)的区别
在Mockito中打桩(即stub)有两种方法when(...).thenReturn(...)和doReturn(...).when(...).这两个方法在大部分情况下都是可以相互替换的,但是在使用 ...
- 二、Android应用的界面编程(六)ProgressBar及其子类[SeekBar、RatingBar]er
通常用于向用户显示某个耗时操作完成的百分比.Android支持几种风格的进度条,通过style属性可以为ProgressBar指定风格.该属性支持如下几个属性值. # @android:style/W ...
- BI测试
BI概念: 商业智能(Business Intelligence 简称BI),指数据仓库相关技术与应用的通称.指利用各种智能技术,来提升企业的商业竞争力.是帮助企业更好地利用数据提高决策质量的技术,包 ...
- 【BZOJ3316】JC loves Mkk 分数规划+单调队列
[BZOJ3316]JC loves Mkk Description Input 第1行,包含三个整数.n,L,R.第2行n个数,代表a[1..n]. Output 仅1行,表示询问答案.如果答案是整 ...
- 7.FactoryBean 和BeanFactory去区别
FactoryBean源码: /* * Copyright 2002-2012 the original author or authors. * * Licensed under the Apach ...
- spring boot的对象注入
1 需求 现在我们的项目中需要引入一个java类库,我想要很方便的使用该类库中的一个类,并且我想要创建这个类的一个单例对象.然后可以很方便的在各个模块中用@AutoWired进行对象注入. 比如一个配 ...
- 小程序发起post请求回调成功没有数据
get请求时为 header:{ "content-type":'application/json' },POST 请求会将data的值放在Request Payload里面,而不 ...
- jQuery:[1]实现图片上传并预览
jQuery:[1]实现图片上传并预览 原理 预览思路 1.当上传对象的input被触发并选择本地图片之后获取要上传的图片对象的URL: 2.把对象URL赋值给实现写好的img标签的src属性 Fil ...