【PyQt5-Qt Designer】滑鼠+鍵盤事件
阿新 • • 發佈:2018-12-26
重定義滑鼠響應+鍵盤響應事件
一,每個事件都被封裝成相應的類:
pyqt中,每個事件型別都被封裝成相應的事件類,如滑鼠事件為QMouseEvent,鍵盤事件為QKeyEvent等。而它們的基類是QEvent。
二,基類QEvent的幾個重要方法:
accept() 表示事件已處理,不需要向父視窗傳播
ignore()表示事件未處理,繼續向父視窗傳播f
type()返回事件型別,如QtCore.QEvent.MouseButtonPress,一般由基事件呼叫。因為其它事件已經知道自己的事件型別了。
還有一個自定義事件的註冊方法。
三,QMouseEvent滑鼠事件:
buttons() 返回哪個滑鼠按鍵被按住了。如Qt.LeftButton
globalPos() 返回滑鼠相對螢幕的位置QPoint
pos() 返回滑鼠相對處理事件的視窗的位置
四、處理滑鼠事件的響應函式(在QWidget及其繼承類中):
mousePressEvent(QMouseEvent) #滑鼠點選觸發事件
mouseReleaseEvent(event) #滑鼠釋放觸發事件
mouseMoveEvent(event) #滑鼠移動觸發事件
# 事件。 """重寫滑鼠事件,實現視窗拖動。""" def mousePressEvent(self, event): if event.buttons() == Qt.LeftButton: self.setCursor(Qt.OpenHandCursor) self.parent.m_drag= True self.parent.m_DragPosition = event.globalPos()-self.parent.pos() event.accept() def mouseMoveEvent(self, event): try: if event.buttons() and Qt.LeftButton: self.parent.move(event.globalPos()-self.parent.m_DragPosition)#move將視窗移動到指定位置 event.accept()except AttributeError: pass def mouseReleaseEvent(self, event): if event.button()==Qt.LeftButton: self.m_drag = False self.unsetCursor()
效果如下:
重新定義滑鼠事件:
"""重定義滑鼠單擊事件""" def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.lab1.setText("滑鼠左鍵點選!") # print(event.pos().x(),event.pos().y()) if event.button() == Qt.RightButton: self.lab1.setText("滑鼠右鍵點選!") """當滑鼠左鍵點選拖動時觸發事件,有無if判斷條件效果都一樣""" def mouseMoveEvent(self, event): # if event.buttons() == Qt.LeftButton: # # print(type(event.pos().x())) #<class 'int'> # self.lab2.setText(str(event.pos().x())+","+str(event.pos().y())) self.pos = event.pos() print(self.pos) self.lab2.setText(str(event.pos().x()) + "," + str(event.pos().y())) self.update()
完整程式碼:
1 from PyQt5.QtCore import Qt 2 from PyQt5.QtGui import (QPainter, QColor, QPen) 3 import sys 4 from PyQt5.QtWidgets import (QApplication,QWidget,QLabel) 5 6 class Example(QWidget): 7 def __init__(self): 8 super(Example, self).__init__() 9 self.initUi() 10 #預設情況下禁用滑鼠跟蹤, 如果啟用滑鼠跟蹤,即使沒有按鈕被按下,小部件也會接收滑鼠移動事件。 11 #當然你也可以不寫,只需要在執行的過程中按照滑鼠左鍵也行 12 self.setMouseTracking(True) 13 14 def initUi(self): 15 self.setGeometry(400,300,400,300) 16 self.setWindowTitle("鍵盤響應事件") 17 self.lab1 = QLabel("方向",self) 18 self.lab1.setGeometry(200,150,100,100) 19 self.lab2 = QLabel("顯示滑鼠座標", self) 20 self.lab2.setGeometry(200, 80, 100, 100) 21 22 """重定義鍵盤事件""" 23 def keyPressEvent(self,e ): 24 if e.key() == Qt.Key_Up: 25 self.lab1.setText("↑") 26 elif e.key() == Qt.Key_Down: 27 self.lab1.setText("↓") 28 elif e.key() == Qt.Key_Left: 29 self.lab1.setText("←") 30 else: 31 self.lab1.setText("→") 32 33 """重定義滑鼠單擊事件""" 34 def mousePressEvent(self, event): 35 if event.button() == Qt.LeftButton: 36 self.lab1.setText("滑鼠左鍵點選!") 37 # print(event.pos().x(),event.pos().y()) 38 if event.button() == Qt.RightButton: 39 self.lab1.setText("滑鼠右鍵點選!") 40 41 """當滑鼠左鍵點選拖動時觸發事件,有無if判斷條件效果都一樣""" 42 def mouseMoveEvent(self, event): 43 # if event.buttons() == Qt.LeftButton: 44 # # print(type(event.pos().x())) #<class 'int'> 45 # self.lab2.setText(str(event.pos().x())+","+str(event.pos().y())) 46 self.pos = event.pos() 47 print(self.pos) 48 self.lab2.setText(str(event.pos().x()) + "," + str(event.pos().y())) 49 self.update() 50 51 52 53 if __name__ == '__main__': 54 app = QApplication(sys.argv) 55 ex = Example() 56 ex.show() 57 sys.exit(app.exec_())重定義滑鼠響應+鍵盤響應
所有的QT鍵盤事件程式碼如下:
https://pan.baidu.com/s/1Brry6fkUcxaP-uOdukD8Ng