[ PyQt入門教程 ] PyQt5信號與槽


   信號和槽是PyQt編程對象之間進行通信的機制。每個繼承自QWideget的控件都支持信號與槽機制。信號發射時(發送請求),連接的槽函數就會自動執行(針對請求進行處理)。本文主要講述信號和槽最基本、最經常使用方法。就是內置信號和槽的使用的使用方法。

內置信號和槽

  所謂內置信號與槽的使用。是指在發射信號時,使用窗口控件的函數,而不是自定義的函數。信號與槽的連接方法是通過QObject.signal.connect將一個QObject的信號連接到另一個QObject的槽函數。

  在任何GUI設計中,按鈕都是最重要的和常用的觸發動作請求的方式,用來與用戶進行交互操作。常見的按鈕包括QPushButton、QRadioButton和QCheckBox。這些按鈕都繼承自QAbstractButton類,QAbstractButton提供的信號包括:

  Clicked:鼠標左鍵點擊按鈕並釋放觸發該信號。最常用。記住這個就差不多夠了。

  Pressed:鼠標左鍵按下時觸發該信號

  Released:鼠標左鍵釋放時觸發該信號

  Toggled:控件標記狀態發生改變時觸發該信號。

 內置信號和槽使用實例

  這里實現一個點擊按鈕退出界面需求實現過程來介紹內置信號和槽。開始動手。。。

  Step1:打開Qt Designer,選擇Widget模板。在工具箱中拖動Push Button控件按鈕到主界面。並修改控件顯示名稱。保存為singal.ui。界面如下:

Step2:使用pyuic5 -o singal.py singal.ui轉換成.py格式。

Step3:為考慮介紹方便,將調用程序在singal.py中主程序。其中MyMainForm類中的命令行為Push Button按鈕點擊信號添加槽函數。如下

  self.pushButton.clicked.connect(self.close)

完整代碼如下(可直接拷貝運行,字體加粗部分為添加部分):

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'signal.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

import sys from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(431, 166)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(160, 50, 91, 41))
        font = QtGui.QFont()
        font.setFamily("YaHei Consolas Hybrid")
        font.setPointSize(14)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "信號與槽"))
        self.pushButton.setText(_translate("Form", "關閉"))

class MyMainForm(QMainWindow, Ui_Form): def __init__(self, parent=None): super(MyMainForm, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.close) if __name__ == "__main__": app = QApplication(sys.argv) myWin = MyMainForm() myWin.show() sys.exit(app.exec_())

運行並點擊如下按鈕就可以關閉窗口

內置信號和自定義槽使用實例

  實現過程同上述步驟一樣。槽函數showMsg為自定義函數。

  信號與槽:self.pushButton.clicked.connect(self.showMsg)

完整代碼如下(可直接拷貝運行,字體加粗部分為添加部分):

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'signal.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
import sys from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(431, 166)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(160, 50, 91, 41))
        font = QtGui.QFont()
        font.setFamily("YaHei Consolas Hybrid")
        font.setPointSize(14)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "信號與槽"))
        self.pushButton.setText(_translate("Form", "運行"))

class MyMainForm(QMainWindow, Ui_Form): def __init__(self, parent=None): super(MyMainForm, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.showMsg) def showMsg(self): QMessageBox.information(self, "信息提示框", "OK,內置信號與自定義槽函數!") if __name__ == "__main__": app = QApplication(sys.argv) myWin = MyMainForm() myWin.show() sys.exit(app.exec_())

運行結果如下:

Qt Designer添加控件信號與槽

  上述介紹的內容是通過代碼方式實現內置信號與槽的連接。那Qt Designer工具可以實現信號與槽的連接?之前在第二節課Qt Designer主界面介紹時提過信號槽區域。一直沒有講如何使用。通過這個區域功能是可以實現信號與槽的連接的。

  還是以添加內置信號與槽來介紹。

  Step1:打開Qt Designer界面,找到信號槽編輯區。如下

  Step2:點擊+號 Sender控件選擇"PushButton"、Signal信號選擇"clicked",Receiver選擇"Form",內置槽函數選擇"close()"

 Step3:保存.ui格式,並使用pyuic轉換成.py格式,添加調用程序,運行。效果一樣。這些步驟都介紹過,不再重復介紹,關鍵代碼如下:

小結

  本文介紹了PyQt5信號與槽最基本的使用方法。知道如何在Qt Designer生成的.py文件中添加控件信號與槽的關系並且知道如何調用自定義槽函數。掌握了這些,應該就可以動手實現一些基本的需求了。

  到這里,按照這幾個章節的介紹應該可以動手完成簡單需求的實現。至於更進一步的學習,可以通過實踐過程中遇到的問題以及小工具開發需求去驅動加深理解可能效果會好一點。


免責聲明!

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



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