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双向链表实现实例代码
Nov 21 Python
python实现的二叉树算法和kmp算法实例
Apr 25 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
django 外键model的互相读取方法
Dec 15 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
Django serializer优化类视图的实现示例
Jul 16 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 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
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
简单介绍Ruby中的CGI编程
2015/04/10 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
耐克中国官方商城:Nike中国
2018/10/18 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
UDP协议功能
2013/01/06 面试题
师范生自我鉴定范文
2013/10/05 职场文书
大学生个人事迹材料
2014/01/21 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
政府门卫岗位职责
2014/04/29 职场文书
数学教师个人总结
2015/02/06 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
全陪导游词开场白
2015/05/29 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
信用卡工作证明范本
2015/06/19 职场文书
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL