大爽pyqt5笔记&教程 三 信号和槽 Signals & Slots 实现窗口跳转、返回、恢复、传参

Python PyQt5 信号与槽机制详解及窗口交互实践
本文详细介绍了Python PyQt5框架中的信号与槽机制,包括如何定义信号、发射信号、绑定槽函数,以及信号传递参数的方法。通过实际的窗口跳转、参数传递和窗口恢复场景,展示了信号与槽在窗口应用中的应用,帮助读者理解并掌握这一关键特性。

作者自我介绍:大爽歌, b站小UP主
python1对1辅导老师
时常直播编程,直播时免费回答简单问题。

6 信号与槽

信号和槽一般用于多个窗口之间传递信息,
或者前后端传递信息。

定义信号

一般在class下面开头定义。
(pyqt 里面定义新对象时,如果不需要专门继承特定对象,推荐继承PyQt5.QtCore.QObject)

比如

from PyQt5.QtCore import QObject, pyqtSignal

class A(QObject):
    sign_one = pyqtSignal()

其中sign_one就是我们定义的信号,是PyQt5.QtCore.pyqtSignal的一个实例。

发射信号与绑定方法

发射信号很简单,使用emit方法就可以了。
示例

self.sign_one.emit()

但是这个时候不会有效果,因为没有给信号绑定方法(槽函数)。

需要使用connect方法,给信号绑定对应的方法。
然后发射信号时,其绑定的方法就会被调用。
绑定语句示例

self.sign_one.connect(someclass.method)

一个信号可以绑定多个槽函数,也就是可以给多个槽发信号。
一个槽函数也可以响应多个信号。

信号传递参数

有的时候我们需要传递参数,让槽函数能够接受这些参数来运行。
那么这个时候的改动有这几处

  1. 定义信号时,定义需要传递的参数类型。
    比如字符串str,整数int,甚至字典dict列表list
  2. 发射信号时,传参。
  3. 接受信号的槽函数,要接受参数。

1的示例

from PyQt5.QtCore import QObject, pyqtSignal

class A(QObject):
    sign_str = pyqtSignal(str)
    sign_int = pyqtSignal(int)
    sign_dict = pyqtSignal(dict)
    sign_list = pyqtSignal(list)

2的示例

self.sign_str.emit("a string")
self.sign_int.emit(1)
self.sign_dict.emit({
   
   "a": 1})
self.sign_list.emit([1, 2, 3])

3 的示例就不太容易举了,因为这个取决于方法,
即绑定的method能接受对应的参数并处理。

具体可以看后面的例子了

小结

信号与槽的使用,主要就是上面三步走,

  • 定义信号
  • 发射信号
  • 绑定方法

7 窗口跳转

场景分析

希望实现的场景:A窗口中,点击按钮,打开B窗口,同时不再显示A窗口。

分析:
不显示一个窗口,一般使用隐藏。

实现代码
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal

import sys


class Window_A(QWidget):
    sign_one = pyqtSignal()

    def __init__(self):
        super(Window_A, self).__init__()
        self.init_gui()

    def init_gui(self):
        self.label = QLabel("Window A", self)
        self.label.move(40, 20)

        self.button = QPushButton('Open new Window', self)
        self.button.move(150, 20)
        self
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值