處理鼠標(biāo)事件的頻率不低于鍵盤事件。包括按下悬赏、松開鼠標(biāo)按鍵罢低;移動鼠標(biāo)到特定區(qū)域或離開特定區(qū)域;更改鼠標(biāo)指針的形狀,等等劈彪。
1.按下臣淤、松開鼠標(biāo)按鍵
按下并釋放鼠標(biāo)按鈕時,將調(diào)用以下方法:
mousePressEvent (self, event) - 鼠標(biāo)鍵按下時調(diào)用;
mouseReleaseEvent (self, event) - 鼠標(biāo)鍵公開時調(diào)用;
mouseDoubieCiickEvent (self, event) - 雙擊鼠標(biāo)時調(diào)用嫌松。必須注意沪曙,在雙擊之前的其他事件。雙擊時的事件順序如下:
MouseButtonPress
MouseButtonRelease
MouseButtonDblClick
MouseButtonPress
MouseButtonRelease
QApplicaption類的setDoubleClickInterval( )方法可設(shè)置雙擊的時間間隔萎羔;doubleClickInterval( )方法返回雙擊的時間間隔液走。
event參數(shù)是QMouseEvent對象,存儲事件的其他信息贾陷。有以下方法:
x() 和 y() -返回相對于控件空間的鼠標(biāo)坐標(biāo)值;
pos() - 返回相對于控件空間的QPoint對象;
localPos()- 返回相對于控件空間的QPointF對象;
globalX() 和 globalY() - 返回相對于屏幕的x,y 坐標(biāo)值缘眶;
globalPos() - 返回相對于屏幕的QPoint對象;
windowPos() - 返回相對于窗口的QPointF對象;
screenPos() - 返回相對于屏幕的QPointF對象;
button() - 返回以下枚舉值(只列了部分,詳細內(nèi)容參見http://doc.qt.io/qt-5/qt.html#MouseButton-enum)髓废,用以判斷是哪個鼠標(biāo)健觸發(fā)了事件巷懈。
QtCore.Qt.NoButton - 0 - 沒有按下鼠標(biāo)鍵。例如移動鼠標(biāo)時的button()返回值慌洪;
QtCore.Qt.LeftButton -1 -按下鼠標(biāo)左鍵顶燕;
QtCore.Qt.RightButton -2 -按下鼠標(biāo)右鍵;
QtCore.Qt.Mion 或 QtCore.Qt.MiddleButton -4 -按下鼠標(biāo)中鍵冈爹;
buttons() - 返回前面所列枚舉值的組合涌攻,用于判斷同時按下了哪些鍵。
modifiers() - 判斷按下了哪些修飾鍵(Shift,Ctrl , Alt,等等),詳見鍵盤事件(18)中的modifiers()频伤。
timestamp() - 返回事件發(fā)生的時間癣漆;
如果要讓父控件繼續(xù)收到鼠標(biāo)事件,要調(diào)用事件的ignore()方法剂买;否則惠爽,調(diào)用accept()。
如果一個控件的QtCore.Qt.WA_NoMousePropagation的屬性設(shè)為True,則不會將事件傳遞給父控件瞬哼。調(diào)用setAttribute( )方法可修改此參數(shù):
button.setAttribute (QtCore.Qt.WA_NoMousePropagation, True)
缺省情況下婚肆,鼠標(biāo)事件只攔截控件區(qū)域上的鼠標(biāo)操作。如果可攔截控件區(qū)域以下的鼠標(biāo)事件坐慰,必須調(diào)用grabMouse( )方法较性;釋放時用僧,調(diào)用releaseMouse( )。
2.鼠標(biāo)指針
要處理鼠標(biāo)指針的移動赞咙,需要重載mouseMoveEvent(self责循,event)方法。缺省情況下攀操,只有按下鼠標(biāo)鍵移動時院仿,才會調(diào)用mouseMoveEvent( )。如果要處理包括普通的移動速和,需要以參數(shù)為True調(diào)用setMouseTracking() 方法歹垫。如果要處理窗口中鼠標(biāo)移動的事件,需要調(diào)用grabMouse( )方法颠放。
event對象的pos( )返回值為相對控件的坐標(biāo)排惨,要轉(zhuǎn)換成相對父控件或屏幕的坐標(biāo),需要調(diào)用QWidget類的以下方法:
mapToGlobal (QPoint) - 將窗口坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo);
mapFromGlobal(QPoint) - 將屏幕坐標(biāo)轉(zhuǎn)換成窗口坐標(biāo);
mapToParent(QPoint) - 將窗口坐標(biāo)轉(zhuǎn)換成父窗口坐標(biāo)碰凶。如果沒有父窗口暮芭,則相當(dāng)于mapToGlobal (QPoint);
mapFromParent(QPoint) - 將父窗口坐標(biāo)轉(zhuǎn)換成窗口坐標(biāo)。如果沒有父窗口欲低,則相當(dāng)于mapFromGlobal(QPoint);
mapTo (QWidget, QPoint) - 將窗口坐標(biāo)轉(zhuǎn)換成 QWidget父窗口坐標(biāo);
mapFrom (QWidget, QPoint) - 將 QWidget父窗口坐標(biāo)轉(zhuǎn)換成窗口坐標(biāo);
3. 鼠標(biāo)移進和移出控件
鼠標(biāo)移進和移出控件時谴麦,下列方法將被調(diào)用:
enterEvent (self, event) -鼠標(biāo)進入控件;
leaveEvent (self, event) - 鼠標(biāo)離開控件;
event是一個QEvent對象,并不包括附加信息伸头。
4.滾動鼠標(biāo)
wheelEvent (self, event)方法可用來處理鼠標(biāo)滾動事件匾效。event是一個QWheelEvent對象,包含滾輪操作的相關(guān)信息恤磷。有以下方法可調(diào)用:
angleDelta( ) - 返回QPoint對象面哼,為滾輪轉(zhuǎn)過的數(shù)值,單位為1/8度扫步。例如:
angle=event.angleDelta( ) /8
angleX=angle.x()
angleY=angle.y()
pixelDeita () - 返回QPoint對象魔策,為滾輪轉(zhuǎn)過的像素值。
x() 和 y() - 返回相對于控件的當(dāng)前鼠標(biāo)的x,y位置;
pos() - 返回相對于控件的當(dāng)前鼠標(biāo)位置的QPoint對象;
posF() - 返回相對于控件的當(dāng)前鼠標(biāo)位置的QPoinFt對象;
globalX() 和globalY() - 返回相對于屏幕的當(dāng)前鼠標(biāo)的x,y位置;
globalPos() - 返回相對于屏幕的當(dāng)前鼠標(biāo)QPoint位置;
globalPosF() - 返回相對于屏幕的當(dāng)前鼠標(biāo)QPointF位置;
buttons(),modifiers()和timestamp()的用法參見本文“1.按下河胎、松開鼠標(biāo)按鍵”中的相關(guān)內(nèi)容闯袒。
如果要讓父控件繼續(xù)收到滾輪事件,要調(diào)用事件的ignore()方法游岳;否則政敢,調(diào)用accept()。
5.更改鼠標(biāo)指針形狀
要修改鼠標(biāo)進入控件后的形狀胚迫,可調(diào)用QWidget的下列方法:
setCursor(QCursor qcr) - 參數(shù)qcr為QCursor對象或 Qtcore.Qt 類的枚舉值,如:ArrowCursor(標(biāo)準箭頭)喷户、upArrowCursor(向上箭頭)、 CrossCursor(十字光標(biāo))访锻、Waitcursor (沙漏)褪尝,等等闹获。
setCursor(QtCore.Qt.WaitCursor)
unsetCursor() - 取消設(shè)置的鼠標(biāo)形狀。
cursor() - 返回當(dāng)前鼠標(biāo)形狀的QCursor對象河哑,避诽。
使用QApplication類中的以下靜態(tài)方法來控制整個應(yīng)用程序的鼠標(biāo)形狀:
setOverrideCursor(QCursor qcr) - 參數(shù)qcr為QCursor對象或 Qtcore.Qt 類的枚舉值。
restoreOverrideCursor() - 取消全局鼠標(biāo)形狀設(shè)置璃谨;
changeOverrideCursor(QCursor qcr) - 將鼠標(biāo)形狀設(shè)置為qcr沙庐。只有先調(diào)用setOverrideCursor( )了,該函數(shù)才起作用睬罗。
overrideCursor( ) - 返回當(dāng)前鼠標(biāo)形狀的QCursor 對象轨功;
setOverrideCursor()和restoreOverrideCursor( )通常配合使用旭斥。
PyQt5編程(19):鼠標(biāo)事件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門熙揍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氏涩,你說我怎么就攤上這事届囚。” “怎么了是尖?”我有些...
- 文/不壞的土叔 我叫張陵意系,是天一觀的道長。 經(jīng)常有香客問我饺汹,道長蛔添,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任兜辞,我火速辦了婚禮迎瞧,結(jié)果婚禮上子刮,老公的妹妹穿的比我還像新娘验辞。我一直安慰自己,他們只是感情好邮府,可當(dāng)我...
- 文/花漫 我一把揭開白布胁塞。 她就那樣靜靜地躺著咏尝,像睡著了一般压语。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上编检,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼生百!你這毒婦竟也來了递雀?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布曼追,位于F島的核電站,受9級特大地震影響汉规,放射性物質(zhì)發(fā)生泄漏礼殊。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一针史、第九天 我趴在偏房一處隱蔽的房頂上張望晶伦。 院中可真熱鬧,春花似錦啄枕、人聲如沸婚陪。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽泌参。三九已至脆淹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沽一,已是汗流浹背盖溺。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 參數(shù)number的取值在QEvent.User (1000)-QEvent.MaxUseg(65535)之間捡硅。攔截...
- 1.改變窗口狀態(tài)下列的方法可用來改變或判斷窗口的狀態(tài)(最小化哮内、最大化、隱藏和顯示): -- coding: utf...
- 所有的GUI應(yīng)用程序都是基于事件驅(qū)動的病曾。事件主要由應(yīng)用程序的用戶產(chǎn)生牍蜂,但也可以由其他方式生成漾根。比如泰涂,網(wǎng)絡(luò)連接,定時...
- 事件分類 鼠標(biāo)事件 click/ mousedown/ mousemove/ mouseup/ contextme...