布局分类

绝对定位:使用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. 经典卷积神经网络算法(5):ResNet

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  2. JavaWeb网上图书商城完整项目--23.注册页面之html实现

    我们来分析下这个页面的代码如何实现: 我们来分下下层次结构: 1.首先最外层是一个大的div,然后又包括两个小的div,第一个div中包括一个span,第二个div是一个table表 我们来看程序的代 ...

  3. 【kubeadm初始化报错】failed to run Kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"

    复现场景 环境 系统:Centos7 kubernetes:1.18.5 docker:19.03.9 复现步骤 1.通过 yum 或 rpm 安装 kubelet kubectl kubeadm,并 ...

  4. 文档翻译经验分享(Markdown)

    该教程基于VSCode 加一些插件 youdao translate https://marketplace.visualstudio.com/items?itemName=Yao-Translate ...

  5. 查看Oracle当前用户下的(表视图,同义词...)

    查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件) 0.表空间 SQL>select username,default_tablespace from ...

  6. ref和out的使用及区别

    1.  ref的使用:使用ref进行参数的传递时,该参数在创建时,必须设置其初始值,且ref侧重于修改: 2. out的使用: 采用out参数传递时,该参数在创建时,可以不设置初始值,但是在方法中必须 ...

  7. python用类的方式创建线程---自创建类

    用类的方式创建线程---自创建类 import threadingimport time class MyThread(threading.Thread):#自建MyThread类继承threadin ...

  8. 简易的java爬虫项目

    简易的java爬虫项目 本项目仅供java新手学习交流,由于本人也是一名java初学者,所以项目中也有很多不规范的地方,希望各位高手不吝赐教,在评论区指出我的不足,我会虚心学习: 成果预览: 在开始讲 ...

  9. SpringBoot01-启动类启动做了那些事情

    1.第一个步骤进入SpringApplication构造函数 public SpringApplication(ResourceLoader resourceLoader, Class<?> ...

  10. BUUCTF-BJD(更新V1.0)

    CTF-Day1 (PS:第一次写博客,就是想记录自己的一一步一步) Misc: 问卷调查 | SOLVED |题最简单的misc-y1ng | SOLVED |Real_EasyBaBa | SOL ...