如何利用Python获取鼠标在屏幕上的具体位置以及动作

 更新时间:2025年03月14日 10:40:52   作者:计算机辅助工程  
这篇文章主要为大家详细介绍了如何使用python实现获取鼠标在屏幕上的具体位置以及动作,从而判断鼠标是否在浏览器内,感兴趣的小伙伴可以了解下

在Python中,要获取鼠标在屏幕上的具体位置以及动作,并判断鼠标是否在浏览器内,我们可以使用pyautogui库。pyautogui是一个非常强大的库,可以用来模拟鼠标操作、屏幕截图、获取屏幕尺寸和分辨率等。

安装pyautogui

首先,确保你已经安装了pyautogui。如果还没有安装,可以通过pip安装:

pip install pyautogui

获取鼠标位置

你可以使用pyautogui.position()来获取鼠标的当前位置。这个函数返回一个包含两个元素的元组,分别表示鼠标在屏幕上的X和Y坐标。

import pyautogui
 
# 获取鼠标当前位置
x, y = pyautogui.position()
print(f"Mouse position: X={x}, Y={y}")

监听鼠标动作

pyautogui还允许你监听鼠标事件,例如鼠标点击、移动等。你可以使用pyautogui.listen()方法来实现。但是,请注意,这种方法会阻塞你的脚本,直到你手动停止监听。如果你想在后台持续监听,可以考虑使用线程或者异步编程。

import pyautogui
 
def on_move(x, y):
    print(f"Mouse moved to: X={x}, Y={y}")
 
def on_click(x, y, button):
    print(f"Mouse clicked at: X={x}, Y={y}, Button={button}")
# 监听鼠标移动和点击事件
pyautogui.listen(onMove=on_move, onClick=on_click)

判断鼠标是否在浏览器内

要判断鼠标是否在浏览器内,你需要知道浏览器窗口的位置和大小。你可以使用pyautogui.getWindowsWithTitle()来获取特定标题的窗口信息,然后判断鼠标位置是否在这个窗口的区域内。

import pyautogui
 
# 假设浏览器窗口的标题是 "Google Chrome"
windows = pyautogui.getWindowsWithTitle('Google Chrome')
if windows:
    window = windows[0]  # 获取第一个匹配的窗口,如果有多个则选择第一个
    x, y = pyautogui.position()  # 获取当前鼠标位置
    # 获取窗口的位置和大小
    window_x, window_y, width, height = window.left, window.top, window.width, window.height
    # 判断鼠标是否在浏览器窗口内
    if window_x <= x <= window_x + width and window_y <= y <= window_y + height:
        print("Mouse is inside the browser.")
    else:
        print("Mouse is outside the browser.")
else:
    print("Browser window not found.")

注意:

确保你的脚本有权限访问这些信息,尤其是在某些操作系统上可能需要额外的权限。

对于跨平台的兼容性,特别是在Windows和MacOS上,确保你的代码在不同平台上都能正确运行。例如,窗口的属性和方法在不同平台之间可能有所不同。

对于更复杂的窗口管理或自动化任务,考虑使用像pywinauto(针对Windows)或pyobjc(针对MacOS)这样的库来提供更精确的窗口控制和事件监听。但对于简单的任务,pyautogui已经足够强大且易于使用。

方法扩展

下面小编为大家整理了一些其他Python获取鼠标位置的相关方法,希望对大家有所帮助

Python获取鼠标形状和位置

import win32gui

cur = win32gui.GetCursorInfo()
print(cur)

# 输出的是一个元组,类似于(1, 65561, (606, 699))

# 其中:
# 第二个元素是鼠标的形状代码
# 第三个元素是鼠标的位置

# 鼠标形状代码:
# 65539:正常的鼠标形状
# 65541:文本输入的形状
# 65555:调整窗口大小的形状
# 65567:超级链接的手指头
# 65543:圆圈
# 65561:正常的鼠标形状+圆圈
# 如果想写一个等待鼠标转圈结束的代码,应该是这个样子:
import win32gui
import time

while win32gui.GetCursorInfo()[1] == 65543:
    time.sleep(1)
print('转圈结束')

用python获取屏幕上鼠标的坐标

import pyautogui as pg
import time
def mouse_coordinate():
    print('Press Ctrl-C to quit.')
    try:
        while True:
            # 获取鼠标下x, y坐标
            x, y = pg.position()
            # 调整x, y输出格式
            positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
            print(positionStr, end='')
            time.sleep(0.2)
            print('\b' * len(positionStr), end='', flush=True)
    except KeyboardInterrupt:
        print('\nDone.')
if __name__ == '__main__':
    mouse_coordinate()

python selenium获取鼠标位置

# 捕捉鼠标移动事件
self.scatter.scene().sigMouseMoved.connect(self.mouseover)
# 捕捉到单击事件后,需要做的动作,在mouseover函数里完成,主要是提取点的坐标
from PySide2 import QtGui, QtWidgets, QtCore
# from pyqtgraph.Qt import  QtCore
import pyqtgraph as pg
import sys
from random import randint
import numpy as np

