文章目录

  • 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 打包时的问题相关推荐

  1. python实战笔记之(9):TKinter制作知乎视频下载器

    前两天写了一个下载知乎视频的小程序,现在给他加了个图形界面,并生成exe文件.同时对原来的程序进行了优化,使用多线程进行任务分配和下载ts文件,解决了GUI卡顿的问题并大大加快了下载速度. 界面如下: ...

  2. 曝肝三天,两千行Python代码,制作B站视频下载工具(附源码)

    曝肝三天,两千行Python代码,制作B站视频下载工具(附源码) 文章目录 一.准备工作 二.预览 1.启动 2.解析 3.下载中 4.下载完成 5.结果 三.设计流程 1.bilibili_vide ...

  3. 【Python工具】Python实现一款支持各大平台的视频下载器 | 附源码

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复视频下载器 简介 一 ...

  4. 【kimol君的无聊小发明】—用python写视频下载器

    [kimol君的无聊小发明]-用python写视频下载器 前言 一.爬虫分析 1.视频搜索 2.视频下载 二.我的代码 写在最后 Tip:本文仅供学习与参考,且勿用作不法用途~ 前言 某个夜深人静的夜 ...

  5. You-Get, Annie 视频下载器 一键安装脚本

    受限于 CSDN 的审核,本文章以后不再跟进更新.最后编辑于 2020-04-10 . 视频下载器 一键配置脚本 (Windows) 快速配置和使用 You-Get , *******-dl , An ...

  6. 手机版m3u8合并器_100行代码,打造自己的视频下载器

    编者的话:    hello,小伙伴们.我是"风尘",今天又来给大家分享知识啦.为了提起大家对编程的兴趣,今天给大家带来一个用python语言编写的视频下载器.让互联网上的视频&q ...

  7. h5禁用浏览器下载视频_【必备】 一键视频下载器插件,非常好用的浏览器插件!...

    ① 资源发布时,版本是最新的.时过境迁,无法保证能否正常使用,请善用公众号搜索功能,请及时下载最新版或留言.② 如果觉得资源对您有用,请收藏.如果觉得资源对他人有用,请转发.③ 如发现"无法 ...

  8. 4K网络视频下载器:4K Video Downloader mac汉化教程

    4K Video Downloader for Mac版是一款4K网络视频下载器,现在我们的视频除了1080P还有4K超高清视频品质的影片,但是随着视频文件的扩大,下载速度却跟不上,这成了一个很大的问 ...

  9. 钉钉视频下载方法地瓜网络钉钉视频下载器

    大家好,今天教给大家如何下载钉钉视频! 由于春节的原因,很多学生需要在家上网课,有些网课是管理员禁止群成员下载的,只能观看,不能下载,今天教给大家如何下载管理员禁止下载的钉钉视频! 首先我们在群直播回 ...

最新文章

  1. GeforceRTX系列参数对比
  2. const mysql_mysql – 为什么我在解释查询中读取const表后会注意到“不可能”?
  3. PHP保留小数的相关方法
  4. 解决VS2013无法安装ArcObjects10.2的问题
  5. 兼容超大图片的处理_计算机读取超大图像的一些问题简述
  6. CentOS7升级Python2.7.5至2.7.13版本
  7. ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能
  8. matplotlib调节colorbar的大小
  9. java查看weblogic服务器_java判断服务器是那种,例如区分tomcat和weblogic | 学步园
  10. 3-3HDFS中文件的读写操作
  11. 域控下发脚本_让系统及时的通过域用户脚本自动的打补丁
  12. 基于Vue和Node.js的电商后台管理系统
  13. CAN总线的CRC校验
  14. 模型转换:pth转onnx
  15. if函数多个条件php,excelif函数的多个条件使用方法
  16. 谷歌浏览器chrome扩展插件-农名的世界脚本
  17. java ext.dirs_关于-Djava.ext.dirs使用及JAVA 命令参数详解System.setProperty
  18. 【渝粤题库】陕西师范大学300010 中国史学史
  19. vscode 最详细的调试
  20. DeDeCMS v5.7 SP2 前台任意用户密码修改漏洞复现

热门文章

  1. “数据产品经理”的产品技能成长之路
  2. css 谷歌字体加载,使用谷歌网页字体无限制的添加字体到您的网站
  3. 设定lib包下所有的jar到classpath
  4. springboot整合poi-tl根据模板导出word
  5. 3CLpro蛋白酶抑制剂,如何靠实力进入新冠病毒诊疗方案
  6. (重温)JavaWeb--Cookie 和 Session入门总结(了解cookie和session这一篇就够了)
  7. OFBIZ分享:如何让OFBIZ使用中文界面
  8. 高端大气上档次·玩转微信摇色子
  9. 新的篇章:来自鲍尔默和艾洛普的公开信
  10. 华为和英国电信正式签署“21世纪网络”合同