GUI编程--PyQt5--布局管理

news2024/12/27 13:52:07

文章目录

  • 布局管理
  • 布局步骤
  • QHBoxLayout & QVBoxLayout
  • QFormLayout
  • QGridLayout

布局管理

布局,按照一定规则,将子控件放入父控件

  1. 手动布局;绝对布局move & resize & resizeEvent
  2. 布局管理器,实现快速布局,是控件的定位策略。
    在这里插入图片描述

布局步骤

  1. 创建布局对象(没有父控件)
from PyQt5.QtWidgets import QLayout, QBoxLayout, QHBoxLayout, QVBoxLayout, QGridLayout

def set_ui(self):
    # 1.实例化布局对象
    hb = QHBoxLayout()

    # 2. 布局格式
    hb.setContentsMargins(10, 20, 30, 40) # 外边距
    hb.setSpacing(100)  # 子控件间距
    # hb.setAlignment(Qt.AlignmentFlag.AlignCenter)

    # 3. 添加子控件, 创建子控件没有父控件
    l1 = QLabel("part1")
    l1.setStyleSheet("background-color: lightblue;")

    l2 = QLabel("part2")
    l2.setStyleSheet("background-color: pink;")

    hb.addWidget(l1)
    hb.addSpacing(100)  # 添加空白,控制布局
    hb.insertSpacing(0, 100)
    hb.addWidget(l2)
	# 替换子控件
	hb.replaceWidget(l2, l3)  # 能实现效果就不用隐藏l2
	l2.hide()   # 隐藏并没有释放内存
	# 移除控件
	hb.removeWidget(l3)
	l3.hide()
	
	# 添加子布局
	vb = QVBoxLayout()
	...
	vb.addLayout(hb)
	vb.addWidget(l4)
	
	# 布局方向
	hb.setDirection(hb.direction() + 1)
	
    # 4. 父控件(QWidget对象)  添加布局,然后将布局中的子控件自动加入该父控件
    self.setLayout(hb)
    self.setLayoutDirection(Qt.LayoutDirection.RightToLeft)

  1. 设置布局格式
  2. 布局对象添加子控件,创建子控件,不需父控件
  3. 父控件设置布局格式

 

QHBoxLayout & QVBoxLayout

伸缩因子

# 伸缩窗口时
hb.addWidget(l1, 1)  # 占1份
hb.addWidget(l2, 3)   # 占3份
hb.addStretch(4)   # 4份的空白
hb.addWidget(l3, 1)  # 占1份 


# 单独为一个子控件设置伸缩因子
hb.setStetchFactor(l1, 10)

在这里插入图片描述
 
 

QFormLayout

表单布局,实现如下的布局:
在这里插入图片描述

def set_ui(self):
    # 1.实例化布局对象
    fl = QFormLayout()  #

    # 2. 设置样式
    fl.setContentsMargins(10, 10, 10, 10)
    fl.setSpacing(5)  # 子控件之间的距离

    # 3. 添加子控件
    # 用户名 密码
    username = QLabel("用户名:")  # 不用父控件
    ule = QLineEdit()
    pwd = QLabel("密码:")
    pwd_le = QLineEdit()
    # 性别选择
    sex_label = QLabel("性别:")
    male = QRadioButton("男")
    male.clicked.connect(lambda :print("选择的性别: 男"))
    female = QRadioButton("女")
    hb = QHBoxLayout()
    hb.addWidget(male)
    hb.addWidget(female)

    # 登录按钮
    login_btn = QPushButton("登录")

    # 添加行
    fl.addRow(username, ule)  # widget, widget
    fl.addRow(pwd, pwd_le)
    fl.addRow(sex_label, hb) # widget, layout
    fl.addRow(login_btn)
	
	# fl.addRow("用户名(&n)", ule)  # 添加一行,并设置快捷键关联 alt + n 
	
    # 4. 父控件 设置布局
    self.setLayout(fl)

 
 

插入行
formLayout.insertRow(idx, ‘爱好’, xxx)
若索引超出范围,则在最后一行插入

