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下的twisted框架入门指引
Apr 15 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
利用Python实现图书超期提醒
Aug 02 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
python书籍信息爬虫实例
Mar 19 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
python实时监控cpu小工具
Jun 21 Python
基于Python列表解析(列表推导式)
Jun 23 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
python中JWT用户认证的实现
May 18 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
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
PHP中常用的转义函数
2014/02/28 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
什么是JavaScript
2009/08/13 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
利用python 读写csv文件
2020/09/10 Python
如何写出高性能的JSP和Servlet
2013/01/22 面试题
初中生三年学习生活的自我评价
2013/11/03 职场文书
初婚未育证明
2014/01/15 职场文书
拓展训练激励口号
2014/06/17 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
组织委员竞选稿
2015/11/21 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
nginx服务器的下载安装与使用详解
2021/08/02 Servers
详解在OpenCV中如何使用图像像素
2022/03/03 Python
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA