用Python写一个像QQ可快捷键唤起区域截屏的应用

Python技术杂谈 2019-03-01 16:29:18 阅读(205038) 评论(2)

这是Python小软件系列文章,关注猿人学的老朋友知道我写的Python文章可归纳为:Python爬虫挣钱系列、Python爬虫小偏方系列、Python异步IO系列、Python小软件系列等,我在这些系列中交替着写,今天写一个截屏的小应用。

python写一个带快捷键和图形界面的截图程序

1.截屏应用功能拆解

先把要实现哪些功能罗列一下,功能拆解好了,程序设计时就比较清晰。

1).首先要能响应快捷键调起截屏程序,像QQ使用Ctrl+shift+B可以截屏一样;

2).然后就是截图功能,可以用鼠标选取截取的区域;

3).最后是要把截屏保存为本地图片。

2.做一下技术调研

功能拆解出来了,就开始调查下实现难度,有没有现成的第三方库可用,Python是出了名的库多,多找一找总会找到的。

搜寻了一下Python有截图功能的库,基本都是全屏截图和程序输入坐标来区域截图,没办法用鼠标选择可视化截图。不过网上有同学提出通过写一个GUI程序,把全屏截图展示在这个GUI界面上,然后在GUI上可以实现鼠标可视化选取功能。

看起来还不错,因为之前用过Tkinter,所以就用Tkinter来做GUI了,不过很久没写,手也生得很。

Tkinkter可以监听键盘事件,但是只有当焦点在Tkinter上时才会响应键盘事件,而截图应用是截其他地方的图,比如浏览器,聊天软件等等,焦点这时肯定不在Tkinter上,所以需要另找一个可以全局监听键盘事件的库,pynput就进入了法眼。

跟截图图片处理的话,首先就想到PIL库,它的ImageGrab方法能够全局截图,也能传入坐标实现区域截图,就选PIL了。

一番搜寻下来确定了实现方法:

使用pynput库来监听键盘,使用Tkinter来做GUI,使用PIL的ImageGrab来截图。

详细的实现原理是:

当程序运行起来后就在后台监听键盘,当键盘按下ctrl+shift+M时就使用PIL做全屏截图,接着用Tkinter把全屏截图显示出来,通过Tkinter的画布(canvas)和鼠标选取做二次截图。

3.开始写截图代码了

pynput、Tkinter、PIL官方和网上都有示例,拿过来改一改,把他们逻辑串在一起就可以调试了。(我只是大自然的搬运工)

监听键盘代码如下:

截图程序监听键盘代码

截图、调用TK、二次截图主逻辑如下:

截图程序主逻辑代码

想加一个演示效果的,结果录屏软件弄了很久,视频分辨率都不理想,汗!

100多行代码搞定快捷键截屏功能,这就是用Python的好处,各种小功能都有解决方案,主要花的事情是拆解功能,选定实现路径。

不过这样由于是做了两次截图,第一次全屏截图,第二次是在全屏截图上再截图,所以保存下来的图片不太清晰。

源代码请在猿人学Python公众号后台回复:jietu

 

python小软件系列阅读:

用Python给我家宝宝写个小软件

给宝宝的翻译小软件(续):支持PDF啦!

在手机上如何运行Python程序

 

猿人学banner宣传图

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。

***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.con 原创,没有猿人学授权,请勿以任何形式转载。***

说点什么吧...

  1. 1楼
    QQ版本大全 6年前 (2019-03-04)

    Python真实强大

    • 回复
      王平 6年前 (2019-03-04)
      回复 @QQ版本大全 :因为第三方库很多,确实很方便