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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
python科学计算之scipy——optimize用法
Nov 25 Python
pymysql模块的操作实例
Dec 17 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
用Python 执行cmd命令
Dec 18 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
js window.onload 加载多个函数的方法
2009/11/02 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
vue-property-decorator用法详解
2019/12/12 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
python中format()函数的简单使用教程
2018/03/14 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
python 类之间的参数传递方式
2019/12/20 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
企业总经理任命书
2014/06/05 职场文书
工作作风承诺书
2014/08/30 职场文书
新年寄语2016
2015/08/17 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
python开发制作好看的时钟效果
2022/05/02 Python