PyQt5 笔记(01):嵌套布局

简介: PyQt5 有四种布局:水平(QHBoxLayout)、竖直(QVBoxLayout)、网格(QGridLayout)、表单(QFormLayout)在窗体中单一的布局应该不难,但若是比较复杂的布局,一般涉及到布局的嵌套,这就头疼了。

 

PyQt5 有四种布局:水平(QHBoxLayout)、竖直(QVBoxLayout)、网格(QGridLayout)、表单(QFormLayout)
在窗体中单一的布局应该不难,但若是比较复杂的布局,一般涉及到布局的嵌套,这就头疼了。

本文的四个知识点:
1. 布局不能直接嵌套(如果我错了,欢迎指正!)
2. 内层的布局必须先“附着”在一个空 QWidget 上
3. 然后把这个“承载”着内层布局的空部件添加至外层布局
4. 最后,别忘记把全局布局“附着”到窗体本尊

 

0. 先看效果图

下面对布局进行分析

 

1. 全局布局分析

全局布局使用了一个水平布局

wlayout = QtWidgets.QHBoxLayout()

 

2. 局部布局分析

四个局部布局分别使用了水平布局、竖直布局、网格布局、表单布局

hlayout = QtWidgets.QHBoxLayout()
vlayout = QtWidgets.QVBoxLayout()
glayout = QtWidgets.QGridLayout()
flayout = QtWidgets.QFormLayout()

 

到这里,其实开始时我产生了一个很自然,但是错误的想法:把四个局部布局直接添加到全局布局内:

wlayout.addWidget(hlayout) 
wlayout.addWidget(vlayout)
wlayout.addWidget(glayout)
wlayout.addWidget(flayout)

报错信息提示:addWidget() 参数必须为 QWidget 类型!

这给了我启示:

 

先准备四个 QWidget: hwg, vwg, gwg, fwg

hwg = QtWidgets.QWidget()
vwg = QtWidgets.QWidget()
gwg = QtWidgets.QWidget()
fwg = QtWidgets.QWidget()

 

然后用这四个 QWidget 分别去设置前面四个局部布局

hwg.setLayout(hlayout)
vwg.setLayout(vlayout)
gwg.setLayout(glayout)
fwg.setLayout(flayout)

 

再把这四个 QWidget 部件添加至全局变量

wlayout.addWidget(hwg)
wlayout.addWidget(vwg)
wlayout.addWidget(gwg)
wlayout.addWidget(fwg)

 

最后一步,把全局布局应用到窗体本尊

self.setLayout(wlayout)

 

 

3. 完整代码

from PyQt5 import QtWidgets  
 
  
class MyWindow(QtWidgets.QWidget):  

    def __init__(self):  
        super().__init__()
        self.setWindowTitle('PyQt5布局示例')
        
        # 开始:
        wlayout = QtWidgets.QHBoxLayout() # 全局布局(1个):水平
        
        hlayout = QtWidgets.QHBoxLayout() # 局部布局(4个):水平、竖直、网格、表单
        vlayout = QtWidgets.QVBoxLayout()
        glayout = QtWidgets.QGridLayout()
        flayout = QtWidgets.QFormLayout()
        
        hlayout.addWidget(QtWidgets.QPushButton(str(1))) # 局部布局添加部件(例如:按钮)
        hlayout.addWidget(QtWidgets.QPushButton(str(2)))
        vlayout.addWidget(QtWidgets.QPushButton(str(3)))
        vlayout.addWidget(QtWidgets.QPushButton(str(4)))
        glayout.addWidget(QtWidgets.QPushButton(str(5)),0,0)
        glayout.addWidget(QtWidgets.QPushButton(str(6)),0,1)
        glayout.addWidget(QtWidgets.QPushButton(str(7)),1,0)
        glayout.addWidget(QtWidgets.QPushButton(str(8)),1,1)
        flayout.addWidget(QtWidgets.QPushButton(str(9)))
        flayout.addWidget(QtWidgets.QPushButton(str(10)))
        flayout.addWidget(QtWidgets.QPushButton(str(11)))
        flayout.addWidget(QtWidgets.QPushButton(str(12)))
        
        hwg = QtWidgets.QWidget() # 准备四个部件
        vwg = QtWidgets.QWidget()
        gwg = QtWidgets.QWidget()
        fwg = QtWidgets.QWidget()
        
        hwg.setLayout(hlayout) # 四个部件设置局部布局
        vwg.setLayout(vlayout)
        gwg.setLayout(glayout)
        fwg.setLayout(flayout)
        
        wlayout.addWidget(hwg) # 四个部件加至全局布局
        wlayout.addWidget(vwg)
        wlayout.addWidget(gwg)
        wlayout.addWidget(fwg)
        
        self.setLayout(wlayout) # 窗体本尊设置全局布局
        

  
