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编写提取日志中的中文的脚本的方法
Apr 30 Python
Python Logging 日志记录入门学习
Jun 02 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
python实现代码统计程序
Sep 19 Python
python多进程并行代码实例
Sep 30 Python
Python Numpy库常见用法入门教程
Jan 16 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
Python+Kepler.gl实现时间轮播地图过程解析
Jul 20 Python
Python Map 函数的使用
Aug 28 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
Apr 07 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将数据导入到Foxmail的实现代码
2010/09/05 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
javascript读写json示例
2014/04/11 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
python中定义结构体的方法
2013/03/04 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
小加工厂管理制度
2014/01/21 职场文书
初中班主任评语
2014/04/24 职场文书
英语邀请函范文
2015/02/02 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python