开发者

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

目录
  • 安装pyautogui
  • 获取鼠标位置
  • 监听鼠标动作
  • 判断鼠标是否在浏览器内
  • 方法扩展

在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

FieldRadi编程客栈us = 100

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):uWAezlvV
        super().__init__()
        self.setWindowTitle('pyqtgraph作图')
        # 创建 PlotWidget 对象
        self.pw = pg.PlotWidget()
        # 设置图表标题
        self.pw.setTitle("节点分布图",
                         color='008080',
                         size='12ppythont')
        # 设置上下左右的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获取鼠标位置内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