PyQt5布局管理器
布局分类
绝对定位:使用move方法将空间直接定死在某个坐标,不会随着窗口大小的改变而改变
可变布局:使用各种布局管理器,实现组件的位置和大小随着窗口的变化而变化
布局管理器
QHBoxLayout:水平布局管理器,水平大小自动变化,垂直大小不变
QVBoxLayout:垂直布局管理器,水平大小不变,垂直大小自动变化
QGridLayout:网格布局管理器,水平和垂直两个方向自动变化
QFormLayout:表单布局管理器,一行由两列组成,分别是显示和输入,水平大小自动变化,垂直大小不变
QSplitter:特殊的管理器,实际上是个控件,可以实现里面的子组件边界拖动功能
接口
| 方法 | 描述 |
| addLayout(layout, stretch) | 设置窗口的布局管理器,stretch表示伸缩量(默认值0) |
| addWidget(widget, stretch, aligment) | 添加控件到布局管理器中 |
| addSpacing(int) | 在控件之间添加间距,间距大小固定,单位是像素 |
| addStretch(stretch) | 在布局管理器中添加一个可伸缩的布局管理器 |
| addWidget(widget, x, y) | 网管布局管理器方法,在(x,y)处添加控件 |
| addWidget(widget, x, y, row,column, aligment) | 网管布局管理器方法,从(x,y)开始row行column列出添加控件(跨格) |
| addRow(label,edit) | 表单布局管理器方法,添加一行 |
例子
import random
import string
import sys from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QPainter, QFont, QColor, QPen, QBrush
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QVBoxLayout, QLabel, QGridLayout, \
QFormLayout, QLineEdit, QSplitter class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
# 水平布局管理
# hboxlayout = QHBoxLayout()
# # 设置所有组件间距,单位是像素
# # hboxlayout.setSpacing(50)
# hboxlayout.addWidget(QPushButton('1'), 1)
# # 添加空隙,单位是像素
# # hboxlayout.addSpacing(50)
# hboxlayout.addWidget(QPushButton('2'), 1)
# hboxlayout.addWidget(QPushButton('3'), 1)
# hboxlayout.addWidget(QPushButton('4'), 2)
# self.setLayout(hboxlayout) # 垂直布局管理
# vboxlayout = QVBoxLayout()
# vboxlayout.addWidget(QLabel('1'), 1)
# # 添加可伸缩的空隙
# # vboxlayout.addStretch(1)
# vboxlayout.addWidget(QLabel('2'), 1)
# vboxlayout.addWidget(QLabel('3'), 1)
# vboxlayout.addWidget(QLabel('4'), 2)
# self.setLayout(vboxlayout) # 网格布局管理
# gridLayout = QGridLayout()
# self.setLayout(gridLayout)
#
# gridLayout.addWidget(QPushButton('1'), 0, 0)
# gridLayout.addWidget(QPushButton('2'), 0, 1)
# gridLayout.addWidget(QPushButton('3'), 0, 2)
# gridLayout.addWidget(QPushButton('4'), 1, 0)
# # gridLayout.addWidget(QPushButton('5'), 1, 1)
# # gridLayout.addWidget(QPushButton('6'), 1, 2)
# gridLayout.addWidget(QPushButton('7'), 2, 0)
# # gridLayout.addWidget(QPushButton('8'), 2, 1)
# # gridLayout.addWidget(QPushButton('9'), 2, 2)
#
# # 一个组件占用多个格子
# gridLayout.addWidget(QPushButton('A'), 1, 1, 2, 2) # 表单布局管理
# formLayout = QFormLayout()
# self.setLayout(formLayout)
#
# formLayout.addRow(QLabel('用户名'), QLineEdit())
# formLayout.addRow(QLabel('密 码'), QLineEdit()) # 可拖动布局管理
hboxlayout = QHBoxLayout()
self.setLayout(hboxlayout) splitter = QSplitter()
hboxlayout.addWidget(splitter)
splitter.addWidget(QPushButton(''))
splitter.addWidget(QPushButton('')) if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.resize(500, 300)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
PyQt5布局管理器的更多相关文章
- PyQt5(2)——调整布局(布局管理器)第一个程序
我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本1 ...
- Swing布局管理器介绍
创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/128174 当选 ...
- java基础 布局管理器
概念: 组建在容器(比如JFrame)中的位置和 大小 是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组建的布局管理. 种类: java共提供了物种布局管理器:流式布局管理 ...
- JAVA GUI布局管理器
边界布局管理器: a.布局方式:是把整个容器划分为五个部分.东西南北中,南北要贯通,中间最大 (不仅是中间的范围最大,权利也最大)当周边不存在的时候中间会占领周边,当中间不存在的时候周边不能占据中间 ...
- Java Swing 第03记 布局管理器
几种Swing常用的布局管理器 BorderLaout 它将容器分为5个部分,即东.南.西.北.中,每一个区域可以容纳一个组件,使用的时候也是通过BorderLayout中5个方位常量来确定组件所在的 ...
- AWT布局管理器
布局管理器 容器内可以存放各种组件,而组件的位置和大小是由容器内的布局管理器来决定的.在AWT中为我们提供了以下5种布局管理器: ① FlowLayout 流式布局管理器 ② BorderLa ...
- SWT布局管理器
一.充满式布局管理器(FillLayout类) FillLayout类是最简单的布局类,它把组件摆放成一行或者一列,并强制组件大小一致.一般,组件的高度与最高的组件一致,宽度与最宽的组件相同.,它里面 ...
- Java——布局管理器
在Swing中使用的所有布局管理器都可以实现LayoutManager接口,在Swing中主要使用的5种布局管理器:FlowLayout.BorderLayout.GridLayout.CardLay ...
- Qt之Dialog\widget\ mainwindow的区别和布局管理器 & 分裂器的区别
1.Dialog\widget\ mainwindow的区别 注意mainwindow和widget的区别,mainwindow都工具栏和菜单栏 Dialog and mainwinodws 都是继承 ...
随机推荐
- vue通过属性绑定为元素设置class样式
第一种方式,直接传递一个数组,注意使用v-bind绑定 <h1 :class="['red','size'">这是一个h1文本</h1&g ...
- elasticSearch插件metricbeat收集nginx的度量指标
ngx_http_stub_status_module模块是Nginx中用来统计Nginx服务所接收和处理的请求数量,只要在编译安装Nginx的时候加上参数--with-http_stub_statu ...
- Jmeter系列(34)- 详解 Counter 计数器
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 计数器的作用:循环递增生成数 ...
- 从 Tapable 中得到的启发
Tapable Why Tapable 前端开发中 Webpack 本质上是基于事件流的运行机制,它的工作流程是将特定的任务分发到指定的事件钩子中去完成.而实现这一切的核心就是 tapable,Web ...
- 恕我直言你可能真的不会java第8篇-函数式接口
一.函数式接口是什么? 所谓的函数式接口,实际上就是接口里面只能有一个抽象方法的接口.我们上一节用到的Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare. 只有一个抽象 ...
- LeetCode60. 第k个排列
解法一:用next_permutation()函数,要求第k个排列,就从"123...n"开始调用 k - 1 次 next_permutation()函数即可. class So ...
- 读取和写入blob类型数据
读写oracle blob类型 http://zyw090111.iteye.com/blog/607869 http://blog.csdn.net/jeryjeryjery/article/de ...
- models.py连接mysql
安装pymysql: other setting---project Interpreter---+pymysql 更改数据库 在项目名的同名文件下的settings.py中DATABASES,改成 ...
- 数据的编码和解码--java例子
昨天借了一本<网络程序设计实验教程(java语言)>,然后看了第一章,一个Swing例子,于是为大家分享一下! 关于数据的编码与解码,我觉得就例子而言已经交待得非常清楚了,两种方法做的. ...
- (私人收藏)蓝色夜空背景的通用商务PPT模板
蓝色夜空背景的通用商务PPT模板 https://pan.baidu.com/s/1tsmPEdE5gjDDSxIyMDJGCA0m28