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实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
python django事务transaction源码分析详解
Mar 17 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python程序控制NAO机器人行走
Apr 29 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 Python
Django的models模型的具体使用
Jul 15 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 Python
PYTHON InceptionV3模型的复现详解
May 06 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+java实现自动新闻滚动窗口
2006/10/09 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
拖拉表格的JS函数
2008/11/20 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
Python入门篇之字符串
2014/10/17 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
高中生的自我鉴定范文
2014/01/24 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang