QT界面操作1:如何跟踪鼠标位置?
python GUI庫圖形界面開發(fā)之PyQt5信號與槽事件處理機(jī)制詳細(xì)介紹與實例解析_python_腳本之家 (jb51.net)
一、可預(yù)見事件
事件很多,窗口、鼠標(biāo)、鍵盤、時間等的些許改變,都足可以構(gòu)成一個事件。有些事件是可預(yù)料的如按鈕按下、鼠標(biāo)移動等,可以預(yù)先建立程序入口。所有的QWidget都存在可預(yù)見事件。如下:
- 鍵盤事件:按鍵的按下與松開
- 鼠標(biāo)事件:鼠標(biāo)指針的移動,鼠標(biāo)按鍵的按下與松開
- 拖放事件:用鼠標(biāo)進(jìn)行拖放
- 滾輪事件:鼠標(biāo)滾輪滾動
- 繪屏事件:重繪制屏幕的某些部分
- 定時事件:定時器到時
- 焦點事件:鍵盤焦點移動
- 進(jìn)入和離開事件:鼠標(biāo)指針移入Widget內(nèi),或者移出
- 移動事件:Widget的位置改變
- 大小改變事件:widget的大小改變
- 顯示和隱藏事件:widget顯示與隱藏
- 窗口事件:窗口是否為當(dāng)前窗口
如:mousePressEvent(),keyPressEvent(),paintEvent()
二、概括性事件--QObject.event
????????概括性事件,是指凡是有事件觸發(fā),這個事件必然被觸發(fā),而且是最早觸發(fā)。這個道理是,事件觸發(fā)首先是操作系統(tǒng)的某個中斷被觸發(fā),究竟是哪一個中斷事件,需要進(jìn)一步判別。這個概括性事件就是QObject.event()接口。
?因此,有些事件可以超載對應(yīng)事件虛函數(shù)實現(xiàn)。當(dāng)然,也可以超載QObject的Event得以實現(xiàn)。
三、鼠標(biāo)追蹤
????????本代碼首先解決一個小問題,如何追蹤鼠標(biāo)的位置?本篇介紹可預(yù)見事件超載實現(xiàn)。
3.1 基本代碼
1)導(dǎo)入函數(shù)包
import sys from PyQt5.QtCore import (QEvent, QTimer, Qt) from PyQt5.QtWidgets import (QApplication, QMenu, QWidget) from PyQt5.QtGui import QPainter2)定義一個窗口
class Widget(QWidget):def __init__(self, parent=None):super(Widget, self).__init__(parent)self.resize(1200, 800)self.move(100, 100)#設(shè)置標(biāo)題self.setWindowTitle("Events")3)運行所定義窗口
if __name__ == "__main__":app = QApplication(sys.argv)form = Widget()form.show()app.exec_()3.2 追加鼠標(biāo)位置追綜功能
在以上的widget追加一個函數(shù):
def mouseMoveEvent(self, event):#如果沒有鼠標(biāo)雙擊,執(zhí)行g(shù)lobalPos = self.mapToGlobal(event.pos())x = globalPos.x()y = globalPos.y()print(x,y)以上程序在鼠標(biāo)按下后移動,可以捕獲移動位置,但鼠標(biāo)不按不可以跟蹤,如何改,才能不按下鼠標(biāo)也能追蹤?
答案:在
class Widget(QWidget):
? def __init__(self, parent=None):
上追加:
self.setMouseTracking(True)就可以了。
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的QT界面操作1:如何跟踪鼠标位置?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随机过程:高斯函数导数、梯度
- 下一篇: QT5界面操作2:如何用状态栏显示鼠标坐