PyQt5 筆記(05):信號/槽


 

PyQt 的很多類都內置了信號和槽。下圖是 Qt 官方文檔對 QThread 類中包含的信號/槽的描述:

 

 

 

一、信號/槽 都是內置的

請看一個最簡單的程序: 按鈕點擊后,窗口關閉

               

代碼:

class Test(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        
        btn.clicked.connect(self.close) #

對語句①的說明:

      信號 ==> 槽
  信號(btn.clicked)、槽(self.close)都是內置
  作用:按鈕點擊后,窗口關閉

完整代碼:

from PyQt5.QtWidgets import *
import sys

class Test(QDialog):
    def __init__(self,parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        
        btn.clicked.connect(self.close) 
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dlg = Test()
    dlg.show()
    sys.exit(app.exec_())
View Code

 

 

二、信號內置、槽自定義

功能同上。

class Test(QDialog):
    def __init__(self,parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        
        btn.clicked.connect(self.my_close) #
        
        
    def my_close(self): # ② 自定義槽
        self.close()

對語句的說明:

      信號 ==> 槽
  信號(btn.clicked)是內置的、槽(self.my_close)是自定義
  作用:按鈕點擊后,窗口關閉

 

完整代碼:

from PyQt5.QtWidgets import *
import sys

class Test(QDialog):
    def __init__(self,parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        
        btn.clicked.connect(self.my_func) 
        
        
    def my_func(self):
        self.close()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dlg = Test()
    dlg.show()
    sys.exit(app.exec_())
View Code

 

 

三、信號是自定義的,槽是內置的

class Test(QDialog):

    button_clicked_signal = pyqtSignal() # 自定義信號,不帶參
    
    def __init__(self,parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        btn.clicked.connect(self.btn_clicked) # ① 信號/槽
        
        self.button_clicked_signal.connect(self.close) # ③接收信號,連接到槽
        
        
    def btn_clicked(self):
        self.button_clicked_signal.emit() # ②發送自定義信號,無參

對語句③的說明:

      信號 ==> 槽
  信號(button_clicked_signal)是自定義的、槽(self.close)是內置
  作用:按鈕點擊后,窗口關閉

 

附圖說明一下執行順序:

 

 

 

完整代碼:

from PyQt5.QtWidgets import *
import sys

class Test(QDialog):

    button_clicked_signal = pyqtSignal() # 自定義信號,不帶參
    
    def __init__(self,parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        btn.clicked.connect(self.btn_clicked) # 信號/槽
        
        self.button_clicked_signal.connect(self.close) # 接收信號,連接到槽
        
        
    def btn_clicked(self):
        self.button_clicked_signal.emit() # 發送自定義信號,無參

        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    dlg = Test()
    dlg.show()
    sys.exit(app.exec_())
View Code

 

 

四、信號/槽 都是自定義的

class Test(QDialog):

    button_clicked_signal = pyqtSignal() # 自定義信號,不帶參
    
    def __init__(self,parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        btn.clicked.connect(self.btn_clicked) # 信號/槽
        
        self.button_clicked_signal.connect(self.my_close) # 接收信號,連接到槽
        
        
    def btn_clicked(self):
        self.button_clicked_signal.emit() # 發送自定義信號,無參
        
    def my_close(self):
        self.close()

 

完整代碼:

from PyQt5.QtWidgets import *
import sys

class Test(QDialog):

    button_clicked_signal = pyqtSignal() # 自定義信號,不帶參
    
    def __init__(self,parent=None):
        super().__init__(parent)

        btn = QPushButton('關閉', self)
        btn.clicked.connect(self.btn_clicked) # 信號/槽
        
        self.button_clicked_signal.connect(self.my_close) # 接收信號,連接到槽
        
        
    def btn_clicked(self):
        self.button_clicked_signal.emit() # 發送自定義信號,無參
        
    def my_close(self):
        self.close()

        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    dlg = Test()
    dlg.show()
    sys.exit(app.exec_())
    
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM