布局分类

绝对定位:使用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布局管理器的更多相关文章

  1. PyQt5(2)——调整布局(布局管理器)第一个程序

    我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本1 ...

  2. Swing布局管理器介绍

    创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/128174 当选 ...

  3. java基础 布局管理器

    概念: 组建在容器(比如JFrame)中的位置和 大小 是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组建的布局管理. 种类: java共提供了物种布局管理器:流式布局管理 ...

  4. JAVA GUI布局管理器

    边界布局管理器: a.布局方式:是把整个容器划分为五个部分.东西南北中,南北要贯通,中间最大 (不仅是中间的范围最大,权利也最大)当周边不存在的时候中间会占领周边,当中间不存在的时候周边不能占据中间 ...

  5. Java Swing 第03记 布局管理器

    几种Swing常用的布局管理器 BorderLaout 它将容器分为5个部分,即东.南.西.北.中,每一个区域可以容纳一个组件,使用的时候也是通过BorderLayout中5个方位常量来确定组件所在的 ...

  6. AWT布局管理器

    布局管理器 容器内可以存放各种组件,而组件的位置和大小是由容器内的布局管理器来决定的.在AWT中为我们提供了以下5种布局管理器: ①   FlowLayout 流式布局管理器 ②   BorderLa ...

  7. SWT布局管理器

    一.充满式布局管理器(FillLayout类) FillLayout类是最简单的布局类,它把组件摆放成一行或者一列,并强制组件大小一致.一般,组件的高度与最高的组件一致,宽度与最宽的组件相同.,它里面 ...

  8. Java——布局管理器

    在Swing中使用的所有布局管理器都可以实现LayoutManager接口,在Swing中主要使用的5种布局管理器:FlowLayout.BorderLayout.GridLayout.CardLay ...

  9. Qt之Dialog\widget\ mainwindow的区别和布局管理器 & 分裂器的区别

    1.Dialog\widget\ mainwindow的区别 注意mainwindow和widget的区别,mainwindow都工具栏和菜单栏 Dialog and mainwinodws 都是继承 ...

随机推荐

  1. Idea 快捷生成类注释与方法注释

    这篇博客应该在刚使用IDEA 的时候就写了.  但是一直忘了.  今天使用新的api 接口文档生成工具 JApiDocs  的时候,看其上面有编码规范, 注释规范. 就想起了IDEA 类中, 方法中快 ...

  2. Vue错误汇总

    1.Vue导入js后没反应{{msg}}仍是{{msg}} 错误原因:js里写错了,或者没new一个Vue html页面: 解决方法:代码加入 new

  3. java基础——并发1

    一.并发的定义 并发:对于这个概念一直就是没怎么搞懂,就是感觉特别的生疏,(自己从从字面上理解就是多个东西,一起出发),所以就上网上查了一些资料: 同时拥有两个或多个线程,如果程序在单核处理器上运行, ...

  4. Git的常用命令记录

    Git的常用命令记录 1.与远程仓库建立连接,即关联一个远程库 git remote add origin git@server-name:path/repo-name.git; 2.查看当前分支  ...

  5. soapUI使用小结(一)

    本篇博客是照搬虫师的<Web接口开发与自动化测试>一书的soapUI测试工具一节 以及博文http://blog.csdn.net/a19881029/article/details/26 ...

  6. SQL运行内幕:从执行原理看调优的本质

    相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如: 避免 select *: join字段走索引: 慎用in和not in,用exists取代in: 避免在where子句中对字段进行 ...

  7. 利用oracle数据库闪回功能将oracle数据库按时间点恢复

    oracle更新脚本把原数据冲了,并且没有备份,急煞我也         解决办法:         oracle数据库有闪回功能:   select * from tab 可以查出已被删除的表    ...

  8. 初探numpy——广播和数组操作函数

    numpy广播(Broadcast) 若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算 import numpy as np a=np.array( ...

  9. Nginx 从入门到放弃(二)

    学习完了nginx的基本知识后,我们来了解下nginx的虚拟主机. 说到虚拟主机,那就得说一说虚拟主机的三种方式了 基于端口的虚拟主机 基于域名的虚拟主机 基于ip的虚拟主机 基于端口实现虚拟主机 只 ...

  10. Vmware - 安装并启动 Centos 8

    下载 Linux 安装包 https://mirrors.aliyun.com/centos/8.1.1911/isos/x86_64/ 不同版本的 Centos https://mirrors.al ...