PyQt5 多窗口连接实例


Posted in Python onJune 19, 2019

前言

之前做过pyqt的一个简单界面,在一个窗口(MainWindow)中实现一些操作;之前嫌麻烦没有去做多窗口和它们的切换功能。最近研究了下窗口的调用和切换。

pyqt4和5有很多不同,在参考别人案例的时候走了很多弯路,最后在pyqt5下实现了简洁的多窗口切换为大家参考。

思路

多窗口的切换和显示连接到按钮的信号上再进行show()就行,格式上有别于pyqt4。

一个逻辑比较清晰的解决方案是,使用一个主程序,在其中实例化各个窗口,然后定义它们的显示逻辑即是按钮的槽函数。

格式上稍有不对就会报错,也是让我重新审视了一下python类和继承的语法= =

同时窗口的类型也和pyqt4有所不同,pyqt5下QWidgets为主,与4中QDialog显示方式也有所不同。

具体方式见代码。

代码

主程序——实例化各个窗口

from PyQt5 import QtCore, QtGui, QtWidgets
from test import Ui_Dialog
from Login import Ui_MainWindow_Login


class Ui_Dialog(QtWidgets.QWidget,Ui_Dialog):
  def __init__(self):
    super(Ui_Dialog,self).__init__()
    self.setupUi(self)
  #定义登出按钮的功能
  def logoutEvent(self):
    self.hide()      #隐藏此窗口
    self.log = loginWindow() 
    self.log.show()    #显示登录窗口
               #必须加上self

class loginWindow(QtWidgets.QMainWindow,Ui_MainWindow_Login):
  def __init__(self):
    super(loginWindow,self).__init__()
    self.setupUi(self)
  #定义登录按钮的功能
  def loginEvent(self):
    self.hide()
    self.dia = Ui_Dialog()
    self.dia.show()
    #self.dia.exec_()
    #pyqt5下show()方法有所改变,不再使用exec_()方法。

#运行窗口Login
if __name__=="__main__":
  import sys
  app=QtWidgets.QApplication(sys.argv)
  login_show=loginWindow()
  login_show.show()
  sys.exit(app.exec_())

多窗口

需要用到的多个窗口可以用Designer直接生成,主窗口实例化。在其中定义好信号连接即可

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow_Login(object):
  def setupUi(self, MainWindow_Login):
    #略
  def retranslateUi(self, MainWindow_Login):
    #略

if __name__=="__main__":
  import sys
  app=QtWidgets.QApplication(sys.argv)
  widget = QtWidgets.QMainWindow()
  login = Ui_MainWindow_Login()
  login.setupUi(widget)
  widget.show()
  sys.exit(app.exec_())

效果

PyQt5 多窗口连接实例

点击登陆:

PyQt5 多窗口连接实例

退出登录则返回到第一个窗口。

切换

理解好这个实例后,添加更多窗口都是线性复杂度的操作,在Designer中设计好窗口,直接转码后就可在主程序中实例化该窗口并设计它们的显示逻辑。

以上这篇PyQt5 多窗口连接实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python import自定义模块方法
Feb 12 Python
Python中用于计算对数的log()方法
May 15 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
使用python3+xlrd解析Excel的实例
May 04 Python
Django forms组件的使用教程
Oct 08 Python
解决python有时候import不了当前的包问题
Aug 28 Python
500行代码使用python写个微信小游戏飞机大战游戏
Oct 16 Python
使用Python实现分别输出每个数组
Dec 06 Python
PyTorch的torch.cat用法
Jun 28 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 #Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 #Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 #Python
python 读写excel文件操作示例【附源码下载】
Jun 19 #Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 #Python
网易有道2017内推编程题 洗牌(python)
Jun 19 #Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 #Python
You might like
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
JavaScript中的事件处理
2008/01/16 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
Python原始字符串(raw strings)用法实例
2014/10/13 Python
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
django 外键创建注意事项说明
2020/05/20 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
高中自我鉴定范文
2013/11/03 职场文书
语文教学感言
2014/02/06 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
自我鉴定标准格式
2014/03/19 职场文书
护士长竞聘书
2014/03/31 职场文书
效能监察建议书
2014/05/19 职场文书
假释思想汇报范文
2014/10/11 职场文书
会议欢迎词
2015/01/23 职场文书
党员活动总结
2015/02/04 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
详解NodeJS模块化
2021/06/15 NodeJs