pyqt5 动态镶嵌ui窗体

一、背景

最近因开发软件需要动态加载一些窗体并镶嵌到主窗体。在查相关博客及网站资料后,发现大部分介绍都是将UI文件转换成.py文件后再进行镶嵌。他们的代码太多太杂,并包含了很多无关紧要的代码,部分代码我没看懂。。。因此通过现有的资料和实际,经过几天修改,几行代码就可以轻松实现。不用将UI文件转换成PY文件,直接使用,代码简单,修改随意。UI文件和代码文件一起打包。主窗体的UI文件在布局上没有仔细布局。
完整代码下载:

二、核心代码

1、 引用:

from PyQt5 import uic  # 动态加载窗体引用

2、动态加载ui窗体:

ui = uic.loadUi('11.ui')

3、插入想要的窗体

ui.btn_1.clicked.connect(lambda: (ui.ui_hbox.itemAt(1).widget().setParent(None),  # 先将hbox布局中的窗体设置为Noneui.ui_hbox.insertWidget(1, ui_win1)  # 再将hbox处插入一个我们希望显示的窗体))

三、 实现步骤

1、使用Qt Designer创建三个窗口分别为:11.ui; 1.ui; 2.ui(11.ui为主窗体)
A、11.ui 控件布局:
1)、 在窗体内放置两个:widget控件
2)、将右边的widget_2控件放入布局,将布局命名为:ui_hbox(注意:这里的布局只 能使用平面或垂直布局)。
3)、在widge控件里放入两个按钮btn_1和btn_2 分别命名为:我是第一个窗口、我是第二个窗口

B、1.ui和2.ui 布局
在窗体里分别放入:Label控件和PushButton控件

四 代码实现过程

1、初始化三个窗体

    ui = uic.loadUi('11.ui')ui_win1 = uic.loadUi('1.ui')ui_win2 = uic.loadUi('2.ui')# 启动窗体后 默认加载win2窗体到hbox布局中ui.ui_hbox.addWidget(ui_win2)

2、给子窗体按钮帮定事件

    ui_win1.btn.clicked.connect(btn_win1)  # 绑定加载窗体事件ui_win2.setStyleSheet("background-color:green;")ui_win2.tbn.clicked.connect(btn_win2)  # 绑定加载窗体事件

3、子窗体事件

def btn_win1():ui_win1.label.setText('我是第一个窗口')
def btn_win2():ui_win2.label.setText('我是第二个窗口')

4、给主窗体按钮绑定事件

 # 给主窗体按钮添加事件ui.btn_1.clicked.connect(lambda: (ui.ui_hbox.itemAt(1).widget().setParent(None),  # 先将hbox布局中的窗体设置为Noneui.ui_hbox.insertWidget(1, ui_win1)  # 再将hbox处插入一个我们希望显示的窗体))ui.btn_2.clicked.connect(lambda: (ui.ui_hbox.itemAt(1).widget().setParent(None),ui.ui_hbox.insertWidget(1, ui_win2)))

到此整个镶嵌UI窗体完成,效果如下图

pyqt5 动态镶嵌ui窗体相关推荐

  1. Python:PyQt5设计一个文本编辑器窗体程序(附UI窗体和图片素材下载)

    hello,大家好,我是wangzirui32,今天我们来学习如何用PyQt5设计一个文本编辑器窗体,开始学习吧! 文章目录 1. UI窗体设计 2. 编写代码 2.1 pyuic生成代码 2.2 修 ...

  2. python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  3. pyqt5中控件缩放功能_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  4. WPF案例 (六) 动态切换UI布局

    原文:WPF案例 (六) 动态切换UI布局 这个Wpf示例对同一个界面支持以ListView或者CardView的布局方式呈现界面,使用控件ItemsControl绑定数据源,使用DataTempla ...

  5. 窗体分为左右两部分,要求在左边栏点击按钮时,右边动态加载窗体

    http://smartsoft.5d6d.com/thread-7420-1-1.html 今天在做项目时候遇到一个问题,窗体分为左右两部分,要求在左边栏点击按钮时,右边动态加载窗体 最后想到用pa ...

  6. PyQt5 Designer中ui格式转py格式

    PyQt5 Designer中ui格式转py格式 添加QTDesigner pycharm中的设置:File>>Settings>>Tools>>External ...

  7. pyqt5动态删除控件问题

    pyqt5 用的滚动条,表格布局,里面动态添加控件可以 但是动态删除,隐藏控件,第一次没反应,只有别的按钮点过后,这个才起作用.原因是因为: 调用了一个点击事件:self.dir_btns[0].cl ...

  8. pyqt5动态添加按钮

    QMainWindow动态添加按钮,添加后需要调用show(),才可以显示出来. self.start_file_aaa = QPushButton(self) self.start_file_aaa ...

  9. 利用反射,实现动态调用winform窗体

    实用前提:在WinForm程序中,通过主窗体的Menu打开不同的窗体 我以前的做法:在Menu的Click事件中,创建打开窗体的对象实例 这样的缺点,我不说了:) 看看利用反射动态调用窗体对象的方法: ...

最新文章

  1. 什么是 JVM方法区
  2. Vue+Leaflet-side-by-side插件实现拉帘对比效果
  3. Android Studio 版本号详解
  4. mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程
  5. NOIP模拟测试14「旋转子段·走格子·柱状图」
  6. Java Json xml 格式之间转换(一)
  7. libjpeg-turbo 2.1.2 交叉编译
  8. 摩尔庄园服务器维护,《摩尔庄园》6月11日维护公告
  9. 发票管理小工具(三):PDFMiner vs pdfminer3k vs Pdfminer.six
  10. 【茶知识】普洱茶四大茶区的区别特点
  11. JS JavaScript
  12. 【Matlab笔记】测绘工程专业正算、反算、度分秒转弧度函数
  13. 致我们终将逝去的2014
  14. 商家收款码怎样申请做代理?共有两种途径
  15. oracle查询结果集迭代,Oracle 如何循环查询结果集,进行新增或修改
  16. 视频教程-桫哥-GOlang基础-01基本程序设计-Go语言
  17. matlab一阶振型图,[工学]多自由度系统的振动响应.ppt
  18. 解决apt update 404 Not Found [IP: 91.189.91.15 80] 问题
  19. ModelArts第二次培训(声音分类和文本分类)
  20. 王者荣耀转服务器维护,《王者荣耀》转区维护到什么时候 转区维护时间介绍...

热门文章

  1. 5GNR漫谈16:OFDM的符号定时同步与偏差(STO)
  2. mysql innodb博客_细聊MySQL的Innodb存储引擎(完)
  3. 咒术师学院spellcaster university for mac
  4. Rocky Linux 8.5/CentOS 8 安装Wine
  5. 戏说PUBER之---LULU与绿猪的故事(1)
  6. windwos下连接安卓模拟器的命令
  7. 独孤思维:一月涨粉十万,大自然动态视频成为涨粉利器
  8. 震惊!微信PC端也能多开!
  9. 【9】tensorflow下图像预处理之图像批量处理
  10. python拦截tcp数据包,使用python解码TCP数据包