(PyQt5信号与槽(二)信号与槽函数情况)
二、PyQt5信号与槽(二)信号与槽函数
1、内置信号和内置槽函数
- 本例演示内置信号和内置槽函数
# -*- coding:utf-8 -*-
# -*- coding:utf-8 -*-
"""
# @Time:2022/12/11 0011 11:38
# @Author:晚秋拾叶
# @File:qt07_buildInSignalSlot01.py
# @PyCharm之Python
"""
from PyQt5.QtWidgets import *
import sys
class WinForm(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('内置的信号和内置的槽函数')
self.resize(300, 50)
btn = QPushButton('关闭', self)
btn.clicked.connect(self.close)
# 发送者btn——>信号clicked——>连接connect——>接收者self——>内置槽函数close
if __name__ == '__main__':
app = QApplication(sys.argv)
wind = WinForm()
wind.show()
sys.exit(app.exec_())
- 在上面代码中,单击按键时触发按键内置的信号(clicked),绑定窗口(QWidget)内置的槽函数(self.close)。
2、内置信号和自定义槽函数
- 本例完整代码
# -*- coding:utf-8 -*-
"""
# @Time:2022/12/11 0011 11:50
# @Author:晚秋拾叶
# @File:qt07_buildInSignalSlot02.py
# @PyCharm之Python
"""
from PyQt5.QtWidgets import *
import sys
class WinForm(QWidget):
def __init__(self, parent=None):
super(WinForm, self).__init__(parent)
self.setWindowTitle("内置信号与自定义槽函数示例")
self.resize(330, 50)
btn = QPushButton("关闭", self)
btn.clicked.connect(self.btn_close)
def btn_close(self):
# 这里就是自定义槽函数,再调用内置槽函数close
self.close()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = WinForm()
win.show()
sys.exit(app.exec_())
3、自定义信号和内置槽函数
- 本例还是那个关闭按键,代码如下
# -*- coding:utf-8 -*-
"""
# @Time:2022/12/11 0011 12:02
# @Author:晚秋拾叶
# @File:qt07_buildInSignalSlot03.py
# @PyCharm之Python
"""
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
import sys
class Winform(QWidget):
# 自定义信号
button_clicked_signal = pyqtSignal()
def __init__(self, parent=None):
super(Winform, self).__init__(parent)
self.setWindowTitle("自定义信号与内置槽函数示例")
self.resize(330, 50)
btn = QPushButton("关闭", self)
# 连接自定义的信号函数
btn.clicked.connect(self.btn_clicked)
# 接收信号,连接到内置槽函数
self.button_clicked_signal.connect(self.close)
# 自定义的信号函数(也是内置信号clicked的槽函数)
def btn_clicked(self):
# 发送自定义信号
self.button_clicked_signal.emit()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Winform()
win.show()
sys.exit(app.exec_())
- 上面代码中,单击按键时触发自定义信号(button_clicked_signal),绑定内置的槽函数(self.close)。
4、自定义信号和自定义槽函数
- 还是那个关闭按键
# -*- coding:utf-8 -*-
"""
# @Time:2022/12/11 0011 12:20
# @Author:晚秋拾叶
# @File:qt07_buildInSignalSlot04.py
# @PyCharm之Python
"""
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
import sys
class WinForm(QWidget):
# 自定义信号
button_clicked_signal = pyqtSignal()
def __init__(self):
super().__init__()
self.setWindowTitle("自定义信号与槽函数示例")
self.resize(330, 50)
btn = QPushButton("关闭", self)
# 连接自定义信号函数
btn.clicked.connect(self.btn_clicked)
# 接收信号,连接到自定义的槽函数
self.button_clicked_signal.connect(self.btn_close)
# 自定义的信号函数(作为自定义信号clicked的槽函数)
def btn_clicked(self):
# 发送自定义信号
self.button_clicked_signal.emit()
# 自定义的槽函数(调用内置槽函数)
def btn_close(self):
self.close()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = WinForm()
win.show()
sys.exit(app.exec_())
-
画个图,这个图和代码的注释不一样了,不改了,以代码注释为准,原书作者的注释有点不清晰
-
个人总结
- 反复看代码,其实不管自定义的信号,还是自定义的槽函数,最后绕来绕去,都要通过内置信号和内置槽函数完成最后的任务。