【kimol君的无聊小发明】—用python写截屏小工具
【kimol君的无聊小发明】—用python写截屏小工具
- 前言
- 一、技术实现
- 1. 相关库
- 2. 定义窗口
- 3. 绘制工具条
- 4. 定义事件函数
- 二、后续改进
- 写在最后
前言
今天我看了一下自己的文件夹,发现了自己写了许多似乎很无聊的代码。于是乎,一个想法油然而生:“生活已经很无聊了,不如再无聊一点叭”。
说干就干,那就开一个专题,我们称之为kimol君的无聊小发明。
妙…啊~~~
今天要做的东西,就是用python写一个截屏工具。想必大家平时截屏的时候很多都是用的微信的ALT+A或者是WINDOWS自带的截屏软件。作为技术宅的我,怎么总是用别人的东西呢?
看我的,上图:
效果还阔以,好歹这个小猫咪截出来也是有模有样的~
一、技术实现
1. 相关库
在python中可以实现截图的库有很多,这里我用的是pyautogui,它可以对指定区域进行截屏:
import pyautogui
而界面部分(截屏的框选等)采用了tkinter库:
import tkinter as tk
2. 定义窗口
定义一个透明的窗口,让它的大小与屏幕一样:
root = tk.Tk()
root.overrideredirect(True) # 隐藏窗口的标题栏
root.attributes("-alpha", 0.1) # 窗口透明度10%
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
root.configure(bg="black")
注:alhpa参数用于设定透明度;geometry函数用于设定窗口大小;
创建一个子窗口,用于显示框选区域:
# 再创建1个Canvas用于圈选
cv = tk.Canvas(root)
x, y = 0, 0
xstart,ystart = 0 ,0
xend,yend = 0, 0
rec = ''
3. 绘制工具条
绘制一个工具条,方便后续增加功能。讲道理目前来说这个就是个鸡肋(可以省去),但是如果后续还想晚上功能的话,会很有帮助。
canvas = tk.Canvas(root)
canvas.configure(width=300)
canvas.configure(height=100)
canvas.configure(bg="yellow")
canvas.configure(highlightthickness=0) # 高亮厚度
canvas.place(x=(root.winfo_screenwidth()-500),y=(root.winfo_screenheight()-300))
canvas.create_text(150, 50,font='Arial -20 bold',text='ESC退出,假装工具条')
4. 定义事件函数
监听鼠标和键盘事件,实时监控框选区域和截屏,具体的事件有:
# 绑定事件
canvas.bind("<B1-Motion>", move) # 鼠标左键移动->显示当前光标位置
root.bind('<Escape>',sys_out) # 键盘Esc键->退出
root.bind("<Button-1>", button_1) # 鼠标左键点击->显示子窗口
root.bind("<B1-Motion>", b1_Motion)# 鼠标左键移动->改变子窗口大小
root.bind("<ButtonRelease-1>", buttonRelease_1) # 鼠标左键释放->记录最后光标的位置
root.bind("<Button-3>",button_3) #鼠标右键点击->截屏并保存图片
root.mainloop()
监听鼠标光标位置:
def move(event):global x, y ,xstart,ystartnew_x = (event.x-x)+canvas.winfo_x()new_y = (event.y-y)+canvas.winfo_y()s = "300x200+" + str(new_x)+"+" + str(new_y) canvas.place(x = new_x - xstart,y = new_y -ystart) print("s = ", s)print(root.winfo_x(), root.winfo_y())print(event.x, event.y)
创建子窗口:
def button_1(event):global x, y ,xstart,ystartglobal recx, y = event.x, event.yxstart,ystart = event.x, event.yprint("event.x, event.y = ", event.x, event.y)xstart,ystart = event.x, event.y cv.configure(height=1)cv.configure(width=1)cv.config(highlightthickness=0) # 无边框cv.place(x=event.x, y=event.y)rec = cv.create_rectangle(0,0,0,0,outline='red',width=8,dash=(4, 4))
改变子窗口大小:
def b1_Motion(event):global x, y,xstart,ystartx, y = event.x, event.yprint("event.x, event.y = ", event.x, event.y)cv.configure(height = event.y - ystart)cv.configure(width = event.x - xstart)cv.coords(rec,0,0,event.x-xstart,event.y-ystart)
松开鼠标,记录最后的光标位置:
def buttonRelease_1(event):global xend,yendxend, yend = event.x, event.y
截屏并保存图片:
def button_3(event):global xstart,ystart,xend,yendcv.delete(rec)cv.place_forget()img = pyautogui.screenshot(region=[xstart,ystart,xend-xstart,yend-ystart]) # x,y,w,himg.save('screenshot.png')sys_out(None)
退出程序:
def sys_out(even):root.destroy()
二、后续改进
这个还有很多可以改进的地方。
- 截图的时候会有dos窗口遮挡:这个解决办法由很多,类似后台启动,或者将.py编译为可执行文件等等;
- 使用不方便,为了截图还的运行代码:废话!!!当然很不方便呀,不然怎么说是个无聊的小发明呢。但是!!!它也不是一无事处,可以考虑把它放到后台运行。同样可以利用快捷键来唤醒它并完成截图。
- 功能单一:这只是一个很简单的demo,既然可以截屏了,那么我们离录屏还远吗?(正如本文开头的动图,右上角晃晃几个大字“ApowerREC”,不给钱休想去掉,哼~)那么,我们为何不自己写一个呢?
写在最后
最后,感谢各位大大的耐心阅读~
慢着,大侠请留步… 动起可爱的双手,来个赞再走呗 (๑◕ܫ←๑)
【kimol君的无聊小发明】—用python写截屏小工具相关推荐
- python小工具小发明_【kimol君的无聊小发明】—用python写截屏小工具
前言 今天我看了一下自己的文件夹,发现了自己写了许多似乎很无聊的代码.于是乎,一个想法油然而生:"生活已经很无聊了,不如再无聊一点叭". 说干就干,那就开一个专题,我们称之为kim ...
- 【kimol君的无聊小发明】—用python插入独创性声明
[kimol君的无聊小发明]-用python插入独创性声明 前言 一.代码分析 二.完整代码 写在最后 前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许 ...
- 【kimol君的无聊小发明】—用python写论文下载器
[kimol君的无聊小发明]-用python写论文下载器 前言 一.代码分析 1. 搜索论文 2. 下载论文 二.完整代码 写在最后 前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打 ...
- 【kimol君的无聊小发明】—用python写PDF转换器
[kimol君的无聊小发明]-用python写PDF转换器 前言 一.思路分析 二.我的代码 写在最后 前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许 ...
- 【kimol君的无聊小发明】—用python写图片格式批量处理工具
[kimol君的无聊小发明]-用python写图片格式批量处理工具 前言 一.思路分析 二.调整尺寸 三.调整大小 四.整合代码 写在最后 前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ ...
- 【kimol君的无聊小发明】—用python写论文下载器(图形化界面)
[kimol君的无聊小发明]-用python写论文下载器(图形化界面) 前言 一.使用说明 二.代码分析 1. 功能函数 2. 回调函数 3. 线程生成函数 4. 效果展示 写在最后 前言 某个夜深人 ...
- 可以用python实现一些小发明_【kimol君的无聊小发明】—用python写图片格式批量处理工具...
前言某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码.我拍腿正坐,一个想法油然而生:"生活已然很无聊,不如再无聊些叭" ...
- 【kimol君的无聊小发明】—用python写图片下载器
[kimol君的无聊小发明]-用python写图片下载器 前言 一.单线程版 二.多线程版 写在最后 Tip:本文仅供学习与参考,且勿用作不法用途~ 前言 某个夜深人静的夜晚,我打开了自己的文件夹,发 ...
- 【kimol君的无聊小发明】—用python写视频下载器
[kimol君的无聊小发明]-用python写视频下载器 前言 一.爬虫分析 1.视频搜索 2.视频下载 二.我的代码 写在最后 Tip:本文仅供学习与参考,且勿用作不法用途~ 前言 某个夜深人静的夜 ...
最新文章
- 健身提示:跑步一周只需三次 天天跑易疲劳
- PMcaff活动 | 汪培公:农村电商模式的重新思考
- cat命令分析_学习记录
- Bapi-BAPI_GOODSMVT_CREATE【该物料不可能有库存记帐】
- 手把手带你领略双十一背后的核心技术Sentinel之服务的熔断降级
- bash下: () {} [] [[]] (())的解释
- java函数ao活动对象_Java程序设计10-11试卷A0105答案
- Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分
- leetcode - 638. 大礼包
- 正则表达式匹配日期时间
- 以管理员身份打开cmd窗口
- 程序员在Medium上写作赚美金的基本流程
- 算法设计与分析课设-探寻宝藏-双线程DP问题-C语言
- Word和PPT中字母以及数字的上下标打法
- [java 手把手教程][第二季]java 后端博客系统文章系统——No7
- 用canvas写 看你有多色 游戏
- 嵌入式技术可以做哪些产品
- Remix IDE的本地环境搭建(ubuntu系统)以及编译智能合约
- SAP那些事-职业篇-25-顾问的价值
- 【数学计算】点乘/点积/内积/数量积/叉乘/外积/叉积/向量积
热门文章
- 台湾大学林轩田教授机器学习基石课程理解及python实现----PLA
- 单片机断电记忆方法C语言,怎样使单片机程序断电保留上次的数据?
- thinkphp6搭建后端api接口
- 人在四合院:我变成了何雨柱(二)
- vsftpd写入延误_技术债务造成的延误成本,第4部分
- python 文件上传之---断点续传
- mysql5.7.10 二进制包_mysql 32 位安装教程mysql5.7 二进制包安装
- Hbuildx 使用vue打包的App实现微信支付功能
- Marquee标签实现走马灯效果
- 蓝桥杯每日一练专栏导读