python基于tkinter实现gif录屏功能


Posted in Python onMay 19, 2021

一、主界面实现

(一)实现最简单的窗体

from tkinter import *

if __name__ == '__main__':

    tk = Tk()
    tk.geometry('500x400+500+150')
    tk.title('有趣的透明窗体-开篇了!!!')
    canvas = Canvas(tk)
    canvas.pack(fill=BOTH, expand=Y)
    tk.mainloop()

太简单了,不详细说了,相信大家都看得懂。

(二)把灰色设置成透明色

TRANSCOLOUR = 'gray'
tk.wm_attributes('-transparentcolor', TRANSCOLOUR)

(三)放置一个矩形框在canvas上

canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)

(四)让透明窗体不断重画的onsize函数

def on_resize(evt):
    tk.configure(width=evt.width,height=evt.height)
    canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)
    print(canvas.winfo_width())

(五)绑定onsize函数

tk.bind('<Configure>', on_resize)

(六)透明窗体的效果

哈哈,透明主界面效果出来了。

python基于tkinter实现gif录屏功能

二、GIF录屏功能实现

(一)按次保存成图片

def _GifScreen():
    global i
    i += 1
    HWND = win32gui.FindWindow(None,'有趣的透明窗体-开篇了!!!')
    print(HWND)
    rect=win32gui.GetWindowRect(HWND) #获取当前窗口坐标
    rect = (rect[0]+10,rect[1]+32,rect[0]+10+ canvas.winfo_width(),rect[1]+10+canvas.winfo_height()+16)
    print(rect)
    im=ImageGrab.grab(rect) #截取目标图像
    im.save("./out/CaptureScreen_%s.jpeg" % i,'jpeg') #前面一个参数是保存路径,后面一个参数是保存格式

(二)启用一个线程

启用一个线程,调用makegif函数,实现gif图片的截取

def GifScreen():
    thread_list = []
    t1 = threading.Thread(target=makegif)
    thread_list.append(t1)

(三)实现具体的makegif函数

当生成的图片达到20张的时候,就开始调用create_gif函数打包成gif文件。

def makegif():
    global i,image_list
    while True:
        _GifScreen()
        time.sleep(0.5)
        if i > 20:
            break;
    create_gif(image_list,'out.gif',0.5)

(四)实现create_gif,将文件夹里面的图片打包成GIF文件

image_list = []
def create_gif(image_list, gif_name, duration = 1.0):
    frames = []
    for image_name in image_list:
        frames.append(imageio.imread(image_name))
    imageio.mimsave(gif_name, frames, 'GIF', duration=duration)

(五)增加录屏按钮,并绑定响应事件GifScreen

b = Button(tk, text='GIF截图', command=GifScreen)
b.pack()

(六)实现按钮的响应事件GifScreen

def GifScreen():
    thread_list = []
    t1 = threading.Thread(target=makegif)
    thread_list.append(t1)

    #正式开启现线程
    for t in thread_list:
        t.setDaemon(True)
        t.start()

三、整体实现效果

(一)界面效果

python基于tkinter实现gif录屏功能

(二)GIF录屏效果

python基于tkinter实现gif录屏功能

代码量不大,效果还行。
再深入研究可以有更多更有趣的应用。

以上就是python基于tkinter实现gif录屏功能的详细内容,更多关于python gif录屏的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
学习python (1)
Oct 31 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
python微信公众号之关键词自动回复
Jun 15 Python
django Serializer序列化使用方法详解
Oct 16 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
python实现列表的排序方法分享
Jul 01 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
python计算n的阶乘的方法代码
Oct 25 Python
django admin 添加自定义链接方式
Mar 11 Python
django实现日志按日期分割
May 21 Python
区分python中的进程与线程
Aug 13 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 #Python
python3 hdf5文件 遍历代码
May 19 #Python
Python基础之元组与文件知识总结
Python使用protobuf序列化和反序列化的实现
详解分布式系统中如何用python实现Paxos
May 18 #Python
如何在向量化NumPy数组上进行移动窗口
Python如何配置环境变量详解
You might like
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
python网络编程之文件下载实例分析
2015/05/20 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
深入理解Python中的super()方法
2017/11/20 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
python操作链表的示例代码
2020/09/27 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
机械系大学毕业生推荐信
2013/11/27 职场文书
运动会跳远加油稿
2014/02/20 职场文书
读书活动实施方案
2014/03/10 职场文书
小学生思想品德评语
2014/12/31 职场文书
2015最新婚礼主持词
2015/06/30 职场文书