pyqt5多窗口切换
最近在研究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多窗口切换相关推荐
- pyqt5 制作壁纸切换工具实例 第二章
pyqt5 制作壁纸切换工具实例 第一章 https://blog.csdn.net/mtl1994/article/details/118020546 提示:写完文章后,目录可以自动生成,如何生成可 ...
- pyqt5 制作壁纸切换工具实例 第一章
pyqt5 制作壁纸切换工具实例 第二章 https://blog.csdn.net/mtl1994/article/details/118152403 文章目录 前言 效果图 一.代码 1.结构 总 ...
- PyQt5子窗口开启后锁定或隐藏主窗口
PyQt5子窗口开启后锁定或隐藏主窗口 老规矩,先放图 锁定主窗口 隐藏主窗口 实现 实现方式非常简单与C++方式基本相同 在主界面UI初始化时把按钮信号与拉起窗口的槽函数绑定,这里我的按钮为sele ...
- QT5中实现多窗口切换,并从子窗口返回数据
该程序的功能:主窗口里有两个button和ltextEdit,按下下一页button后弹出子窗口并隐藏主窗口,按下退出Button后退出程序.子窗口有文本框lineEdit和button,按下子窗口的 ...
- Selenium3 + Python3自动化测试系列——多窗口切换
多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切 ...
- emWin 2天速成实例教程002_多个页面窗口切换
备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...
- Python+Selenium学习笔记8 - 多表单多窗口切换
1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 #coding = utf-8 2 3 from selenium importwebdriver4 importos5 im ...
- pyqt5子窗口跳出主窗口_弹出式窗口与 可用性,转换和跳出率
pyqt5子窗口跳出主窗口 Written by Cassandra Naji 由卡珊德拉·纳吉 ( Cassandra Naji)撰写 They go by many names - modal w ...
- python做一个窗口样式_python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法...
本文借用HTML的css语法,将样式表应用到窗口部件.这里只是个简单的例子,实际上样式表的语法很丰富. 以下类似于css: StyleSheet = """ QCombo ...
最新文章
- hive查看表中列的信息命令_快速了解hive
- 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
- python-全栈开发-前方高能-内置函数
- Java调用.Net的web service的几种方式
- redis 源码阅读
- UIView的Touch事件UIControlEvents详解
- 线性表7 - 数据结构和算法12
- objective-c 2.0编程语言,Objective-C 2.0编程快速上手 EXE版[12MB]
- android audio 音量设置分析
- 第一行代码笔记-第五章
- 【数据分析学习】016-numpy数据结构
- 新型城镇化提质扩容 打造民村智慧城市
- 5.数据通信基础(上)
- 基于Web的文件管理系统,支持Office、WPS预览/编辑、在线解压缩、文件分享、文件加密、远程存储、远程文件推送、秒传、断点
- 【转】《Cascaded Pyramid Network for Multi-Person Pose Estimation》--旷世2017COCO keypoints冠军论文解读
- 阿里“来往”的产品战略方向
- 在vue项目中使用Antv-f2的小案例
- 计算机毕业设计安卓App毕设项目之springboot+合同管理APPNodejs毕业设计计算机项目源码
- arcgis表转excel一直失败_Excel表转换为shp格式时属性值丢失问题
- 景驰纠纷后续:潘思宁7月才发现法人被非法变更