【PyAutoGUI操作指南】02 鼠标控制功能+获取当前坐标+鼠标事件+鼠标滚动查询

简介: 左上角的像素位于坐标0,0。如果屏幕分辨率为1920 x 1080,则右下角的像素将为1919,1079(因为坐标从0开始,而不是1)。

3.1 屏幕和鼠标位置


X坐标从左侧的0开始,向右增加,Y坐标从顶部的0开始,向下递增。


314d72c0a6a240a4a3fdfc313c4abd02.png


左上角的像素位于坐标0,0。如果屏幕分辨率为1920 x 1080,则右下角的像素将为1919,1079(因为坐标从0开始,而不是1)。


3.1.1 输出屏幕分辨率大小与鼠标光标位置


import pyautogui
# size():以两个整数的元组形式返回屏幕分辨率大小。
Screen_size = pyautogui.size()
print("当前屏幕大小为:",Screen_size)
# position():返回鼠标光标的当前X和Y坐标
print('Press Ctrl-C to quit.')
try:
    while True:
        # 获取当前鼠标光标位置
        x, y = pyautogui.position()
        # print(x)
        # print(y)
        # rjust()返回长宽右对齐的字符串。
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
    print('\n')


e0be3d224ded4ae5996d6e7629956149.png


3.1.2 判断位置是否在屏幕内


import pyautogui
FLag = pyautogui.onScreen(0, 0) # True
FLag = pyautogui.onScreen(0, -1) # False
FLag = pyautogui.onScreen(0, 99999999) # False
FLag = pyautogui.onScreen(1920, 1080) # False
FLag = pyautogui.onScreen(1919, 1079) # True


3.2 鼠标均速移动(相对位置与绝对位置)


3.2.1 moveTo()将鼠标光标移动到X和Y整数坐标(绝对位移)


import pyautogui
# moveTo()函数将鼠标光标移动到X和Y整数坐标,为None时为当前坐标
# 当前坐标为(600,300)
pyautogui.moveTo(100, 200) # 将光标瞬间移动到(100, 200)位置
pyautogui.moveTo(None, 500) # 将光标瞬间移动到(600, 200)位置
pyautogui.moveTo(600, None) # 将光标瞬间移动到(100, 300)位置
# 如果持续时间小于pyautogui.MINIMUM_duration,则移动将是即时的。
# 默认情况下,pyautogui.MINIMUM_DURATION为0.1
pyautogui.moveTo(100, 200, 2) # 用时2秒将光标移动到(100, 200)位置


3.2.2 move()将鼠标光标移动到相对于其当前位置的几个像素(相对位移)


import pyautogui
# 相对位移
# move()将鼠标光标移动到相对于其当前位置的几个像素上
pyautogui.moveTo(100, 200)
pyautogui.move(0, 50) # 移动到(100, 250)
pyautogui.move(-30, 0) # 移动到(70, 250)
pyautogui.move(-30, None) # 移动到(40, 250)


3.3 鼠标拖动


import pyautogui
# 按住鼠标左键的同时,将光标拖到(100, 200)位置
pyautogui.dragTo(100, 200, button='left')
# 按住鼠标左键的同时,用2秒将光标拖到(300, 400)位置
pyautogui.dragTo(300, 400, 2, button='left')
# 按住鼠标右键的同时,用2秒将光标拖到相对于当前位置的(30, 0)位置
pyautogui.drag(30, 0, 2, button='right')


3.4 鼠标随机速度移动


import pyautogui
# 在一段时间内移动鼠标时,鼠标会以恒定速度直线直接移动到目标位置。这被称为线性二元函数或线性宽松函数。
# PyAutoGUI的tweening函数可以随机调节速度。
# https://pypi.python.org/pypi/ PyTweening https://github.com/asweigart/pytweening
# 如果要创建自己的tweening函数,请定义一个函数,该函数接受一个介于0.0(表示鼠标移动的开始)和1.0(表示鼠标运动的结束)之间的浮点参数,并返回介于0.0和1.0之间的浮点值。
# 使鼠标光标开始缓慢移动,然后加速向目标移动。
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad) # 先慢后快,用时2秒
# easeOutQuad则相反:鼠标光标开始快速移动,但在接近目标时会减慢速度。
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad) # 先快后慢,用时2秒,
pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)  # 开始结束快,中间慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce) # bounce at the end
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic) # rubber band at the end


