首页 > 其他分享 >pyautogui 屏幕倍率的坑

pyautogui 屏幕倍率的坑

时间:2023-09-12 13:45:59浏览次数:35  
标签:pyautogui 倍率 鼠标 像素 屏幕 buttonPoint

在我的2倍屏设备上,鼠标移动不准确。

直接上演示代码

import pyautogui

screenSize = pyautogui.size()
print(screenSize)
# 输出:Size(width=1512, height=982)。 这是屏幕尺寸,以dip(设备独立像素device-independent pixel)度量。

buttonPoint = pyautogui.locateCenterOnScreen('test.png')
print(buttonPoint)
# 输出:Point(x=2443, y=424)。可见x比screenSize.width还大,这是以像素进行度量的。
# 该函数的原理其实就是pyautogui对屏幕进行截图,并在截图上找到目标位置,因此是以像素单位作为度量。
# 这就是问题所在

# 如果没有根据屏幕倍率对像素进行转换,直接把像素坐标用到鼠标相关函数,就是错误的。
pyautogui.moveTo(buttonPoint.x, buttonPoint.y)
# 此时,发现鼠标移到了屏幕最边缘。

screenScale = 2 # 屏幕缩放比例
pyautogui.moveTo(buttonPoint.x / screenScale, buttonPoint.y / screenScale)
# 此时,鼠标才能移动到目标位置。

【上述代码仅做演示,更好的处理方法应该封装出一个函数,能根据屏幕倍率对像素位置进行转换。】

标签:pyautogui,倍率,鼠标,像素,屏幕,buttonPoint
From: https://www.cnblogs.com/ZJT7098/p/17695938.html

相关文章

  • pyautogui locateCenterOnScreen和locateOnScreen不生效
    如果传入了正确的图片,却无法在屏幕中找到定位,则可能是因为权限问题,导致pyautogui无法获取到窗口截图。请参照:https://www.cnblogs.com/ZJT7098/p/17695865.html......
  • Mac执行pyautogui.screenshot()只能截取桌面背景
    明明有程序窗口在前台,却只获取到桌面背景。如果无法正确的获取截屏,那么pyautogui.locateCenterOnScreen或pyautogui.locateOnScreen等函数都无法正确执行。原因很简单,就是权限问题。应将屏幕录制权限开放给你的开发工具。这里我赋予Anaconda-Navigator和Terminal屏幕录制权......
  • Mac执行pyautogui.screenshot()时报错
    报错信息---------------------------------------------------------------------------TypeErrorTraceback(mostrecentcalllast)CellIn[3],line1---->1pyautogui.screenshot()File~/anaconda3/lib/python3.11/site-package......
  • Qt/C++音视频开发52-采集本地屏幕桌面的终极设计
    一、前言最开始设计的时候,只考虑了一个屏幕的情况,这种当然是最理想的情况,实际上双屏或者多屏的用户也不在少数,比如我这两个屏幕,屏幕1是1080P,屏幕2是2K分辨率,打印两个屏幕的区域是QRect(0,01920x1030),QRect(1920,-2082560x1390),可以看到有个负数值(可以在操作系统中的排列显示......
  • Python - 桌面自动化(PyAutoGUI)
    一、安装windows:pipinstallpyautogui-ihttps://pypi.tuna.tsinghua.edu.cn/simplemac:pipinstallpyobjc-corepipinstallpyobjcpipinstallpyautoguilinux:sudoapt-getinstallscrotpython3-tkpython3-devpipinstallpython3-xlibpipinstallpyautog......
  • 大屏屏幕自适应大小的JS写法
    本项目用的是vue开发,首先需要定义一下根节点app节点的大小,这里用1920的默认宽度定义<style>#app{width:1920px;margin:0auto;transform:scale(1);transform-origin:00;}</style>js部分通过缩放的写法去在......
  • 用OLED屏幕播放视频(1): 项目介绍
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这篇文章主要对项目的实现做整体的介绍,包括硬件的需求,最终实现的视频播放效果,以及软件的实现思路.1).硬件需求beagleboneblack......
  • 用OLED屏幕播放视频(2): 为OLED屏幕开发I2C驱动
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这是此系列文章的第2篇,主要总结和记录一个I2C从设备的驱动,在linux内核中如何实现,如何给用户态的程序暴露合适的接口,让用户态有机......
  • C#获取屏幕大小的“简单整理”。
    Console.WriteLine("主显示器完整尺寸:");Console.WriteLine("宽:"+Screen.PrimaryScreen.Bounds.Width);Console.WriteLine("高:"+Screen.PrimaryScreen.Bounds.Height);Console.WriteLine("主显示器工作尺寸(排除任务栏、工具栏):");Console.WriteLine(......
  • 用OLED屏幕播放视频(3): 使用cuda编程加速视频处理
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这是此系列文章的第3篇,主要总结和记录了如何使用cuda编程释放GPU的算力.在此之前尝试过使用python调用opencv直接处理视频数据,但使用......