python使用 tkinter + you-get 实现视频下载器以及 pyinstaller 打包时的问题
文章目录
- github地址
- 实现思路
- pyinstaller 打包成 exe
- UI 左上角图标
- 运行效果
- 代码
github地址
https://github.com/jnxxhzz/you-get-UI
实现思路
you-get 库是命令行下非常常用的下载视频的命令,但是由于很多时候很多人总是会来问你,B 站视频怎么下载,啥啥啥视频怎么下载,你能不能帮我下载一下…
苦于这么频繁的被问所以索性写个简单的 UI 界面打包一下 you-get 库给别人下载视频用
那么首先在命令行里是叫 you-get ,但是在在代码中可以发现名字是叫做 you_get ,python 的库不允许用 - 只能用 _
具体的实现其实没什么好讲的…用 tkinter 实现一下界面,然后用 sys.argv 手动添加输入内容,也就是 you-get 的基本格式: you-get -o 保存地址 视频连接
,调用 you_get.main() 即可
pyinstaller 打包成 exe
实现过程中最麻烦的其实不是代码的实现,代码的实现还是简单的
最麻烦的在于用 pyintaller 打包,首先给出 pyinstaller 打包的命令,主要是需要额外打包几个库,否则直接打包就会发现没有办法运行
#pyinstaller -F --path=C:\Users\admin\AppData\Local\Programs\Python\Python38\Lib\site-packages --hidden-import=you_get.extractors --hidden-import=you_get.cli_wrapper --hidden-import=you_get.processor --hidden-import=you_get.utl video.py
这里解释一下,首先 --path 是指向你的 python 第三方库中 you-get 所在的目录,这样才能找到后面需要的
you_get.extractors,you_get.cli_wrapper,you_get.processor,you_get.utl
这个几个库,如果没有引入这几个库的话会发现直接运行代码是可以的,但是打包以后 exe 文件直接运行就会无效
这个应该是 you-get 二次开发打包成 exe 最麻烦的问题了,我也找了很久问题…最后才找到解决办法
然后这里打包成 exe 时没有隐藏命令行,因为没有写映射,所以如果隐藏了命令行那代码运行的时候会出现未响应,所以想了一下索性还是下载时把 UI 隐藏直接给用户看命令行里的读条比较好…
UI 左上角图标
因为用的是 tkinter 所以 UI 界面左上角的图标默认是一个小羽毛,而这个图标是可以改的,但是因为同时要使用 pyinstaller 打包,那就意味着要么把图标文件打包进去,要么就必须把图标文件放在 exe 旁边否则就会报错。
这里给出一个比较简单的可以直接把图标文件写入代码中的方法
因为图标文件不大,所以可以将图标文件进行编码然后直接 import
将图标文件命名为 pen.ico
然后放在以下这份代码同目录下,运行下面这份代码会产生一个 icon.py
文件
将 icon.py
文件放在下面主代码 video.py
的目录下直接使用 from icon import Icon
导入即可
import base64
with open("icon.py","a") as f:f.write('class Icon(object):\n')f.write('\tdef __init__(self):\n')f.write("\t\tself.img='")
with open("pen.ico","rb") as i:b64str = base64.b64encode(i.read())with open("icon.py","ab+") as f:f.write(b64str)
with open("icon.py","a") as f:f.write("'")
然后通过以下这段代码每次运行时先通过编码文件翻译成图片保存,设置为图标后删除图片文件
with open('tmp.ico','wb') as tmp:tmp.write(base64.b64decode(Icon().img))
self.root.iconbitmap('tmp.ico')
os.remove('tmp.ico')
这样就不需要解决图片需要打包的问题了
运行效果
代码
import re
import sys
import os
import tkinter as tk
from tkinter.filedialog import askdirectory
import tkinter.messagebox as msgbox
import webbrowser
import you_get
from icon import Icon
import base64class Download:# constructdef selectPath(self):path_=askdirectory()self.path.set(path_)def __init__(self, width=400, height=170):self.w = widthself.h = heightself.title = '视频下载'self.root = tk.Tk(className=self.title)self.url = tk.StringVar()self.start = tk.IntVar()self.end = tk.IntVar()self.path = tk.StringVar()self.path.set('D:/')# 以下是图标文件,没有则注释掉with open('tmp.ico','wb') as tmp:tmp.write(base64.b64decode(Icon().img))self.root.iconbitmap('tmp.ico')os.remove('tmp.ico')# 图标文件结束# define frameframe_1 = tk.Frame(self.root)frame_2 = tk.Frame(self.root)frame_3 = tk.Frame(self.root)frame_4 = tk.Frame(self.root)menu = tk.Menu(self.root)self.root.config(menu=menu)menu1 = tk.Menu(menu, tearoff=0)menu.add_cascade(label='选项', menu=menu1)menu1.add_command(label='关于我', command=lambda: webbrowser.open('https://blog.csdn.net/jnxxhzz'))menu1.add_command(label='退出', command=lambda: self.root.quit())# set frame_1label1 = tk.Label(frame_1, text='输入视频链接:')entry_url = tk.Entry(frame_1, textvariable=self.url, highlightcolor='Fuchsia', highlightthickness=1, width=35)# set frame_3label2 = tk.Label(frame_2, text='视频输出地址:')entry_path = tk.Entry(frame_2, textvariable=self.path, highlightcolor='Fuchsia', highlightthickness=1, width=35)# set frame_2path = tk.StringVar()url_path = tk.Button(frame_3, text = "路径选择", font=('楷体', 12), fg='black', width=3, height=-1, command = self.selectPath)down = tk.Button(frame_3, text='下载', font=('楷体', 12), fg='black', width=3, height=-1,command=self.video_download)label_desc = tk.Label(frame_4, fg='red', font=('楷体', 12),text='注意:请勿移作商用!')label_jnxxhzz = tk.Label(frame_4, fg='red', font=('楷体', 10),text='--by jnxxhzz')frame_1.pack()frame_2.pack()frame_3.pack()frame_4.pack()label1.grid(row=0, column=0)entry_url.grid(row=0, column=1)label2.grid(row=1, column=0,pady=10)entry_path.grid(row=1, column=1,pady=10) url_path.grid(row=1,column=0, ipadx=20,padx = 5)down.grid(row=1, column=3, ipadx=20)label_desc.grid(row=1, column=0)label_jnxxhzz.grid(row=2, column=0)def video_download(self):url = self.url.get()path = self.path.get()if re.match(r'^https?:/{2}\w.+$', url):if path != '':msgbox.showwarning(title='警告', message='下载过程中窗口如果出现短暂卡顿说明文件正在下载中!')try:self.root.withdraw()sys.argv = ['you-get', '-o', path, url]you_get.main()except Exception as e:msgbox.showerror(title='警告', message=e)msgbox.showinfo(title='成功', message='下载完成!')self.root.wm_deiconify()else:msgbox.showerror(title='警告', message='输出地址错误!')self.root.wm_deiconify()else:msgbox.showerror(title='警告', message='视频地址错误!')self.root.wm_deiconify()def center(self):ws = self.root.winfo_screenwidth()hs = self.root.winfo_screenheight()x = int((ws / 2) - (self.w / 2))y = int((hs / 2) - (self.h / 2))self.root.geometry('{}x{}+{}+{}'.format(self.w, self.h, x, y))def event(self):self.root.resizable(False, False)self.center()self.root.mainloop()if __name__ == '__main__':app = Download()app.event()
python使用 tkinter + you-get 实现视频下载器以及 pyinstaller 打包时的问题相关推荐
- python实战笔记之(9):TKinter制作知乎视频下载器
前两天写了一个下载知乎视频的小程序,现在给他加了个图形界面,并生成exe文件.同时对原来的程序进行了优化,使用多线程进行任务分配和下载ts文件,解决了GUI卡顿的问题并大大加快了下载速度. 界面如下: ...
- 曝肝三天,两千行Python代码,制作B站视频下载工具(附源码)
曝肝三天,两千行Python代码,制作B站视频下载工具(附源码) 文章目录 一.准备工作 二.预览 1.启动 2.解析 3.下载中 4.下载完成 5.结果 三.设计流程 1.bilibili_vide ...
- 【Python工具】Python实现一款支持各大平台的视频下载器 | 附源码
相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复视频下载器 简介 一 ...
- 【kimol君的无聊小发明】—用python写视频下载器
[kimol君的无聊小发明]-用python写视频下载器 前言 一.爬虫分析 1.视频搜索 2.视频下载 二.我的代码 写在最后 Tip:本文仅供学习与参考,且勿用作不法用途~ 前言 某个夜深人静的夜 ...
- You-Get, Annie 视频下载器 一键安装脚本
受限于 CSDN 的审核,本文章以后不再跟进更新.最后编辑于 2020-04-10 . 视频下载器 一键配置脚本 (Windows) 快速配置和使用 You-Get , *******-dl , An ...
- 手机版m3u8合并器_100行代码,打造自己的视频下载器
编者的话: hello,小伙伴们.我是"风尘",今天又来给大家分享知识啦.为了提起大家对编程的兴趣,今天给大家带来一个用python语言编写的视频下载器.让互联网上的视频&q ...
- h5禁用浏览器下载视频_【必备】 一键视频下载器插件,非常好用的浏览器插件!...
① 资源发布时,版本是最新的.时过境迁,无法保证能否正常使用,请善用公众号搜索功能,请及时下载最新版或留言.② 如果觉得资源对您有用,请收藏.如果觉得资源对他人有用,请转发.③ 如发现"无法 ...
- 4K网络视频下载器:4K Video Downloader mac汉化教程
4K Video Downloader for Mac版是一款4K网络视频下载器,现在我们的视频除了1080P还有4K超高清视频品质的影片,但是随着视频文件的扩大,下载速度却跟不上,这成了一个很大的问 ...
- 钉钉视频下载方法地瓜网络钉钉视频下载器
大家好,今天教给大家如何下载钉钉视频! 由于春节的原因,很多学生需要在家上网课,有些网课是管理员禁止群成员下载的,只能观看,不能下载,今天教给大家如何下载管理员禁止下载的钉钉视频! 首先我们在群直播回 ...
最新文章
- GeforceRTX系列参数对比
- const mysql_mysql – 为什么我在解释查询中读取const表后会注意到“不可能”?
- PHP保留小数的相关方法
- 解决VS2013无法安装ArcObjects10.2的问题
- 兼容超大图片的处理_计算机读取超大图像的一些问题简述
- CentOS7升级Python2.7.5至2.7.13版本
- ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能
- matplotlib调节colorbar的大小
- java查看weblogic服务器_java判断服务器是那种,例如区分tomcat和weblogic | 学步园
- 3-3HDFS中文件的读写操作
- 域控下发脚本_让系统及时的通过域用户脚本自动的打补丁
- 基于Vue和Node.js的电商后台管理系统
- CAN总线的CRC校验
- 模型转换:pth转onnx
- if函数多个条件php,excelif函数的多个条件使用方法
- 谷歌浏览器chrome扩展插件-农名的世界脚本
- java ext.dirs_关于-Djava.ext.dirs使用及JAVA 命令参数详解System.setProperty
- 【渝粤题库】陕西师范大学300010 中国史学史
- vscode 最详细的调试
- DeDeCMS v5.7 SP2 前台任意用户密码修改漏洞复现
热门文章
- “数据产品经理”的产品技能成长之路
- css 谷歌字体加载,使用谷歌网页字体无限制的添加字体到您的网站
- 设定lib包下所有的jar到classpath
- springboot整合poi-tl根据模板导出word
- 3CLpro蛋白酶抑制剂,如何靠实力进入新冠病毒诊疗方案
- (重温)JavaWeb--Cookie 和 Session入门总结(了解cookie和session这一篇就够了)
- OFBIZ分享:如何让OFBIZ使用中文界面
- 高端大气上档次·玩转微信摇色子
- 新的篇章:来自鲍尔默和艾洛普的公开信
- 华为和英国电信正式签署“21世纪网络”合同