我心中的王者:Python-用Python控制鼠标、屏幕与键盘

我心中的王者:Python-用Python控制鼠标、屏幕与键盘

本章主要说明使用Python控制鼠标、屏幕与键盘的应用。为了执行本章的程序,请安装pyaotogui模块。

 pip install pyautogui

28-1 鼠标的控制

28-1-1 提醒事项

由于这一章将讲解鼠标的控制,用户可能会因为程序设计错误造成对鼠标失去控制,造成程序无法控制,甚至无法使用鼠标结束程序,最后可能需使用下列方式结束计算机。

方法1:

Windows:同时按Ctrl + Alt +Del。

Mac OS:同时按Command + Shift + Option + Q。

方法2:

或是在设计程序时,每次启用pyautogui的方法设定暂停3秒再执行。

这时快速处理移动鼠标关闭程序。

方法3:

也可以使用下列语法先设定Python的安全防护功能失效。

首先在暂停3秒钟期间,你可以快速将鼠标光标移至屏幕左上角,这时会产生pyautogui.FailSageException异常,可以设计让程序终止。

28-1-2 屏幕坐标

我们操作鼠标时可以看到鼠标光标在屏幕上移动,对鼠标而言,屏幕坐标的基准点(0,0)位置在左上角,往右移动x轴坐标会增加,往左移动x轴坐标会减少。往下移动y轴坐标会增加,往上移动y轴坐标会减少。

坐标的单位是Pixel(像素),每一台计算机的像素可能不同,可以用size( )方法获得计算机屏幕的像素,这个方法传回2个值,分别是屏幕宽度和高度。

程序实例ch28_1.py:列出目前使用计算机的像素。

# ch28_1.py
import pyautogui

width, height = pyautogui.size()    # 设定屏幕宽度和高度
print(width, height)                # 打印屏幕宽度和高度

执行结果

2560 1600

由上图笔者可以得到目前所用计算机屏幕像素规格。

28-1-3 获得鼠标光标位置

在pyautogui模块内有position( )方法可以获得鼠标光标位置,这个方法会传回2个值,分别是鼠标光标的x轴和y轴坐标。

程序实例ch28_2.py:获得鼠标光标位置。

# ch28_2.py
import pyautogui

xloc, yloc = pyautogui.position()    # 获得鼠标光标位置
print(xloc, yloc)                    # 打印鼠标光标位置

执行结果

1396 940

程序实例ch28_3.py:这个程序会持续打印鼠标光标位置,直到鼠标光标x轴位置到达1800(含)以上才停止。

ch28_3.py

import pyautogui

xloc = 0
while xloc < 1800:
xloc, yloc = pyautogui.position() # 获得鼠标光标位置
print(xloc, yloc) # 打印鼠标光标位置

执行结果 下列是部分画面。

1795 824
1795 824
1795 824
1801 824

28-1-4 绝对位置移动鼠标

在pyautogui模块内有moveTo( )方法可以将鼠标移至光标设定位置,它的使用格式如下。

 moveTo(x坐标, y坐标, duration=xx)  # xx是移动至此坐标的时间

程序实例ch28_4.py:控制光标在一个矩形区间移动,下列程序duration是设定光标移动至此坐标的时间,我们可以自行设定此时间。可以得到鼠标光标在左上角(300,300)、右上角(1500, 300)、右下角(1500, 700)和左下角(300, 700)间移动5次。

# ch28_4.py
import pyautogui

x, y = 300, 300
for i in range(5):
    pyautogui.moveTo(x, y, duration=0.5)              # 左上角
    pyautogui.moveTo(x+1200, y, duration=0.5)         # 右上角
    pyautogui.moveTo(x+1200, y+400, duration=0.5)     # 右下角
    pyautogui.moveTo(x, y+400, duration=0.5)          # 左下角

执行结果
鼠标自动移动

28-1-5 相对位置移动鼠标

在pyautogui模块内有moveRel( )方法可以将鼠标移至相较于前一次光标的相对位置,一般是适用在移动距离较短的情况,它的使用格式如下。

 moveRel(x位移, y位移, duration=xx)  # xx是移动至此坐标相对位置的时间

程序实例ch28_5.py:控制光标在一个正方形区间移动,程序执行会以光标位置为左上角,然后在正方形区间移动。程序执行期间,你将发现我们无法自主控制鼠标光标。

# ch28_5.py
import pyautogui
                   
for i in range(5):
    pyautogui.moveRel(300, 0, duration=0.5)     # 往右上角移动
    pyautogui.moveRel(0, 300, duration=0.5)     # 往右下角移动
    pyautogui.moveRel(-300, 0, duration=0.5)    # 往左下角移动
    pyautogui.moveRel(0, -300, duration=0.5)    # 往左上角移动

执行结果 本程序执行结果与ch28_4.py相同。

28-1-6 键盘Ctrl-C键

如果我们现在执行ch28_3.py,可以发现除了鼠标光标在x轴超出1000像素坐标可以终止程序外,如果按下Ctrl-C键,也可以产生KeyboardInterrupt异常,造成程序终止。

在这里插入图片描述

了解了上述特性,我们可以改良ch28_3.py。

程序实例ch28_6.py:重新设计ch28_3.py,增加若是读者按键盘的Ctrl-C键,也可以让程序终止执行,当然要设计这类程序需借用异常处理。这个程序如果是异常结束将跳一行输出Bye字符串。

# ch28_6.py
import pyautogui

xloc = 0
print('按Ctrl-C 可以中断本程序')
try:
    while xloc < 1000:
        xloc, yloc = pyautogui.position()    # 获得鼠标光标位置
        print(xloc, yloc)                    # 打印鼠标光标位置
except KeyboardInterrupt:
    print('\nBye')

执行结果

按Ctrl-C 可以中断本程序
2339 121
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值