PyQt——信號與槽基礎應用

	信號與槽有三種使用方法,第一種是內置信號與槽的使用,第二種是自定義信
號與槽的使用,第三是裝飾器的信號與槽的使用。由於第三種方法本質上是第一
種方法的衍生

內置信號與槽的使用

所謂內置信號與槽的使用,是指在發射信號時,使用窗口控件的函數,而不是
自定義的函數。

     
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()   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章