參考連接:https://www.cnblogs.com/zhuluqing/p/9028816.htmlhtml
pyqt中,每一個事件類型都被封裝成相應的事件類,如鼠標事件爲QMouseEvent,鍵盤事件爲QKeyEvent等。而它們的基類是QEvent。python
accept() 表示事件已處理,不須要向父窗口傳播ide
ignore()表示事件未處理,繼續向父窗口傳播f函數
type()返回事件類型,如QtCore.QEvent.MouseButtonPress,通常由基事件調用。由於其它事件已經知道本身的事件類型了。spa
還有一個自定義事件的註冊方法。指針
buttons()返回哪一個鼠標按鍵被按住了。如Qt.LeftButtonrest
globalPos()返回鼠標相對屏幕的位置QPointcode
pos()返回鼠標相對處理事件的窗口的位置htm
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()
處理鼠標事件的頻率不低於鍵盤事件。包括按下、鬆開鼠標按鍵;移動鼠標到特定區域或離開特定區域;更改鼠標指針的形狀,等等。
1.按下、鬆開鼠標按鍵
按下並釋放鼠標按鈕時,將調用如下方法:
event參數是QMouseEvent對象,存儲事件的其餘信息。有如下方法:
若是要讓父控件繼續收到鼠標事件,要調用事件的ignore()方法;不然,調用accept()。
若是一個控件的QtCore.Qt.WA_NoMousePropagation的屬性設爲True,則不會將事件傳遞給父控件。調用setAttribute( )方法可修改此參數:
button.setAttribute (QtCore.Qt.WA_NoMousePropagation, True)
缺省狀況下,鼠標事件只攔截控件區域上的鼠標操做。若是可攔截控件區域如下的鼠標事件,必須調用grabMouse( )方法;釋放時,調用releaseMouse( )。
2.鼠標指針
要處理鼠標指針的移動,須要重載mouseMoveEvent(self,event)方法。缺省狀況下,只有按下鼠標鍵移動時,纔會調用mouseMoveEvent( )。若是要處理包括普通的移動,須要以參數爲True調用setMouseTracking() 方法。若是要處理窗口中鼠標移動的事件,須要調用grabMouse( )方法。
event對象的pos( )返回值爲相對控件的座標,要轉換成相對父控件或屏幕的座標,須要調用QWidget類的如下方法:
3. 鼠標移進和移出控件 鼠標移進和移出控件時,下列方法將被調用:
event是一個QEvent對象,並不包括附加信息。
4.滾動鼠標
wheelEvent (self, event)方法可用來處理鼠標滾動事件。event是一個QWheelEvent對象,包含滾輪操做的相關信息。有如下方法可調用:
若是要讓父控件繼續收到滾輪事件,要調用事件的ignore()方法;不然,調用accept()。
5.更改鼠標指針形狀
要修改鼠標進入控件後的形狀,可調用QWidget的下列方法:
setCursor(QCursor qcr) - 參數qcr爲QCursor對象或 Qtcore.Qt 類的枚舉值,如:ArrowCursor(標準箭頭)、upArrowCursor(向上箭頭)、 CrossCursor(十字光標)、Waitcursor (沙漏),等等。
setCursor(QtCore.Qt.WaitCursor)
使用QApplication類中的如下靜態方法來控制整個應用程序的鼠標形狀:
setOverrideCursor()和restoreOverrideCursor( )一般配合使用。