3.1 PyQt5事件、訊號和槽的機制原理--事件處理機制講解
阿新 • • 發佈:2022-03-22
一、事件處理機制講解
1.基礎知識
1>Pyqt提供了兩種機制:
- 高階的訊號與槽機制:只能解決視窗控制元件的某些特定行為
- 低階的事件處理機制:可以對視窗控制元件進行更深層次的研究,如自定義視窗
2>區別
- 事件相當於建立視窗控制元件的
- 訊號和槽就是對這個視窗控制元件進行使用的
3>常見的QT事件
- 鍵盤事件:按鍵按下和鬆開
- 滑鼠事件:滑鼠指標移動、滑鼠按鍵按下和鬆開
- 拖放事件:用滑鼠進行拖放
- 滾輪事件:滑鼠滾輪滾動
- 繪屏事件:重繪螢幕的某些部分
- 定時事件:定時器到時
- 焦點事件:鍵盤焦點移動
- 進入和離開事件:滑鼠指標移入Widget內,或者移出
- 移動事件:Widgt的位置改變
- 大小改變事件:Widgt的大小改變
- 顯示和隱藏事件:Widgt的顯示和隱藏
- 視窗事件:視窗是否為當前視窗
- 還包括:Socket事件,剪貼簿事件,字型改變事件,佈局改變事件等
4>使用事件處理的方法
5種事件處理和過濾方法(由弱到前,前兩種方法使用最頻繁)
- 重新實現事件函式:mousePressEvent(),keyPressEvent(),paintEvent(),這是最常規的事件處理方法
- 重新實現QObject.event():一般沒有提供該事件的處理函式的情況下,即增加新事件時
- 安裝事件過濾器:QObject呼叫installEventFilter
- 在QApplication中安裝事件過濾器
- 重新實現QApplication的notify()方法
2.程式碼
from PyQt5.Qt import * import sys class Window(QWidget) : def __init__(self) : super().__init__() self.setWindowTitle('事件機制') self.resize(600, 450) self.move(300, 300) class Btn(QPushButton) : def __init__(self, *args, **kwargs) : super().__init__(*args, **kwargs) self.move(60, 60) self.resize(50, 35) self.setText('按鈕控制元件') self.setStyleSheet('background-color:green') def event(self, evt) : print(evt, '事件機制') return super().event(evt) def mousePressEvent(self, evt) : print("滑鼠按下事件") return super().mousePressEvent(evt) if __name__ == '__main__' : app = QApplication(sys.argv) window = Window() btn = Btn(window) def myslot() : print('事件機制') btn.pressed.connect(myslot) window.show() sys.exit(app.exec_())