信號與槽有三種使用方法,第一種是內置信號與槽的使用,第二種是自定義信
號與槽的使用,第三是裝飾器的信號與槽的使用。由於第三種方法本質上是第一
種方法的衍生
內置信號與槽的使用
所謂內置信號與槽的使用,是指在發射信號時,使用窗口控件的函數,而不是 自定義的函數。
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()