前言
今天我看了一下自己的文件夹,发现了自己写了许多似乎很无聊的代码。于是乎,一个想法油然而生:“生活已经很无聊了,不如再无聊一点叭”。
说干就干,那就开一个专题,我们称之为kimol君的无聊小发明。
妙…啊~~~
今天要做的东西,就是用python写一个截屏工具。想必大家平时截屏的时候很多都是用的微信的ALT+A或者是WINDOWS自带的截屏软件。作为技术宅的我,怎么总是用别人的东西呢?
看我的,上图:
效果还阔以,好歹这个小猫咪截出来也是有模有样的~
一、技术实现
1. 相关库
在python中可以实现截图的库有很多,这里我用的是pyautogui,它可以对指定区域进行截屏:
import pyautogui
而界面部分(截屏的框选等)采用了tkinter库:
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 = ''
注: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退出,假装工具条') 1234567
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,ystart new_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,ystart global rec x, y = event.x, event.y xstart,ystart = event.x, event.y print("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,ystart x, y = event.x, event.y print("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,yend xend, yend = event.x, event.y
截屏并保存图片:
def button_3(event): global xstart,ystart,xend,yend cv.delete(rec) cv.place_forget() img = pyautogui.screenshot(region=[xstart,ystart,xend-xstart,yend-ystart]) # x,y,w,h img.save('screenshot.png') sys_out(None)
退出程序:
def sys_out(even): root.destroy()
二、后续改进
这个还有很多可以改进的地方。
- 截图的时候会有dos窗口遮挡:这个解决办法由很多,类似后台启动,或者将.py编译为可执行文件等等;
- 使用不方便,为了截图还的运行代码:废话!!!当然很不方便呀,不然怎么说是个无聊的小发明呢。但是!!!它也不是一无事处,可以考虑把它放到后台运行。同样可以利用快捷键来唤醒它并完成截图。
- 功能单一:这只是一个很简单的demo,既然可以截屏了,那么我们离录屏还远吗?(正如本文开头的动图,右上角晃晃几个大字“ApowerREC”,不给钱休想去掉,哼~)那么,我们为何不自己写一个呢?
写在最后
最后,感谢各位大大的耐心阅读~
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]