作者自我介绍:大爽歌, 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)
一个信号可以绑定多个槽函数,也就是可以给多个槽发信号。
一个槽函数也可以响应多个信号。
信号传递参数
有的时候我们需要传递参数,让槽函数能够接受这些参数来运行。
那么这个时候的改动有这几处
- 定义信号时,定义需要传递的参数类型。
比如字符串str,整数int,甚至字典dict列表list。 - 发射信号时,传参。
- 接受信号的槽函数,要接受参数。
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
Python PyQt5 信号与槽机制详解及窗口交互实践

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

被折叠的 条评论
为什么被折叠?