if __name__=="__main__":    
    import sys    
    
    app = QtWidgets.QApplication(sys.argv)    
    win = MyWindow()  
    win.show()  
    sys.exit(app.exec_())   

 

目录
相关文章
|
3月前
|
Web App开发 人工智能 IDE
小白速通 Codex App:带录播回放
**文末有录播地址** 早上 9 点,你同时有三件事要干:改一个页面、修一个小 bug、整理一份项目说明。 以前这三件事排在一起,你大概率会先挑一个做,剩下两个往后拖。用 AI 编程以后,情况变了。你可以让不同任务并行跑,自己回来只看结果、看 diff、看哪里需要确认。 这也是我为什么要重点讲 Codex App。 Codex 入口很多,CLI、IDE、Cloud/Web、Mobile 都
小白速通 Codex App:带录播回放
|
3月前
|
人工智能 API 调度
为什么很多 AI Agent 一上线就开始烧钱?我在这个开源项目里看到了答案
ClawRouter 是一个面向 AI Agent 的开源本地路由层,它关注的不只是多模型调用,而是模型选择、成本控制、fallback、Token 压缩和 Agent 运行时调度。
340 0
|
9月前
|
PHP 开发工具 Android开发
语音房社交软件开发/php开发/社交同城交友/语音房APP开发与社交功能的融合
本文介绍语音社交应用的两种开发路径:定制开发适合有独特需求的大中型企业,功能灵活但成本高、周期长;基于成熟方案快速搭建则适合初创团队,利用声网、腾讯云等RTC厂商的开源Demo,低成本高效启动。同时探讨如何通过轻互动、用户标签、个人主页、语音动态等功能,将语音房临时互动转化为长期社交关系,并强调合规、性能与MVP冷启动策略的重要性。(238字)
546 3
|
5月前
|
存储 人工智能 关系型数据库
阿里云数据库产品活动:上云优选,RDS年付88元起!多款云数据库产品免费试用
阿里云2026年数据库产品活动更新,覆盖RDS、PolarDB、NoSQL及数据仓库全系产品,提供从3折起的超值折扣、新老用户同享的专属福利及免费试用机会。活动涵盖2核4GB至8核16GB多规格配置,RDS 年付88元起!更有续费/升级享5-6折优惠。
1068 4
|
7月前
|
存储 弹性计算 安全
阿里云老用户活动参考:建站套餐、爆款单品、CDN与安全等云产品特惠
阿里云推出老用户专属特惠活动,涵盖建站套餐、爆款单品、CDN安全、存储数据库及AI服务等六大板块。活动提供丰富的组合优惠与单品特惠,如轻量应用服务器低至28元/月,ECS上云套餐首年仅需184元起,云盾证书服务68元/年。此外,通义千问、万相等AI模型抵扣包及企业邮箱等产品同步让利。此次活动精准匹配从中小微建站到企业级扩容的多元需求,多维降低上云成本。
909 4
|
8月前
|
缓存 JSON 监控
招标详情 item_get 接口对接全攻略:从入门到精通
招标 `item_get` 接口通过项目ID获取全流程结构化数据,覆盖公告、预算、中标结果、参与方及附件等核心字段,支持投标决策、市场分析与合规审计。采用HTTPS+API Key/Secret认证,JSON/XML返回,具备高合规性、字段完整与权限分级特性。本攻略提供从权限申请、签名认证、Python对接到生产优化的全链路指导,助力高效稳定接入。
|
9月前
|
数据处理
Dataphin功能Tips系列(82)「Dataphin标签管理」:让数据资产分类与检索更高效、更智能
Dataphin通过标签化管理优化数据资产组织,支持按业务、地域、时间等多维度灵活打标,提升“门店销售表”等数据的检索效率与使用便捷性,实现精准高效的资产管理。
272 0
|
Serverless BI
有奖实践,基于EMR StarRocks实现游戏玩家画像和行为分析
阿里云EMR-StarRocks联合镜舟科技,基于EMR-StarRocks实现游戏实时湖仓分析,免费试用物化视图、Paimon写入查询等新能力,前45位赢取StarRocks定制T恤、Lamy钢笔,小米充电宝,阿里云拍拍灯等活动礼品,前500位均可获得创意马克杯。
561 7
|
Ubuntu 开发工具 虚拟化
MacOS系统基于VMware Fusion配置Ubuntu 22.04LTS环境
这篇文章介绍了如何在MacOS系统上使用VMware Fusion虚拟化软件配置Ubuntu 22.04 LTS环境,包括自定义VMware Fusion网段、Ubuntu系统安装、配置root用户登录、设置静态IP地址、修改默认网卡名称、配置PS1变量、设置登录界面为字符界面、修改软件源和进行vim基础优化等步骤。
1726 2

热门文章

最新文章