最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python鼠標(biāo)事件及坐標(biāo)獲取窗口和屏幕坐標(biāo)

 更新時(shí)間:2021年10月08日 17:25:27   作者:京城最明亮的少年  
這篇文章主要介紹了Python編程中如何通過鼠標(biāo)事件及坐標(biāo)獲取窗口坐標(biāo)和屏幕坐標(biāo)的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助

本文主要介紹重寫自帶的一些方法,拾取屏幕和窗口坐標(biāo)信息

效果如下:

這里寫圖片描述

分析:

定時(shí)服務(wù):在固定一段時(shí)間后執(zhí)行相關(guān)的函數(shù)方法,例如這里表示的是在0秒后執(zhí)行self.giveHelp這個(gè)方法

QTimer.singleShot(0, self.giveHelp)

重寫關(guān)閉事件

    def giveHelp(self):
        self.text = "請(qǐng)點(diǎn)擊這里觸發(fā)追蹤鼠標(biāo)的功能"
        self.update()
# self.update()表示的是刷新

重寫上下文菜單事件

#這里的重寫上下文菜單表示的是右鍵所顯示的菜單
def contextMenuEvent(self, event):
    menu = QMenu(self)
    oneAction = menu.addAction("&one")
    #這里表示的是右鍵后再選擇出現(xiàn)時(shí)連接的信號(hào)和槽函數(shù)
    oneAction.triggered.connect(self.one)
    # 這里表示的是添加一行分割線
    menu.addSeparator()
    menu.exec_(event.globaPos)

重寫自帶的繪制事件 也就是自定義

def paintEvent(self, event):
    text = self.text
    i = text.find("\n\n")
    if i>=0:
        text = text[0:1]
    if self.key:這個(gè)表示的是如果觸發(fā)了鍵盤事件那么這里就記錄按鈕事件的信息   
    text += "\n\n你按下了: {0}".format(self.key)
    painter = QPainter(self)
    painter.setRebderHint(QPainter.TextAntialiasing)
    painter.drawText(self.rect(), Qt.AlignCenter, text)#繪制文本信息

重新實(shí)現(xiàn)調(diào)整窗口大小事件

也就是說在界面窗口大小出現(xiàn)變化的時(shí)候回調(diào)用這個(gè)方法

def resizeEvent(self,event):
    self.text = "調(diào)整窗口大小為: QSize({0},{1})".format(event.size().width(), event.size().height())
    self.update()

重新實(shí)現(xiàn)鼠標(biāo)的釋放事件

也就是說當(dāng)鼠標(biāo)雙擊完成或者是單擊完成之后調(diào)用的方法

    def mouseReleaseEvent(self, event):

重新實(shí)現(xiàn)鼠標(biāo)的移動(dòng)事件

也就是說在鼠標(biāo)移動(dòng)的過程中就會(huì)調(diào)用這個(gè)方法

def mouseMoveEvent(self, event):
        # 這里的意思就是將窗口的坐標(biāo)轉(zhuǎn)化為屏幕的坐標(biāo)
        globalPos = self.mapTpGlobal(event.pos())
        self.text = """鼠標(biāo)的位置為: 窗口坐標(biāo)為: Qpoint({0},{1}),屏幕坐標(biāo)為:屏幕坐標(biāo)為:QPoint({2},{3})""".format(
        event.pos().x(),event.pos().y(), globalPos.x(), globalPos.y())
        )
        self.update()

重新實(shí)現(xiàn)鼠標(biāo)雙擊事件

    def mouseDoubleClickEvent(self, event):
        self.justDoubleClicked = True
        self.text = "你雙擊了鼠標(biāo)"
        self.update()

重新實(shí)現(xiàn)鍵盤按下事件

def keyPressEvent(self, event):
    if event.key()==QT.Key_Home:
        self.key = "Home"

源碼如下