3.5 鼠标点击


import pyautogui
# click()函数模拟在鼠标当前位置单击鼠标左键。“点击”是指按下按钮,然后向上释放。
pyautogui.click()
# 移动到(100,200)位置,并左键1次
pyautogui.click(x=100, y=200)
# 鼠标右键1次
pyautogui.click(button='right')
# 鼠标左键2次
pyautogui.click(clicks=2)
# 鼠标左键2次,中间有0.15秒的停顿
pyautogui.click(clicks=2, interval=0.25)
# 鼠标右键三次,每次中间有0.15秒的停顿
pyautogui.click(button='right', clicks=3, interval=0.25)
# 鼠标左键2次,可增参数 x y
pyautogui.doubleClick()
# 鼠标左键3次,可增参数 x y
pyautogui.tripleClick()
# 鼠标右键1次,可增参数 x y
pyautogui.rightClick()


3.6 鼠标按下与抬起


import pyautogui
# 鼠标单击和拖动包括按下鼠标按钮和释放鼠标按钮
# 鼠标左键按下
pyautogui.mouseDown()
# 鼠标左键抬起
pyautogui.mouseUp()
# 鼠标右键按下
pyautogui.mouseDown(button='right')
# 鼠标右键在(100,200)位置抬起
pyautogui.mouseUp(button='right', x=100, y=200)


3.7 鼠标滚动scroll()


# 可以通过调用scroll()函数并传递整数次clicks”来模拟鼠标滚轮。“click”中的滚动量因平台而异。
# 可以为x和y关键字参数传递整数,以便在执行滚动之前移动鼠标光标。
import pyautogui
# scroll():整数次clicks来模拟鼠标滚轮。“click”中的滚动量因平台而异。
# 向上滚动10次“点击”
pyautogui.scroll(10)
# 向下滚动10次“点击”
pyautogui.scroll(-10)
# 先移动到(100,100)位置,再向上滚动10次“点击”
pyautogui.scroll(10, x=100, y=100)


4 键盘控制功能


4.1 write()函数


import pyautogui
# 使用write()只能按单字符键,因此不能按Shift 或 F1键
# 立即输入字符
pyautogui.write('Hello world!')
# 依次输入字符,每个字符之间间隔0.25秒
pyautogui.write('Hello world!', interval=0.25)


4.2 press()、keyDown()和keyUp()函数


import pyautogui
# press()函数实际上只是keyDown()和keyUp()函数的包装器,它们模拟按下一个键,然后释放它。
# 在每次按下之间添加延迟间隔,设置interval即可,传入int或float
# 按下回车键
pyautogui.press('enter')
# 按下F1键
pyautogui.press('f1')
# 按下←键
pyautogui.press('left')
# 要在按住Shift键的同时按左箭头键三次
pyautogui.keyUp('shift')
pyautogui.press(['left', 'left', 'left']) # 多个按键用字符串列表
pyautogui.keyDown('shift')
# 设置presses=3,实现按←键3次
pyautogui.press('left', presses=3)


4.3 hotkey() :实现热键组合


import pyautogui
# 为了方便按下热键或键盘快捷键,可将热键()传递给几个键串,这些键串将按顺序按下,然后按相反顺序释放。
# 要在每次按下之间添加延迟间隔,可为interval参数传递int或float
pyautogui.hotkey('ctrl', 'shift', 'esc')
# 等价于
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('esc')
pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')


4.4 KEYBOARD_KEYS


KEY_NAMES = [
    "\t",
    "\n",
    "\r",
    " ",
    "!",
    '"',
    "#",
    "$",
    "%",
    "&",
    "'",
    "(",
    ")",
    "*",
    "+",
    ",",
    "-",
    ".",
    "/",
    "0",
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    ":",
    ";",
    "<",
    "=",
    ">",
    "?",
    "@",
    "[",
    "\\",
    "]",
    "^",
    "_",
    "`",
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h",
    "i",
    "j",
    "k",
    "l",
    "m",
    "n",
    "o",
    "p",
    "q",
    "r",
    "s",
    "t",
    "u",
    "v",
    "w",
    "x",
    "y",
    "z",
    "{",
    "|",
    "}",
    "~",
    "accept",
    "add",
    "alt",
    "altleft",
    "altright",
    "apps",
    "backspace",
    "browserback",
    "browserfavorites",
    "browserforward",
    "browserhome",
    "browserrefresh",
    "browsersearch",
    "browserstop",
    "capslock",
    "clear",
    "convert",
    "ctrl",
    "ctrlleft",
    "ctrlright",
    "decimal",
    "del",
    "delete",
    "divide",
    "down",
    "end",
    "enter",
    "esc",
    "escape",
    "execute",
    "f1",
    "f10",
    "f11",
    "f12",
    "f13",
    "f14",
    "f15",
    "f16",
    "f17",
    "f18",
    "f19",
    "f2",
    "f20",
    "f21",
    "f22",
    "f23",
    "f24",
    "f3",
    "f4",
    "f5",
    "f6",
    "f7",
    "f8",
    "f9",
    "final",
    "fn",
    "hanguel",
    "hangul",
    "hanja",
    "help",
    "home",
    "insert",
    "junja",
    "kana",
    "kanji",
    "launchapp1",
    "launchapp2",
    "launchmail",
    "launchmediaselect",
    "left",
    "modechange",
    "multiply",
    "nexttrack",
    "nonconvert",
    "num0",
    "num1",
    "num2",
    "num3",
    "num4",
    "num5",
    "num6",
    "num7",
    "num8",
    "num9",
    "numlock",
    "pagedown",
    "pageup",
    "pause",
    "pgdn",
    "pgup",
    "playpause",
    "prevtrack",
    "print",
    "printscreen",
    "prntscrn",
    "prtsc",
    "prtscr",
    "return",
    "right",
    "scrolllock",
    "select",
    "separator",
    "shift",
    "shiftleft",
    "shiftright",
    "sleep",
    "space",
    "stop",
    "subtract",
    "tab",
    "up",
    "volumedown",
    "volumemute",
    "volumeup",
    "win",
    "winleft",
    "winright",
    "yen",
    "command",
    "option",
    "optionleft",
    "optionright",
]


目录
相关文章
|
5月前
鼠标悬浮显示文字的简单方法
鼠标悬浮显示文字的简单方法
QT 事件过滤器实现鼠标悬浮时两个按钮背景互换
QT 事件过滤器实现鼠标悬浮时两个按钮背景互换
QT 事件过滤器实现鼠标悬浮时两个按钮背景互换
C#创建无边框可拖动窗口
C#创建无边框可拖动窗口
171 0
|
前端开发 JavaScript 计算机视觉
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
936 0
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
|
Java
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
416 0
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
|
API
用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击)
网上搜到的答案普遍是VBS无法实现,或者是要用第三方COM(ActiveX?)组件。我对第三方组件是很反感的,使用第三方组件毫无可移植性可言,因为别人的系统中不一定注册了这个组件。我的建议是,尽量不要在VBS代码中调用第三方组件,除非你的程序只是写来自己用。
2188 0
|
C#
【WPF】点击滑动条(Slider),移动滑块(Tick)到鼠标点击的位置
原文:【WPF】点击滑动条(Slider),移动滑块(Tick)到鼠标点击的位置 问题:点击Slider控件时,滑块会自动跳到滑动条的最边缘位置,无法跳到鼠标点击的位置上。 办法:给Slider控件设置属性IsMoveToPointEnabled="True"即可!   https://stackoverflow.
1990 0