雖然 Qt 已經(jīng)自帶了很多信號(hào)函數(shù)绪钥,基本上可以滿(mǎn)足我們大部分的需求,但有時(shí)候?yàn)榱藘?yōu)化我們的程序关炼,通常還需要自己定義或改寫(xiě)一些信號(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_())
通過(guò)以上的代碼社痛,創(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
等在窗口中可見(jiàn)的部件斩箫,實(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)閉