PyQt5 窗口切换与自定义对话框的实例


Posted in Python onJune 20, 2019

近日,需要实现一个功能小而全的桌面版软件,所以选中并尝试了PyQt5这个GUI库。在使用中发现,其功能的确完备,但这方面的资料的确不多,有时自己想实现的功能相关资料找不到,有的还不得不阅读C++的实现代码。PyQt5的文档也都是指向C++版的文档。一段时间做下来,特将有关解决方法记录下来,以将来备查,也随手帮助下后来者。

一般来说,GUI软件都是需要不同的工作界面之间进行切换的,当然也少不了布局等功能的使用。Qt的布局功能理解起来也很容易,使用的基本方法是:

1.建立容器部件;

2.建立布局类,并设置为容器部件的布局;

3.在布局类中添加其他部件。

如果有需要嵌套的,那就是以上步骤的第3条中添加容器部件,又回到第1步了。相信这也比较容易理解。

一个个工作界面都做好之后,如果让顶级多个部件在窗口中切换呢?为了这个方法,我捣鼓了不了时间。在查找QMainWindow类中查看方法,类的方法非常多,因为添加部件用的是setCentralWidget(),即自然想到会不会是removeCentralWidget(),另我惊奇的是没有!!最后,找到了takeCentralWidget()。(是他,是他,就是他……)

这样才明白了,要切换部件也很容易,就是先调用takeCentralWidget(),清楚原来的部件,再调用setCentralWidget()设置当前部件。

制作GUI界面,对话框自然是必不可少的。针对Qt5的,三水点靠木也有比如https://3water.com/article/163557.htm(PyQt5之弹出窗口大全),看着也很容易懂。可我需要实现一个可以填写两个数据的对话框,那就只有自定义了??∷凳祷埃?飧鲈谕?系淖试椿拐嫦∩佟W詈笠菜闶鞘迪至耍?浠?敬?肴缦拢ň咛褰馐图?⑹停??/p>

class MyDialog(QDialog):    #继承QDialog类
 def __init__(self):
  super().__init__()
  self.initUI()
  # self.exec()

 def initUI(self):
  self.setWindowTitle("新建小组")  # 窗口标题
  self.setGeometry(400,400,200,200) # 窗口位置与大小

  self.lab_a = QLabel('小组名称:')
  self.lab_b = QLabel('竞赛项目:')

  self.name_edit = QLineEdit()  # 用于接收用户输入的单行文本输入框
  self.game_item = QComboBox()  # 建立一个下拉列表框

  for g in get_games():    # 为下拉列表框添加选择项(从数据库中查询取得)
   self.game_item.addItem(g.name,g.id)

  self.buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) #窗口中建立确认和取消按钮

  self.glayout = QGridLayout()

  self.glayout.addWidget(self.lab_a,0,0)
  self.glayout.addWidget(self.lab_b,1,0)
  self.glayout.addWidget(self.name_edit,0,1)
  self.glayout.addWidget(self.game_item,1,1)

  self.glayout.addWidget(self.buttons,2,1)

  self.buttons.accepted.connect(self.accept)
  self.buttons.rejected.connect(self.reject)

  self.setLayout(self.glayout)

 def get_data(self):     # 定义获取用户输入数据的方法
  return self.name_edit.text(),self.game_item.itemData(self.game_item.currentIndex())

其使用方法也不难,代码实例如下:

v = MyDialog() # 建立对话框实例
if v.exec_(): # 执行方法,成为模态对话框,用户点击OK后,返回1
 name,game = v.get_data()

以上这篇PyQt5 窗口切换与自定义对话框的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python程序设计入门(5)类的使用简介
Jun 16 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
python监控键盘输入实例代码
Feb 09 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
Python爬虫开发与项目实战
Dec 16 Python
PyQt5笔记之弹出窗口大全
Jun 20 #Python
PyQt5创建一个新窗口的实例
Jun 20 #Python
pyQT5 实现窗体之间传值的示例
Jun 20 #Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 #Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 #Python
详解Python 调用C# dll库最简方法
Jun 20 #Python
python async with和async for的使用
Jun 20 #Python
You might like
星际RPG字典
2020/03/04 星际争霸
77A一级收信机修理记
2021/03/02 无线电
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
python封装对象实现时间效果
2020/04/23 Python
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
python复制与引用用法分析
2015/04/08 Python
Python之父谈Python的未来形式
2016/07/01 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
python交互界面的退出方法
2019/02/16 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
Django之PopUp的具体实现方法
2019/08/31 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
双方协议书
2014/04/22 职场文书
就业意向书
2014/07/29 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
python - timeit 时间模块
2021/04/06 Python
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python