最近在研究qt5,研究到多窗口切换,发现网上讲的不是很清楚,在此记录一下

第一页

首先创建页面
first = pyqtSignal()为一个连接槽,用于连接QPushButton的事件
self.first.emit()发出一个信号

class FirstUI(QWidget):first = pyqtSignal()def __init__(self, *args, **kwargs):super(FirstUI, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('first', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.first.emit()self.close()

emit()默认为空,如果添加值,例:emit('first ')时pyqtSignal()必须要一个参数接收数据pyqtSignal(str)str为数据类型,可自己替换
需要注意的是emit('first ')pyqtSignal(str)数据类型要统一

可以这么写:

class FirstUI(QWidget):first = pyqtSignal(str)def __init__(self, *args, **kwargs):super(FirstUI, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('first', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.first.emit('first')self.close()

第二页

代码与第一页基本相同

第一种写法

class SecondUi(QWidget):second = pyqtSignal()def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.second.emit()self.close()

第二种写法

class SecondUi(QWidget):second = pyqtSignal(str)def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.second.emit('second')self.close()

调用页面

self.firstui.first.connect(self.second)重写FirstUI()中的QPushButton事件
同理SecondUi()也是

注:重写后,程序会先运行
def but_clicked(self): self.second.emit('second') self.close()函数,运行完毕后会继续续运行自定义的函数

class MainWindow:def first(self):self.firstui = FirstUI()self.firstui.first.connect(self.second)self.firstui.show()def second(self):self.secondui = SecondUi()self.secondui.second.connect(self.first)self.secondui.show()

如果需要接收self.second.emit('second')中的’second’值,在调用槽函数时,在self.firstui.first.connect(self.second)中 可用self.second接收

完整代码

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sysclass FirstUI(QWidget):first = pyqtSignal(str)def __init__(self, *args, **kwargs):super(FirstUI, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('first', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.first.emit('first')self.close()class SecondUi(QWidget):second = pyqtSignal(str)def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.second.emit('second')self.close()class MainWindow:def first(self):self.firstui = FirstUI()self.firstui.first.connect(self.second)self.firstui.show()def second(self, st):print(st)self.secondui = SecondUi()self.secondui.second.connect(self.first)self.secondui.show()if __name__ == '__main__':app = QApplication(sys.argv)ma = MainWindow()ma.first()sys.exit(app.exec_())  # app.exet_()是指程序一直循环运行直到主窗口被关闭终止进程(如果没有这句话,程序运行时会一闪而过)

若不需要第三个调用函数MainWindow(),也可以这么写

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sysclass FirstUI(QWidget):def __init__(self, *args, **kwargs):super(FirstUI, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('first', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.close()# SecondUi必须为类的一个属性,否则程序会一闪而过,必须带self.self.s = SecondUi()self.s.show()class SecondUi(QWidget):def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.close()# FirstUI必须为类的一个属性,否则程序会一闪而过,必须带self.self.f = FirstUI()self.f.show()if __name__ == '__main__':app = QApplication(sys.argv)f = FirstUI()f.show()sys.exit(app.exec_())

pyqt5多窗口切换相关推荐

  1. pyqt5 制作壁纸切换工具实例 第二章

    pyqt5 制作壁纸切换工具实例 第一章 https://blog.csdn.net/mtl1994/article/details/118020546 提示:写完文章后,目录可以自动生成,如何生成可 ...

  2. pyqt5 制作壁纸切换工具实例 第一章

    pyqt5 制作壁纸切换工具实例 第二章 https://blog.csdn.net/mtl1994/article/details/118152403 文章目录 前言 效果图 一.代码 1.结构 总 ...

  3. PyQt5子窗口开启后锁定或隐藏主窗口

    PyQt5子窗口开启后锁定或隐藏主窗口 老规矩,先放图 锁定主窗口 隐藏主窗口 实现 实现方式非常简单与C++方式基本相同 在主界面UI初始化时把按钮信号与拉起窗口的槽函数绑定,这里我的按钮为sele ...

  4. QT5中实现多窗口切换,并从子窗口返回数据

    该程序的功能:主窗口里有两个button和ltextEdit,按下下一页button后弹出子窗口并隐藏主窗口,按下退出Button后退出程序.子窗口有文本框lineEdit和button,按下子窗口的 ...

  5. Selenium3 + Python3自动化测试系列——多窗口切换

    多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切 ...

  6. emWin 2天速成实例教程002_多个页面窗口切换

    备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...

  7. Python+Selenium学习笔记8 - 多表单多窗口切换

    1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 #coding = utf-8 2 3 from selenium importwebdriver4 importos5 im ...

  8. pyqt5子窗口跳出主窗口_弹出式窗口与 可用性,转换和跳出率

    pyqt5子窗口跳出主窗口 Written by Cassandra Naji 由卡珊德拉·纳吉 ( Cassandra Naji)撰写 They go by many names - modal w ...

  9. python做一个窗口样式_python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法...

    本文借用HTML的css语法,将样式表应用到窗口部件.这里只是个简单的例子,实际上样式表的语法很丰富. 以下类似于css: StyleSheet = """ QCombo ...

最新文章

  1. hive查看表中列的信息命令_快速了解hive
  2. 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
  3. python-全栈开发-前方高能-内置函数
  4. Java调用.Net的web service的几种方式
  5. redis 源码阅读
  6. UIView的Touch事件UIControlEvents详解
  7. 线性表7 - 数据结构和算法12
  8. objective-c 2.0编程语言,Objective-C 2.0编程快速上手 EXE版[12MB]
  9. android audio 音量设置分析
  10. 第一行代码笔记-第五章
  11. 【数据分析学习】016-numpy数据结构
  12. 新型城镇化提质扩容 打造民村智慧城市
  13. 5.数据通信基础(上)
  14. 基于Web的文件管理系统,支持Office、WPS预览/编辑、在线解压缩、文件分享、文件加密、远程存储、远程文件推送、秒传、断点
  15. 【转】《Cascaded Pyramid Network for Multi-Person Pose Estimation》--旷世2017COCO keypoints冠军论文解读
  16. 阿里“来往”的产品战略方向
  17. 在vue项目中使用Antv-f2的小案例
  18. 计算机毕业设计安卓App毕设项目之springboot+合同管理APPNodejs毕业设计计算机项目源码
  19. arcgis表转excel一直失败_Excel表转换为shp格式时属性值丢失问题
  20. 景驰纠纷后续:潘思宁7月才发现法人被非法变更

热门文章

  1. truncate分区表的操作,会导致全局索引失效?
  2. selinux 语法规则
  3. 微信小程序(BDEDU签到工具)项目总结
  4. 解决CentOS 7重启后dhclient未运行,从而导致IP地址获取不到的问题处理。
  5. ROS智能小车的人跟踪跟随
  6. 听说你情人节没人陪,这不我来给你介绍对象啦
  7. python greenlet快速学习(tcy-)
  8. word2vec找文本相似词小试牛刀
  9. AI基础:信息熵、信息增益、信息增益率、基尼指数
  10. Bootstrap代码及案例