python37安装pyuserinput_Python要玩你的键鼠——PyUserInput基础教程

本文介绍了如何使用Python库PyUserInput实现跨平台的键盘鼠标自动化,替代按键精灵。PyUserInput基于Pepijn de Vos的PyMouse包,支持在Windows、Mac和Linux系统上监听和控制键盘鼠标。文章详细讲解了PyUserInput的安装、基本使用,包括创建鼠标键盘对象、模拟点击、输入字符串等,并展示了如何通过监听鼠标键盘事件实现交互式功能,如斐波那契数列的点击输出。
摘要由CSDN通过智能技术生成

作为上班族每天要用键盘鼠标进行一些机械的输入和点击,会消耗掉不少的时间精力。

游戏族每天还要刷同样的副本好几十次,真的也十分枯燥乏味。

那么有没有什么办法可以让键盘鼠标自己动起来,解放我们聪明的大脑呢?

有,用脚本。

虽然对于键盘鼠标脚本而言,市面上已经有非常强大的软件-按键精灵。它基本可以满足任何你对键盘鼠标操作的想法,对于简单的脚本,只需要使用录制功能就可以让脚本帮你重复机械性的操作。

而对于更高级的按键输入需求,按键精灵基于VBscript研发了Q语言,去掉了VBscript的一些功能,用于开发其按键脚本。所以懂得使用VBscript的朋友也可以直接在里面编辑脚本。

不过虽然按键精灵功能十分强大且易用,但是VBscript的受众面相对较小(也有可能是因为我不懂才这么觉得),Q语言学习的复用性又不强。另外按键精灵官方的教程并不十分齐全,有些高级教程竟然需要会员才可以解锁查看。这十分不符合知识共享精神。

那么,既然我们会点Python,那当然是要用Python来搞点事情。

不过,这个事情早就有人搞过了。Paul Barton等人基于Pepijn de Vos的PyMouse包整合优化形成了PyUserInput包,用于在各大操作系统中监视键盘鼠标事件。源代码地址如下:

PyUserInput是一个面向python用于跨平台控制鼠标和键盘的模块,使用简单。在Windows、Mac和X11(大多数Linux)系统上,鼠标控制应该都能正确运行。鼠标的滚动也是可以实现的,不过鼠标滚动本身在各操作系统和各应用程序之间就存在差异,用户在使用之时需要注意。键盘控制在X11(Linux)和Windows系统上都没有问题,而Mac系统上的键盘输入还待优化。

那么,让我们用PyUserInput这个小工具包,解放我们的双手。

LET'S GOOOOOOOOOOO !

安装

依赖包

根据你使用的操作系统,需要为PyUserInput安装依赖包:Linux:Xlib (python-xlib)

Mac:Quartz, AppKit

Windows:pywin32, pyHook

如果未成功安装上述依赖包,那么在安装PyUserInput时就会报错。

Windows 依赖包

这里我们着重介绍一下,Window系统下的依赖包。Windows上的PyUserInput依赖于pywin32。pywin32是用于Windows系统的Python拓展包,它包含了几乎所有的Windows API,可以很方便地从Python直接调用,还可以创建并使用COM对象。你可以访问下面的网址进行下载安装:

这里需要自行选择与已有的Python版本相对应的文件进行下载。

使用pip

PyUserInput在PyPI上(Python Package Index,Python库索引)注册并更新,所以用pip安装会很方便,只需要在终端入以下代码:

pip install PyUserInput

使用源代码

你可以从下面github里下载zip文件,也可以从PyPI里下载包含源码的tar.gz文件。

将文件解压缩到目录后,打开终端,指向刚刚解压的包含setup.py的目录。然后输入以下命令:

python setup.py install

如果是Linux系统中,可能存在权限问题,那么就需要在命令前加上sudo。经过亲身体验,由于网络等问题,使用pip安装可能会失败,这里推荐使用源代码安装,并且手动安装依赖包。

新手上路

在成功安装了PyUserInput之后,你的Python路径中应该会包含pymouse和pykeyboard两个模块了。想让Python帮你使用鼠标键盘,就要先创建鼠标和键盘对象:

from pymouse import PyMouse

from pykeyboard import PyKeyboard

m = PyMouse()

k = PyKeyboard()

上面的PyMouse() 类和PyKeyboard()类,就是鼠标和键盘的对象。之后所有的操作,基本都包含在这两个类的方法中。接下来让我们尝试点击一下屏幕中央,并用键盘输入:"Hello, World!"

x_dim, y_dim = m.screen_size()

m.click(x_dim/2, y_dim/2, 1, 1)

k.type_string('Hello, World!')

鼠标对象拥有screen_size()方法,用于返回当前使用屏幕的尺寸。鼠标和键盘对象的click()方法和type_string()方法,顾名思义,就是使用鼠标点击,用键盘输入。click()方法需要传递4个参数,前两个参数分别是希望鼠标点击的X坐标和Y坐标;第三个参数为需要点击的鼠标按键,1为左键,2为右键,3为中键;第四个参数为点击次数。

