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 Web开发模板引擎优缺点总结
May 06 Python
python类继承与子类实例初始化用法分析
Apr 17 Python
Python复数属性和方法运算操作示例
Jul 21 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
python实现停车管理系统
Nov 30 Python
python列表,字典,元组简单用法示例
Jul 11 Python
pycharm新建一个python工程步骤
Jul 16 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
python快速排序的实现及运行时间比较
Nov 22 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
利用Python判断你的密码难度等级
Jun 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
介绍几个array库的新函数 php
2006/12/29 PHP
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
python 获取本机ip地址的两个方法
2013/02/25 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
Python实现的建造者模式示例
2018/08/06 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
书法比赛获奖感言
2014/02/10 职场文书
师范生自我鉴定
2014/03/20 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
优秀班组事迹材料
2014/12/24 职场文书