信号与槽有三种使用方法,第一种是内置信号与槽的使用,第二种是自定义信
号与槽的使用,第三是装饰器的信号与槽的使用。由于第三种方法本质上是第一
种方法的衍生
内置信号与槽的使用
所谓内置信号与槽的使用,是指在发射信号时,使用窗口控件的函数,而不是 自定义的函数。
from PyQt5.QtWidgets import QPushButton , QApplication, QWidget
from PyQt5.QtWidgets import QMessageBox
import sys
app = QApplication(sys.argv)
widget = QWidget()
def showMsg():
QMessageBox.information(widget, "信息提示框", "ok,弹出测试信息")
btn = QPushButton( "测试点击按钮", widget)
btn.clicked.connect( showMsg)
widget.show()
sys.exit(app.exec_())
自定义信号与槽的使用
from PyQt5.QtCore import QObject, pyqtSignal
# 信号对象
class QTypeSignal(QObject):
# 定义一个信号
sendmsg = pyqtSignal(object)
def __init__(self):
super(QTypeSignal, self).__init__()
def run(self):
# 发射信号
self.sendmsg.emit('Hello Pyqt5')
# 槽对象
class QTypeSlot(QObject):
def __init__(self):
super(QTypeSlot, self).__init__()
# 槽对象里的槽函数
def get(self, msg):
print("QSlot get msg => " + msg)
if __name__ == '__main__':
send = QTypeSignal()
slot = QTypeSlot()
# 1
print('--- 把信号绑定到槽函数 ---')
send.sendmsg.connect(slot.get)
send.run()
# 2
print('--- 把信号断开槽函数 ---')
send.sendmsg.disconnect(slot.get)
send.run()
# -*- coding: utf-8 -*-
from PyQt5.QtCore import QObject , pyqtSignal
#信号对象
class QTypeSignal(QObject):
#定义一个信号
sendmsg = pyqtSignal( str,str)
def __init__( self):
super( QTypeSignal, self).__init__()
def run( self):
# 发射信号
self.sendmsg.emit('第一个参数','第二个参数')
# 槽对象
class QTypeSlot(QObject):
def __init__( self):
super( QTypeSlot, self).__init__()
# 槽对象里的槽函数
def get(self, msg1, msg2):
print("QSlot get msg => " + msg1 + ' ' + msg2)
if __name__ == '__main__':
send = QTypeSignal()
slot = QTypeSlot()
#1
print('--- 把信号绑定到槽函数 ---')
send.sendmsg.connect( slot.get)
send.run()
#2
print('--- 把信号断开槽函数 ---')
send.sendmsg.disconnect( slot.get )
send.run()