此外PyKeyboard还提供了一系列输入按键的方式:

# pressing a key

k.press_key('H')

# which you then follow with a release of the key

k.release_key('H')

# or you can 'tap' a key which does both

k.tap_key('e')

# note that that tap_key does support a way of repeating keystrokes with a interval time between each

k.tap_key('l',n=2,interval=5)

# and you can send a string if needed too

k.type_string('o World!')

上面显示的方法其实十分容易理解,press_key()和release_key()即为按下,松开按键,tap_key()为点击按键,这个方法有三个参数可供传递,第一个参数为需要点击的键位,可以用字符的形式输入;第二个参数为点击的次数,默认为1;第三个参数为点击间隔的时间,单位为秒,默认为0。但是,键盘上还有一些特殊的按键(比如shift,ctrl,enter等),无法用字符的形式输入怎么办?不用担心,PyKeyboard也提供了一系列特殊按键的输入方式:

#Create an Alt+Tab combo

k.press_key(k.alt_key)

k.tap_key(k.tab_key)

k.release_key(k.alt_key)

k.tap_key(k.function_keys[5]) # Tap F5

k.tap_key(k.numpad_keys['Home']) # Tap 'Home' on the numpad

k.tap_key(k.numpad_keys[5], n=3) # Tap 5 on the numpad, thrice

上面的代码就展示了,对alt键,tab键,F5键,Home键,小键盘的操作方法。PyKeyboard把这些特殊的按键定义成了类属性了,在调用时输入属性即可。然而这种表示方法可能有些难记,并且键盘上的特殊按键很多,一一展示显得过于冗长。大家可以打开从GitHub中下载的源码,打开pykeyboard文件夹,找到当前操作系统适用的.py文件,就可以看到里面的special_key_assignment,这里定义了所有特殊按键的属性,大家可以根据这个表找到自己想要输入的键位。

如果大家有兴趣打开所有的.py文件看看里面内容的话,大概会发现,每个操作系统的特殊按键都十分不同。因为对于键盘鼠标的输入,在各个操作平台间保持一致性是一个很大的挑战。比如像这样:

# Windows

k.tap_key(k.alt_key)

# Mac

k.tap_key('Alternate')

Mac和Windows中,alt键的输入方法就不一样。所以大家最好打开源代码学习一下,以方便记忆和理解。

使用按键输入还有一个情况,虽然普通按键可以使用type_string()进行连续输入,那么特殊按键无法使用字符,该如何进行连续输入呢?这里需要使用press_keys()方法来输入多个按键(一般在使用键盘快捷键时常出现这样的情况):

# Mac example

k.press_keys(['Command','shift','3'])

# Windows example

k.press_keys([k.windows_l_key,'d'])

上面的例子,分别在Mac和Windows中,输入了command+shift+3和win+d。

上面的内容已经基本囊括了键盘和鼠标的基本输入方式,我们已经可以用这些方法编写满足很多功能的程序了。但是这些程序有一个问题,就是当我们编写完并开始运行之后,程序就按照我们编写的内容执行了,我们无法在程序中进行交互。或者说,有时我们需要一个开关,在点下某个按键之后,执行某一部分功能。让我们来看看高级玩法。

高级玩法

如果我们的程序需要实现交互或者开关功能,就要特别介绍一下pymouse和pykeyboard中两个特殊的类:PyMouseEvent和PyKeyboardEvent。这两个对象是监控鼠标和键盘输入的框架,你必须将其子类化,然后它们就可以通过监控鼠标键盘输入,来实现一些其他的功能。这里有一个PyMouseEvent子类化的例子:

from pymouse import PyMouseEvent

def fibo():

a = 0

yield a

b = 1

yield b

while True:

a, b = b, a+b

yield b

class Clickonacci(PyMouseEvent):

def __init__(self):

PyMouseEvent.__init__(self)

self.fibo = fibo()

def click(self, x, y, button, press):

'''Print Fibonacci numbers when the left click is pressed.'''

if button == 1:

if press:

print(self.fibo.next())

else: # Exit if any other mouse button used

self.stop()

C = Clickonacci()

C.run()

上面的代码我们定义了一个PyMouseEvent类的子类:Clickonacci类。并且,我们对Clickonacci类定义了一个fibo属性,并且在Clickonacci类的click()方法中调用它。这个click()方法的功能就是,每当按下鼠标左键时,打印一个斐波那契数列中的数,当按下一个任意别的键时,程序停止。这样我们成功就给程序设置了一个开关。

上面所有的示例代码,基本可以囊括我们日常需要的程序需求了。我们的基础教程也先展示到这里,当然PyUserInput的特性还不止如此,有兴趣的朋友可以打开源代码学习。希望在未来的文章中能用一个小项目来展示PyUserInput更多的功能(如果有的话,咕咕咕)。

敬请期待吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值