FieldRadius = 100

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('pyqtgraph作图')
        # 创建 PlotWidget 对象
        self.pw = pg.PlotWidget()
        # 设置图表标题
        self.pw.setTitle("节点分布图",
                         color='008080',
                         size='12pt')
        # 设置上下左右的label
        self.pw.setLabel("left","纵坐标")
        self.pw.setLabel("bottom","横坐标")

        self.pw.setXRange(min=0,  # 最小值
                          max=FieldRadius)  # 最大值
        # 设置Y轴 刻度 范围
        self.pw.setYRange(min=0,  # 最小值
                          max=FieldRadius)  # 最大值
        # 显示表格线
        self.pw.showGrid(x=True, y=True)
        # 背景色改为白色
        self.pw.setBackground('w')
        # 居中显示 PlotWidget
        self.setCentralWidget(self.pw)

        # 实时显示应该获取 PlotDataItem对象, 调用其setData方法,
        # 这样只重新plot该曲线,性能更高
        self.scatter = self.pw.plot(pen=None, symbol='o')

        self.i = 0
        self.x = [] # x轴的值
        self.new_point_x = 0
        self.y = [] # y轴的值
        self.new_point_y = 0

        self.setMouseTracking(False)
        self.scatter.scene().sigMouseMoved.connect(self.mouseover)
        self.scatter.scene().sigMouseClicked.connect(self.mouse_clicked)

        # 启动定时器,每隔1秒通知刷新一次数据
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.updateData)
        self.timer.start(100)

    def updateData(self):
        self.scatter.setData(self.x, self.y)

    # 鼠标移动事件,用于获取精确坐标(好像鼠标单击的坐标不准确)
    def mouseover(self,pos):
        # 参数pos 是像素坐标,需要 转化为  刻度坐标
        act_pos = self.scatter.mapFromScene(pos)
        if type(act_pos) != QtCore.QPointF:
            return
        # print("over_1:",act_pos.x(), act_pos.y())
        self.new_point_x = act_pos.x()
        self.new_point_y = act_pos.y()

    # 鼠标单击事件,用于鼠标单击后事件的处理,包括:
    # 1)添加新坐标
    def mouse_clicked(self,event):

        self.x.append(self.new_point_x)
        self.y.append(self.new_point_y)
        # print("my position is:",self.xx,self.yy)

if __name__ == '__main__':
    app = QtWidgets.QApplication()
    main = MainWindow()
    main.show()
    app.exec_()

到此这篇关于如何利用Python获取鼠标在屏幕上的具体位置以及动作的文章就介绍到这了,更多相关Python获取鼠标位置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Python使用turtle库画任意图的问题

    关于Python使用turtle库画任意图的问题

    这篇文章主要介绍了Python turtle库画任意图,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Python实现批量将PPT转换成长图

    Python实现批量将PPT转换成长图

    这篇文章主要为大家详细介绍了如何利用Python实现批量将PPT转换成长图,并且图片名称与PPT文件名称相同,保存位置相同,感兴趣的小伙伴可以了解下
    2023-08-08
  • Python实现修改文件内容的方法分析

    Python实现修改文件内容的方法分析

    这篇文章主要介绍了Python实现修改文件内容的方法,结合实例形式分析了Python文件读写、字符串替换及shell方法调用等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • python 怎样将dataframe中的字符串日期转化为日期的方法

    python 怎样将dataframe中的字符串日期转化为日期的方法

    这篇文章主要介绍了python 怎样将dataframe中的字符串日期转化为日期的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python操作CouchDB数据库简单示例

    Python操作CouchDB数据库简单示例

    这篇文章主要介绍了Python操作CouchDB数据库简单示例,本文讲解了连接服务器、创建数据库、创建文档并插入到数据库等操作实例,需要的朋友可以参考下
    2015-03-03
  • Python+wxauto实现微信自动化操作

    Python+wxauto实现微信自动化操作

    在众多自动化工具中,Python的wxauto库以其强大的功能和简单易用的特点,为我们打开了微信自动化操作的大门,下面我们就来看看它的具体操作吧
    2025-02-02
  • PyTorch环境配置及安装过程

    PyTorch环境配置及安装过程

    这篇文章主要介绍了PyTorch环境配置及安装,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Python基础之类的定义和使用详解

    Python基础之类的定义和使用详解

    在Python中,类表示具有相同属性和方法的对象的集合。在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属性和方法了。本文就来和大家一起聊聊Python中类的定义和使用,需要的可以参考一下
    2022-08-08
  • 在OpenCV里实现条码区域识别的方法示例

    在OpenCV里实现条码区域识别的方法示例

    这篇文章主要介绍了在OpenCV里实现条码区域识别的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 使用Python和XML实现文件复制工具的完整代码

    使用Python和XML实现文件复制工具的完整代码

    在本篇博客中,我们将学习如何使用 wxPython 构建一个简单的文件复制工具,并将文件路径和目标目录的配置信息保存到 XML 文件中,通过这种方式,我们可以在下次运行程序时轻松加载之前保存的配置,需要的朋友可以参考下
    2024-08-08

最新评论