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 Django做网页
Nov 04 Python
Python datetime时间格式化去掉前导0
Jul 31 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
python实现AES加密和解密
Mar 27 Python
Python3 实现串口两进程同时读写
Jun 12 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
python高级特性简介
Aug 13 Python
python中的对数log函数表示及用法
Dec 09 Python
Python之京东商品秒杀的实现示例
Jan 06 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之第二天
2006/10/09 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
wordpress之js库集合研究介绍
2007/08/17 Javascript
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
python显示天气预报
2014/03/02 Python
Python抓取百度查询结果的方法
2015/07/08 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
程序运行正确, 但退出时却"core dump"了,怎么回事
2014/02/19 面试题
财务会计专业个人求职信范本
2014/01/08 职场文书
旅游项目开发策划书
2014/01/18 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
运输公司工作总结
2015/08/11 职场文书
JUnit5常用注解的使用
2021/07/02 Java/Android