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 都是继承 ...
随机推荐
- Shiro实战教程-刘志敏-专题视频课程
Shiro实战教程-62人已学习 课程介绍 本教程只介绍基本的 Shiro 使用,不会过多分析源码等,重在使用. 适用人群: 1.了解基于Servlet进行Web应用开发 2.了解Spr ...
- MySQL LOAD DATA INFILE—批量从文件(csv、txt)导入数据
最近做的项目,有个需求(从Elastic Search取数据,业务运算后),每次要向MySQL插入1300万数据左右.最初用MySQL的executemany()一次插入10000条数据,统计的时间如 ...
- 在PHPstorm中使用数组短语法[],出现红色波浪
在PHPstorm中使用数组短语法[],出现红色波浪 1. 在tp3.2.3项目中使用数组短语法[],报错如下错误: Short array syntax is allowed in PHP 5.4 ...
- Redis持久化机制,优缺点,如何选择合适方式
一.什么是Redis持久化? 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失. 二.Redis 的持久化机制是什么?各自的优缺点? Redis 提供两种持久化机制 RDB(默认) 和 ...
- 自定义Springboot全局异常类
一.简要说明 如何实现网上文章基本是随便一搜就可以很快找到, 这里不再赘述. 二.Spring-web和Spring-webmvc 通过idea查看到两个注解位于 spring-web-5.2.2.R ...
- 使用CImage双缓冲
一普通显示:现在的VC显示图片非常方便,远不是VC6.0那个年代的技术可比,而且支持多种格式的如JPG,PNG. CImage _img; 初始化: _img.Load(L"map.png& ...
- JS中字符串和数组的相互转化
题目:利用var s1=prompt("请输入任意的字符串:") ,可以获取用户输入的字符串,试编程将用户输入的字符串“反转”,并且将字符串输出. 思路:字符串对象的方法中并没有实 ...
- 懂了!VMware/KVM/Docker原来是这么回事儿
云计算时代,计算资源如同小马哥当年所言,已经成为了互联网上的水和电. 虚拟主机.web服务器.数据库.对象存储等等各种服务我们都可以通过各种各样的云平台来完成. 而在云计算欣欣向荣的背后,有一个重要的 ...
- #Google HTML&CSS规范指南
Google HTML&CSS规范指南 翻译自原文 目录 Google HTML&CSS规范指南 1. 背景 2. 通用 2.1 通用样式规则 2.1.1 协议 2.2 通用格式规则 ...
- web前端达到什么水平,才能找到工作?
前端都需要学什么(可以分为八个阶段)<1>第一阶段: HTML+CSS:HTML进阶. CSS进阶.DIV+CSS布局.HTML+CSS整站开发. JavaScript基础:Js基础教程. ...