import sys
from PyQt5.QtCore import (QEvent, QTimer, Qt)
from PyQt5.QtWidgets import (QApplication, QMenu, QWidget)
from PyQt5.QtGui import QPainter
class Widget(QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.justDoubleClicked = False
        self.key = ""
        self.text = ""
        self.message = ""
        self.resize(400, 300)
        self.move(100, 100)
        self.setWindowTitle("Events")
        # 這里表示6秒鐘后調(diào)用giveHelp這個(gè)方法
        QTimer.singleShot(6000, self.giveHelp)  # 避免窗口大小重繪事件的影響,可以把參數(shù)0改變成3000(3秒),然后在運(yùn)行,就可以明白這行代碼的意思。
    def giveHelp(self):
        self.text = "請(qǐng)點(diǎn)擊這里觸發(fā)追蹤鼠標(biāo)功能"
        self.update() # 重繪事件,也就是觸發(fā)paintEvent函數(shù)。
    '''重新實(shí)現(xiàn)關(guān)閉事件'''
    def closeEvent(self, event):
        print("Closed")

    '''重新實(shí)現(xiàn)上下文菜單事件,也就是右鍵的菜單'''
    def contextMenuEvent(self, event):
        menu = QMenu(self)
        oneAction = menu.addAction("&One")
        twoAction = menu.addAction("&Two")
        oneAction.triggered.connect(self.one)
        twoAction.triggered.connect(self.two)
        if not self.message:
            menu.addSeparator()
            threeAction = menu.addAction("Three")
            threeAction.triggered.connect(self.three)
        menu.exec_(event.globalPos())

    '''上下文菜單槽函數(shù)'''
    def one(self):
        self.message = "Menu option One"
        self.update()

    def two(self):
        self.message = "Menu option Two"
        self.update()

    def three(self):
        self.message = "Menu option Three"
        self.update()

    '''重新實(shí)現(xiàn)繪制事件'''
    def paintEvent(self, event):
        text = self.text
        i = text.find("\n\n")
        if i >= 0:
            text = text[0:i]
        if self.key: # 若觸發(fā)了鍵盤按鈕,則在文本信息中記錄這個(gè)按鈕信息。
            text += "\n\n你按下了: {0}".format(self.key)
        painter = QPainter(self)
        painter.setRenderHint(QPainter.TextAntialiasing)
        painter.drawText(self.rect(), Qt.AlignCenter, text) # 繪制信息文本的內(nèi)容
        if self.message: # 若消息文本存在則在底部居中繪制消息,5秒鐘后清空消息文本并重繪。
            painter.drawText(self.rect(), Qt.AlignBottom | Qt.AlignHCenter,
                             self.message)
            QTimer.singleShot(5000, self.clearMessage)
            QTimer.singleShot(5000, self.update)

    '''清空消息文本的槽函數(shù)'''
    def clearMessage(self):
        self.message = ""

    '''重新實(shí)現(xiàn)調(diào)整窗口大小事件'''
    def resizeEvent(self, event):
        self.text = "調(diào)整窗口大小為: QSize({0}, {1})".format(
            event.size().width(), event.size().height())
        self.update()

    '''重新實(shí)現(xiàn)鼠標(biāo)釋放事件'''
    def mouseReleaseEvent(self, event):
        # 若鼠標(biāo)釋放為雙擊釋放,則不跟蹤鼠標(biāo)移動(dòng)
        # 若鼠標(biāo)釋放為單擊釋放,則需要改變跟蹤功能的狀態(tài),如果開啟跟蹤功能的話就跟蹤,不開啟跟蹤功能就不跟蹤
        if self.justDoubleClicked:
            self.justDoubleClicked = False
        else:
            self.setMouseTracking(not self.hasMouseTracking()) # 單擊鼠標(biāo)
            if self.hasMouseTracking():
                self.text = "開啟鼠標(biāo)跟蹤功能.\n" + \
                            "請(qǐng)移動(dòng)一下鼠標(biāo)!\n" + \
                            "單擊鼠標(biāo)可以關(guān)閉這個(gè)功能"
            else:
                self.text = "關(guān)閉鼠標(biāo)跟蹤功能.\n" + \
                            "單擊鼠標(biāo)可以開啟這個(gè)功能"
            self.update()

    '''重新實(shí)現(xiàn)鼠標(biāo)移動(dòng)事件'''
    def mouseMoveEvent(self, event):
        if not self.justDoubleClicked:
            globalPos = self.mapToGlobal(event.pos()) # 窗口坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)
            self.text = """鼠標(biāo)位置:
            窗口坐標(biāo)為:QPoint({0}, {1}) 
            屏幕坐標(biāo)為:QPoint({2}, {3}) """.format(event.pos().x(), event.pos().y(), globalPos.x(), globalPos.y())
            self.update()

    '''重新實(shí)現(xiàn)鼠標(biāo)雙擊事件'''
    def mouseDoubleClickEvent(self, event):
        self.justDoubleClicked = True
        self.text = "你雙擊了鼠標(biāo)"
        self.update()

    '''重新實(shí)現(xiàn)鍵盤按下事件'''
    def keyPressEvent(self, event):
        self.key = ""
        if event.key() == Qt.Key_Home:
            self.key = "Home"
        elif event.key() == Qt.Key_End:
            self.key = "End"
        elif event.key() == Qt.Key_PageUp:
            if event.modifiers() & Qt.ControlModifier:
                self.key = "Ctrl+PageUp"
            else:
                self.key = "PageUp"
        elif event.key() == Qt.Key_PageDown:
            if event.modifiers() & Qt.ControlModifier:
                self.key = "Ctrl+PageDown"
            else:
                self.key = "PageDown"
        elif Qt.Key_A <= event.key() <= Qt.Key_Z:
            if event.modifiers() & Qt.ShiftModifier:
                self.key = "Shift+"
            self.key += event.text()
        if self.key:
            self.key = self.key
            self.update()
        else:
            QWidget.keyPressEvent(self, event)

    '''重新實(shí)現(xiàn)其他事件,適用于PyQt沒有提供該事件的處理函數(shù)的情況,Tab鍵由于涉及焦點(diǎn)切換,不會(huì)傳遞給keyPressEvent,因此,需要在這里重新定義。'''
    def event(self, event):
        if (event.type() == QEvent.KeyPress and
                    event.key() == Qt.Key_Tab):
            self.key = "在event()中捕獲Tab鍵"
            self.update()
            return True
        return QWidget.event(self, event)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Widget()
    form.show()
    app.exec_()

以上就是Python鼠標(biāo)事件及坐標(biāo)獲取窗口和屏幕坐標(biāo)的詳細(xì)內(nèi)容,更多關(guān)于鼠標(biāo)事件及坐標(biāo)獲取窗口和屏幕坐標(biāo)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 批量將中文名轉(zhuǎn)換為拼音

    python 批量將中文名轉(zhuǎn)換為拼音

    這篇文章主要介紹了python 批量將中文名轉(zhuǎn)換為拼音,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02
  • python能在瀏覽器能運(yùn)行嗎

    python能在瀏覽器能運(yùn)行嗎

    在本篇文章里小編給大家整理了關(guān)于python能否在瀏覽器能運(yùn)行的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python解析JSON數(shù)據(jù)的示例代碼

    Python解析JSON數(shù)據(jù)的示例代碼

    JSON格式是網(wǎng)站和API使用的通用標(biāo)準(zhǔn)格式,現(xiàn)在主流的一些數(shù)據(jù)庫(如PostgreSQL)都支持JSON格式,在本文中,我們將介紹如何使用Python解析JSON數(shù)據(jù),感興趣的小伙伴跟著小編一起來看看吧
    2024-09-09
  • Django與遺留的數(shù)據(jù)庫整合的方法指南

    Django與遺留的數(shù)據(jù)庫整合的方法指南

    這篇文章主要介紹了Django與遺留的數(shù)據(jù)庫整合的方法指南,Django是最具人氣的Python開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • 詳解Django模版中加載靜態(tài)文件配置方法

    詳解Django模版中加載靜態(tài)文件配置方法

    這篇文章主要介紹了Django模版中加載靜態(tài)文件配置方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 聊聊pytorch測(cè)試的時(shí)候?yàn)楹我由蟤odel.eval()

    聊聊pytorch測(cè)試的時(shí)候?yàn)楹我由蟤odel.eval()

    這篇文章主要介紹了聊聊pytorch測(cè)試的時(shí)候?yàn)楹我由蟤odel.eval()的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python爬蟲入門教程--優(yōu)雅的HTTP庫requests(二)

    python爬蟲入門教程--優(yōu)雅的HTTP庫requests(二)

    requests 實(shí)現(xiàn)了 HTTP 協(xié)議中絕大部分功能,它提供的功能包括 Keep-Alive、連接池、Cookie持久化、內(nèi)容自動(dòng)解壓、HTTP代理、SSL認(rèn)證等很多特性,下面這篇文章主要給大家介紹了python爬蟲入門中關(guān)于優(yōu)雅的HTTP庫requests的相關(guān)資料,需要的朋友可以參考下。
    2017-05-05
  • python下MySQLdb用法實(shí)例分析

    python下MySQLdb用法實(shí)例分析

    這篇文章主要介紹了python下MySQLdb用法,實(shí)例分析了Python中MySQLdb的安裝及使用技巧,包括增刪改查及亂碼處理的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Pycharm集成Gitee的使用方法

    Pycharm集成Gitee的使用方法

    本文主要介紹了Pycharm集成Gitee的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 簡(jiǎn)單學(xué)習(xí)Python多進(jìn)程Multiprocessing

    簡(jiǎn)單學(xué)習(xí)Python多進(jìn)程Multiprocessing

    這篇文章主要和大家一起簡(jiǎn)單的學(xué)習(xí)Python多進(jìn)程Multiprocessing ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論

从化市| 莲花县| 农安县| 丰顺县| 兴山县| 永和县| 雷山县| 安化县| 瓦房店市| 二连浩特市| 南阳市| 昭平县| 青冈县| 长顺县| 海城市| 钟山县| 乐陵市| 南宫市| 肥城市| 北川| 文登市| 永靖县| 濉溪县| 东兰县| 乌兰察布市| 荣昌县| 吉木萨尔县| 富平县| 英超| 葫芦岛市| 衢州市| 宜良县| 嘉义县| 玛曲县| 临夏县| 唐山市| 石柱| 宾川县| 屯门区| 定兴县| 青铜峡市|