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爬虫框架Scrapy安装使用步骤
Apr 01 Python
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
python中日期和时间格式化输出的方法小结
Mar 19 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
分析python请求数据
Aug 19 Python
python怎么判断模块安装完成
Jun 19 Python
Python pymsql模块的使用
Sep 07 Python
Python字典实现伪切片功能
Oct 28 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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 HTML代码串截取代码
2008/12/29 PHP
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
J2EE模式面试题
2016/10/11 面试题
成功的餐厅经营创业计划书
2014/01/15 职场文书
应届生自荐信
2014/06/30 职场文书
合同审查法律意见书
2015/06/04 职场文书
长江七号观后感
2015/06/11 职场文书