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装饰器基础详解
Mar 09 Python
python 网络编程常用代码段
Aug 28 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
PHP7修改的函数
2021/03/09 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
Python中__name__的使用实例
2015/04/14 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
python实现音乐下载的统计
2018/06/20 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
python实现飞船大战
2020/04/24 Python
Django多数据库联用实现方法解析
2020/11/12 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
网络工程师的自我评价
2013/10/02 职场文书
商场主管竞聘书
2014/03/31 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis