前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python解放双手

Python解放双手

作者头像
ZackSock
发布2021-02-07 14:53:01
1.1K0
发布2021-02-07 14:53:01
举报
文章被收录于专栏:ZackSockZackSock

Python解放双手

一、前言

Python 中提供了很多模块可以用于控制输入设备,像是传统的 win32gui,或者是用于游戏开发的 Pygame。其中 win32gui 更贴切的说是基于 Windows 的编程,它的操作丰富多样,可以获取每个窗口,也可以获取窗口的句柄等。而 Pygame 的长处在于 2D 游戏的开发。而今天要讲的 pynput 则不同,它操作非常简单,而且里面包含的内容也更贴切输入设备,其中非常重要的两个模块就是 mouse 和 keyboard,分别提供了控制鼠标和键盘的类,下面我们就来看看一些具体操作。

二、控制鼠标

我们先来安装这个模块,安装起来非常简单,我们直接使用 pip 安装:

代码语言:javascript
复制
pip install pynput

接下来就可以使用该模块了。我们导入 mouse 模块:

代码语言:javascript
复制
from pynput import mouse

在 mouse 模块中提供了一个 Controller 类,该类就是我们的鼠标控制器,我们创建该类的对象就可以鼠标键盘:

代码语言:javascript
复制
from pynput import mouse
# 创建一个鼠标
m = mouse.Controller()

获取了鼠标对象后,我们就可以获取一些属性,或者进行一些操作。

2.1、获取鼠标位置

我们可以获取鼠标的位置信息,也就是当前鼠标所在的坐标:

代码语言:javascript
复制
from pynput import mouse
# 创建一个鼠标
m = mouse.Controller()
# 输出鼠标的位置
print(m.position)

输出结果为一个元组。

2.2、定位鼠标

我们也可以直接修改鼠标的位置:

代码语言:javascript
复制
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 将鼠标移动到左上角
m.position = (0, 0)

这种方式是直接定位鼠标,我们还可以根据当前位置移动鼠标。

2.3、移动鼠标

移动鼠标调用的是 move 函数:

代码语言:javascript
复制
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 将鼠标移动到左上角
m.move(50, -50)

第一个参数为 x 移动的值,第二个参数为 y 移动的值。

另外一般鼠标上都会有三个控制按钮,左键、右键和滚轮,下面我们看看如何操作它们。

2.4、点击鼠标

我们点击按钮时都会先按下按钮,然后再松开按钮:

代码语言:javascript
复制
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 按下鼠标右键
m.press(mouse.Button.right)
# 松下鼠标右键
m.release(mouse.Button.right)

在 mouse 提供了 Button 类,里面内置了左键和右键的常量,我们直接使用就可以了。

除了上面的方法,我们还可以直接调用 click 方法,点击鼠标:

代码语言:javascript
复制
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 点击鼠标左键
m.click(mouse.Button.left)

2.5、双击鼠标

双击也是个非常常用的操作,我们同样可以使用 click 方法:

代码语言:javascript
复制
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 点击鼠标左键
m.click(mouse.Button.left, 2)

click 方法接收两个参数,第一个为按钮,第二个为非必选参数,含义为点击的次数。

1.6、滚动滚轮

对于像 Excel 表这种大型的表格,我们经常需要上下左右滚动,而 mouse 模块中就提供了这样的方法:

代码语言:javascript
复制
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 滚动鼠标,第一个参数为 y 滚动的数值,第二个参数为 x 滚动的数值
m.scroll(0, -10)

2.7、监听鼠标的事件

鼠标中的事件有三个,点击事件、移动事件、滚动事件,我们看看如何监听鼠标的事件:

代码语言:javascript
复制
from pynput import mouse

def on_move(x, y):
    """鼠标移动的监听方法 x,y 为移动后的位置"""
    print('鼠标移动到了{0}'.format((x, y)))

def on_click(x, y, button, pressed):
    """鼠标点击的监听方法 x,y 为坐标,button 为按钮,pressed 为是否是按下"""
    if pressed:
        print('点击了({0}, {1})'.format(x, y))
    else:
        print('鼠标在({0}, {1})松开'.format(x, y))

def on_scroll(x, y, dx, dy):
    """鼠标滚动的监听方法 x,y 为作为,dx,dy 为滚动幅度"""
    print('鼠标在{0}, 向右滚动{1}, 向下滚动{2}'.format((x, y), dx, dy))

# 创建一个监听者
with mouse.Listener(
        # 关联监听方法(不加括号)
        on_move=on_move,
        on_click=on_click,
        on_scroll=on_scroll) as listener:
       # 阻塞线程
    listener.join()

我们的 mouse 模块提供了 Listener 类,该类的对象就是我们的监听者。当我们触发某个事件时,监听者就会执行关联好的方法。

三、控制键盘

在 pynput 中提供了 keyboard 模块,该模块中提供了与 mouse 模块类似的一些类,这些类可以用于控制键盘。其中 keyboard 中也有一个 Controller 类,该类对象就是我们的键盘控制器。

代码语言:javascript
复制
from pynput import keyboard
# 创建一个键盘
kb = keyboard.Controller()

我们可以通过上述代码创建一个键盘控制器。有了控制器我们就可以操作这个键盘了。

3.1、按下并松开某个键

这里同样是调用 press 和 release 方法:

代码语言:javascript
复制
from pynput import keyboard
# 创建一个键盘
kb = keyboard.Controller()
# 按下 a 键
kb.press('a')
# 松开 a 键
kb.release('a')

上面我们是通过传入字符的方式按按钮,这里只能点击单个字符的按钮。在 keyboard 模块中 Key 类中,提供了大量预设的按钮,我们可以直接使用:

代码语言:javascript
复制
from pynput import keyboard
# 创建键盘
kb = keyboard.Controller()
# 按下大小写锁定
kb.press(keyboard.Key.caps_lock)
# 松开大小写锁定
kb.release(keyboard.Key.caps_lock)

上面就是我们 press 和 release 的用法了。

3.2、按下两个按钮

我们可以通过多次调用 press 的方法按下几个按钮,当然我们还有一种简便写法:

代码语言:javascript
复制
from pynput import keyboard
# 创建一个键盘
kb = keyboard.Controller()
# 按下 shift+a
with kb.pressed(keyboard.Key.shift):
    kb.press('a')
    kb.release('a')

上面的效果就是我们打出了一个 A。

3.3、打字

理论上来说,press 和 release 方法可以完成键盘大多数操作,打字也不例外,但是出于效率的考虑我们可以使用 type 方法:

代码语言:javascript
复制
from pynput import keyboard
# 创建键盘
kb = keyboard.Controller()
# 打字
kb.type('Hello world')

在我们打中文字的时候,输入法并不会影响我们的操作。当时当我们打英文时,如果输入法是中文模式,则会是我们平时打拼音的效果。

3.4、事件监听

键盘的监听同样是由 keyboard 中 Listener 类实现的:

代码语言:javascript
复制
from pynput import keyboard
# 按下按钮
def on_press(key):
    print('按下了{0}'.format(key))
# 松开按钮
def on_release(key):
    print('松开了{0}'.format(key))

# 监听
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

监听步骤同鼠标一样,这里就不再赘述了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新建文件夹X 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python解放双手
  • 一、前言
  • 二、控制鼠标
    • 2.1、获取鼠标位置
      • 2.2、定位鼠标
        • 2.3、移动鼠标
          • 2.4、点击鼠标
            • 2.5、双击鼠标
              • 1.6、滚动滚轮
                • 2.7、监听鼠标的事件
                • 三、控制键盘
                  • 3.1、按下并松开某个键
                    • 3.2、按下两个按钮
                      • 3.3、打字
                        • 3.4、事件监听
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档