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 都是继承 ...
随机推荐
- Redis安装过程jemalloc/jemalloc.h报错
问题: [root@localhost redis-3.0.0]# make cd src && make all make[1]: Entering directory `/data ...
- 手机商品分享样式(纯html+css)
效果图: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- Java 中的数据结构类 Vector 和 ArrayList
今天刷算法题目时,使用到了 Java 的内置栈类 Stack,好奇它是怎么实现的,发现它是继承于 Vector 这个类.那么,就先学习下 Vector 这个类的实现吧! Vector 和 ArrayL ...
- xutils工具上传日志文件--使用https并且带进度条显示
package logback.ecmapplication.cetcs.com.myapplication; import android.app.Activity; import android. ...
- 分词搜索 sphinx+php+mysql
sphinx3.1.1的安装与使用 下载sphinx3.1.1 wget http://sphinxsearch.com/files/sphinx-3.1.1-612d99f-linux-amd64. ...
- shell基本正则表达式
基本正则表达式 星号* 匹配它前面的字符串或正则表达式任意次(包括0次).比如,“1122*” 将匹配11+1个或多个2,其可能匹配的字符串将是112.1122.112222.11223343等 句点 ...
- nova api报错network问题
安装openstack Rocky版本的时候,在未安装网络服务前,创建虚拟机,报以下错误 [root@controller2 nova]# openstack server create --flav ...
- SpringBoot--数据库管理与迁移(LiquiBase)
随着开发时间积累,一个项目会越来越大,同时表结构也越来越多,管理起来比较复杂,特别是当想要把一个答的项目拆分成多个小项目时,表结构拆分会耗很大的精力:如果使用LiquiBase对数据库进行管理,那么就 ...
- mybatis源码配置文件解析之四:解析plugins标签
在前边的博客在分析了mybatis解析typeAliases标签,<mybatis源码配置文件解析之三:解析typeAliases标签>.下面来看解析plugins标签的过程. 一.概述 ...
- cron表达式详解,cron表达式写法,cron表达式例子
(cron = "* * * * * *") cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}例 "0 0 12 ? ...