雖然 Qt 已經自帶了很多信號函數,基本上可以滿足我們大部分的需求,但有時候為了優化我們的程序,通常還需要自己定義或改寫一些信號函數。本文由 Cescfangs 譯自 ZetCode pyqt5系列教程 并作適當修改。
在本次的學習筆記中,我們將重構鼠標點擊時發射的信號函數,實現點擊鼠標自動關閉程序的效果,源代碼如下:
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_())
通過以上的代碼,創建了鼠標點擊時發射的信號,把這個信號與close()
槽聯系起來達到關閉應用的效果。
class Communicate(QObject):
closeApp = pyqtSignal()
創建了一個closeApp
的信號,之前的筆記中我們創建的都是QPushButton
,QLabel
等在窗口中可見的部件,實際上我們也可以創建 pyqtSignal()
信號函數。
def mousePressEvent(self, event):
self.c.closeApp.emit()
重新定義了mousePressEvent()
函數,當鼠標按下的時候,發射closeApp
信號。
self.c = Communicate()
self.c.closeApp.connect(self.close)
將 closeApp()
與 close()
槽連接起來達到關閉應用的目的:
點擊關閉