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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
简单介绍Python中的JSON使用
Apr 28 Python
Python生成不重复随机值的方法
May 11 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
Python中Subprocess的不同函数解析
Dec 10 Python
Python3 Click模块的使用方法详解
Feb 12 Python
python 解决print数组/矩阵无法完整输出的问题
Feb 19 Python
python绘制玫瑰的实现代码
Mar 02 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
python如何获取网络数据
Apr 11 Python
Python函数中的不定长参数相关知识总结
Jun 24 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
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
会计系中文个人求职信
2013/12/24 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
前处理班长职位说明书
2014/03/01 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
春节随笔
2015/08/15 职场文书
高中体育课教学反思
2016/02/16 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
Docker官方工具docker-registry案例演示
2022/04/13 Servers