PyQt5學(xué)習(xí)筆記(十五):重新實(shí)現(xiàn)事件觸發(fā)信號(hào)

雖然 Qt 已經(jīng)自帶了很多信號(hào)函數(shù),基本上可以滿足我們大部分的需求,但有時(shí)候?yàn)榱藘?yōu)化我們的程序,通常還需要自己定義或改寫一些信號(hào)函數(shù)。本文由 Cescfangs 譯自 ZetCode pyqt5系列教程 并作適當(dāng)修改。

在本次的學(xué)習(xí)筆記中,我們將重構(gòu)鼠標(biāo)點(diǎn)擊時(shí)發(fā)射的信號(hào)函數(shù),實(shí)現(xiàn)點(diǎn)擊鼠標(biāo)自動(dòng)關(guān)閉程序的效果,源代碼如下:

from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QMainWindow, QApplication


class Communicate(QObject):

    closeApp = pyqtSignal()


class exp(QMainWindow):

    """docstring for ex"""

    def __init__(self):
        super(exp, self).__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(400, 400, 500, 300)
        self.setWindowTitle('Emitting')

        self.c = Communicate()
        self.c.closeApp.connect(self.close)

    def mousePressEvent(self, event):

        self.c.closeApp.emit()

if __name__ == '__main__':

    import sys
    app = QApplication(sys.argv)
    ex = exp()
    ex.show()
    sys.exit(app.exec_())

通過以上的代碼,創(chuàng)建了鼠標(biāo)點(diǎn)擊時(shí)發(fā)射的信號(hào),把這個(gè)信號(hào)與close()槽聯(lián)系起來(lái)達(dá)到關(guān)閉應(yīng)用的效果。

class Communicate(QObject):

    closeApp = pyqtSignal()

創(chuàng)建了一個(gè)closeApp 的信號(hào),之前的筆記中我們創(chuàng)建的都是QPushButton,QLabel等在窗口中可見的部件,實(shí)際上我們也可以創(chuàng)建 pyqtSignal() 信號(hào)函數(shù)。

def mousePressEvent(self, event):

        self.c.closeApp.emit()

重新定義了mousePressEvent() 函數(shù),當(dāng)鼠標(biāo)按下的時(shí)候,發(fā)射closeApp信號(hào)。

self.c = Communicate()
self.c.closeApp.connect(self.close)

closeApp()close() 槽連接起來(lái)達(dá)到關(guān)閉應(yīng)用的目的:

點(diǎn)擊關(guān)閉
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、事件 所有的GUI應(yīng)用都是事件驅(qū)動(dòng)的。事件主要由應(yīng)用的用戶操作產(chǎn)生的。但是事件可能由其他條件觸發(fā),比如:一個(gè)網(wǎng)...
    交易狗二哈閱讀 9,893評(píng)論 2 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評(píng)論 19 139
  • 第一章 Nginx簡(jiǎn)介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,803評(píng)論 24 1,002
  • 信號(hào)和槽(Signals and Slots) Qt庫(kù)第一個(gè)認(rèn)識(shí)到在幾乎所有情況下,程序員不需要或甚至不想知道所有...
    珞珈村下山閱讀 9,893評(píng)論 0 23
  • 父親這輩子極苦,卻苦而彌堅(jiān)、愈挫愈勇,永不言敗。 父親是祖父母的第一個(gè)孩子,據(jù)說(shuō)小時(shí)候長(zhǎng)得白白胖胖,很是討人喜歡,...
    韋鳳凰閱讀 570評(píng)論 11 9