获取控件位置
formLayout.getWidgetPosition(username)
formLayout.getLayoutPosition(hb)
formLayout.rowCount()

设置控件
formLayout.setWidget(0, QFormLayout.LabelRole, username)
formLayout.setWidget(0, QFormLayout.FieldRole, ule)
若一行被占用,只能设置label

删除一行
fl.removeRow(0) 输入索引,删除一行并释放子控件
fl.takeRow(2) 删除一行,未释放

fl.labelForField(ule) 获取label控件

设置行标签的策略
fl.setRowWrapPolicy(QFormLayout.RowWrapPolicy.WrapAllRows) 输入框在label的下面

# 表单的对齐
fl.setFormAlignment(Qt.AlignmentFlag.AlignCenter)
# label的对齐
fl.setLabelAlignment(Qt.AlignmentFlag.AlignRight)
fl.setVerticalSpacing(50)  # 垂直方向 行间距
fl.setHorizontalSpacing(40) # 水平方向 控件间距

 
 

QGridLayout

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

08 SQL优化

上一篇文章记录了索引的创建、使用、设计,除了索引方面还需要注意平日对于SQL的使用,对SQL进行优化;SQL的优化是建立在索引使用的基础上 这篇笔记将从以下7个方面对SQL进行优化。 1. 插入数据 使用批量插入,避免循环单条插入 注意批量插入不…

贤鱼的刷题日常(数据结构栈学习)--P1175 表达式的转换--题目详解

🏆今日学习目标: 🍀例题讲解P1175 表达式的转换 ✅创作者:贤鱼 ⏰预计时间:25分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:c 🍁贤鱼的个人社区,欢…

ServletConfig 和 ServletContext

1 ServletConfig 1.1 ServletConfig 介绍 ServletConfig 是 Servlet 的配置参数对象,在 Servlet 的规范中,允许为每一个 Servlet 都提供一些初始化的配置。所以,每个 Servlet 都有一个自己的 ServletConfig。作用:在 Servlet 的…

静息态fMRI中的非线性功能网络连接

在这项工作中,我们关注功能网络中的显式非线性关系。我们介绍了一种使用归一化互信息(NMI)计算不同大脑区域之间非线性关系的技术。我们使用模拟数据演示了我们提出的方法,然后将其应用到Damaraju等人先前研究过的数据集。静息状态fMRI数据包括151名精神…

玩转高并发,17年开发经验架构师,历时三年编写Java高并发三部曲

前言 5G,IO,多屏合一,方物互联时代来了!太分n式、高并发、微服务架构己经成为Java后端应用的主流架构。但是对Java高并发,springcloudRPC底层原理、Nginx底层原理等核心知识,广大的Java开发同学们相对欠缺…

【踩坑汇总】CLion开启QT编程

一下全部内容全都是大佬lht的经验,我只是记录一下给大家。 问题:Qt5Config.cmake找不到 解决办法: set(CMAKE_PREFIX_PATH "E:/Qt/Qt5.12.11/5.12.11/mingw73_64/lib/cmake/Qt5") 找到Qt5Config.cmake路径,添加上面这…

东南亚LazadaShopee文具类目好做吗?一文带你了解各国热销及需求品类

在东南亚,消费者刚刚经历完双11独有的“速度与激情”——11月11日00:11,开售11分钟,Lazada平台的销售额相比日销暴涨124倍;早上8:17,第一单跨越重洋的中国跨境商品就已成功送达签收。 东南亚&a…

Listen,Attend,and Spell(LAS)——李宏毅人类语言处理学习笔记3

Listen Encoder目标: 去掉noises,提取出相关信息 encoder有很多做法: CNN见文章:CNN-卷积神经网络 self-attention见文章self-attention Pyramid RNN将两个结合,然后送到下一层。Pooling over time则是两个中取一…

代谢组学文献分享:地中海饮食、血浆代谢组和心血管疾病风险

​全球三分之一的死亡由心血管疾病造成,2015-2020年美国膳食指南建议,地中海饮食是预防心血管疾病的一项重要且具有成本效益的战略措施。代谢组学文献分享,发表在期刊European Heart Journ-al(IF 22.637)上题目为“Th…

网络协议

网络通信协议:计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代 码结构、传输控制步骤、出错控制等制定标准。 问题:网络协议太复杂:计算机网络通信涉及内容很多,比如指定源地址和目标…

【多标签, 极限的多标签算法】评价指标梳理

具体研究多标签和极限多标签 (XML) 的时候, 合理使用评价指标是关键. 最近在研究极限多标签算法的时候发现了它和传统多标签算法的评价指标是有异的, 而且我曾经积累的传统多标签评价指标也没有一个系统的体系 (很混乱). 于是写下本文用于自我总结. 查询目录<想看什么直接通…

语音识别翻译怎么做?这些方法值得收藏

随着网络的不断发展&#xff0c;我们可以通过网络与世界各地的网友进行聊天。小伙伴们平时会和外国人交流吗&#xff1f;如果是文字聊天&#xff0c;我们看不懂的时候&#xff0c;还可以直接复制文字进行翻译。那如果外国网友发了段语音&#xff0c;结果我们大部分内容听不懂的…

电力行业人员定位管理解决方案之智能巡检

智能巡检引入大数据分析理念&#xff0c;通过数字化技术实现对生产现场各关键要素的全面感知和实时互联&#xff0c;形成项目现场“数据一个库、监管一张网、管理一条线“。 在信息技术高速发展的今天&#xff0c;传统人工巡视、手工纸介质记录的工作方式已经无法满足电力设备巡…

第7章 博客文章的前端渲染显示

说实话本人通过Vue页面实现前端对后端数据的渲染显示也是初学咋练&#xff0c;但后端实现本人却是老鸟&#xff0c;对于后端开发者来说如果&#xff0c;渲染显示的软件是浏览器&#xff0c;除非团队中有Vue方面的大拿&#xff0c;不管是PC浏览器还是移动PC浏览器&#xff0c;Ra…

元宇宙初体验

14天学习训练营导师课程&#xff1a; 张子良《 元宇宙体系结构、关键技术和实践探索》 前言 最近这段时间加入勤学会的学习中&#xff0c;我加入的是元宇宙相关的学习组&#xff0c;为什么我选择元宇宙&#xff0c;不仅因为元宇宙是应用场景和生活方式的未来&#xff0c;而且元…

启动 idea 弹出“Failed to load JVM DLL\bin\server\jvm.dll”错误的解决方法

打开idea报failed to load JVM DLL 原因1&#xff1a; 查看是否缺少Microsoft Visual C 2010 Redistributable Package x64&#xff0c;没有则安装。 地址&#xff1a; 32 bit: http://www.microsoft.com/download/en/details.aspx?id5555 64 bit: http://www.microsoft.com…

面试必问 创建10个a点击弹出下标

<script> // for (let i 1; i <11; i) { // var adocument.createElement("a"); // a.href"#"; // a.innerHTML"<br />a标签"i // document.body…

JDBC获取数据库连接

Driver接口实现类 Driver接口介绍 java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的&#xff0c;不同数据库厂商提供不同的实现。 在程序中不需要直接去访问实现了 Driver 接口的类&#xff0c;而是由驱动程序管理器类(java.sql.…

Android学习---zygote(上)

Zygote意思是受精卵&#xff0c;它在Java世界中起到了很重要的作用&#xff0c;Android是基于Linux内核的&#xff0c;SDK是基于Java世界的&#xff0c;native语言是基于C和C&#xff0c;起初一定是先存在native世界&#xff0c;那么Java世界是如何创建的&#xff1f;这就与zyg…

『LeetCode|每日一题』---->打家劫舍||

目录 1.每日一句 2.作者简介 『LeetCode|每日一题』打家劫舍|| 1.每日一题 2.解题思路 2.1 思路分析 2.2 核心代码 2.3 完整代码 2.4 运行结果 1.每日一句 任何事情把期待值降到最低&#xff0c;所有遇见的都是礼物 2.作者简介 &#x1f3e1;个人主页&#xff1a;XiaoXia…