python 使用tkinter+you-get实现视频下载器


Posted in Python onNovember 17, 2020

运行效果:

python 使用tkinter+you-get实现视频下载器

完整代码

from tkinter import *
import tkinter.messagebox
import base64
from tkinter import filedialog
from tkinter.scrolledtext import ScrolledText
import subprocess as sub
import threading
import os

top = Tk()
top.title("欢迎关注gudu12306知乎")
path1=os.path.dirname(os.path.abspath(__file__))
# print(path1)
# print(os.environ["Path"])
os.environ["PATH"] += os.pathsep + path1
# print(os.environ["Path"])

#获取屏幕尺寸以计算布局参数,使窗口居屏幕中央,其中width和height为界面宽和高
width=700
height=700
screenwidth = top.winfo_screenwidth() 
screenheight = top.winfo_screenheight() 
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)  
top.geometry(alignstr)

#阻止窗口调整大小
top.resizable(0,0)
img=b'AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAlJSX/KSkp/y0tLf8wMDD/NjY2/0RERP+Dg4P/Pz8//x4eHv8hISH/IiIi/x0dHf8rKyv/Ly8v/4SEhP+jo6P/HBwc/yEhIf8mJib/KCgo/yEhIf9gYWH/PT4+/x4eHv8gICD/RERE/0xMTP8rKyv/ICAg/zExMf+QkJD/qKio/xoaGv8cHBz/HBwc/x4eHv8gICD/LS0t/x8fH/8fHx//LS0t/3l5ef9qamr/SkpK/yQkJP8oKSj/kZGQ/6ysrP8bGxv/HBwc/x0dHf8cHBz/Hx8f/yAgIP8hISH/NTY2/4OFhf+Xl5f/ampq/2JiYv8zNDL/Jycn/5OTk/+wsLD/Gxsb/xwcHP8dHR3/HR0d/x4eHv8hISH/RUVF/6Ghof/BwcH/tLS0/21ubP9FRkX/TU1N/yoqKv+VlZX/s7Oz/xwcHP8dHR3/HR0d/x0dHf8fHx//Pj4+/66urv/CwsL/ycnJ/7Gxsf89PT3/Nzc3/1tbW/89PT3/eXl5/7e3t/8cHBz/HR0d/x8fH/8fHx//JiYm/4qKiv/MzMz/w8PD/8rKyv+mpqb/QEBA/zs7O/9hYWH/VlZW/1tbW/+5ubn/HBwc/x0dHf8eHh7/ICAg/y0uLv/FxcX/1dXV/9XV1f/W1tb/1NTU/7Ozs/+Kior/bGxs/2JiYv9OTk3/t7e3/xwcHP8cHBz/HR0d/x8fH/8jJCT/ampp/8rKyv+Xl5b/i4yK/87Ozv/Dw8P/dnZ2/2hoaP9qamr/Q0ND/7e3t/8dHR3/Hh4e/x4eHv8fHx//KSkp/yoqKv9aWlr/dnZ2/4WFhf+np6f/iYmJ/y0tLf9LS0v/Y2Nj/1JSUv+/v7//MzQ0/zExMf8vLy//MzMz/6SkpP86Ojr/Jycn/3Nzc/+3t7b/r6+v/8zMzP9FRUX/MDAw/ysrK/9dXV3/v7+//0hJSf9FRUX/QkND/21ubv9nZ2f/RERE/yIiIv8nJyf/NDQ0/2tra/+en5//Ly8v/yMjI/8qKir/lJSU/729vf9ERUX/QENC/z4/P/9fYGD/V1dX/2lpaf8kJCT/Hx8f/yMjI/8pKSn/LCws/yIiIv8lJSX/Wlpa/66urv+6urr/MzMz/zExMf8uLi7/RkZG/15eXv8yMjL/KSkp/yoqKv8uLi7/KSkp/ycnJ/88Pj3/MjIy/2hoaP+mpqb/sLCw/yEhIf8gICD/Hx8f/x4eHv8dHR3/NjY2/yYmJv8cHBz/Hx8f/ycnJ/8mJib/aWpp/z4+Pv9tbW3/np6e/6Wlpf8vLy//MzQ0/y8vL/80NTX/MDAw/zU1Nf8gICD/Ghoa/xoaGv8aGhr/Kysr/0dHR/9BQUH/a2tr/5WUlf+bm5v/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
#设置窗口图标
tmp = open("tmp.ico","wb+")
tmp.write(base64.b64decode(img))
tmp.close()
top.iconbitmap("tmp.ico")
os.remove("tmp.ico")

#框架布局
frame_root=Frame(top)
frame_left=Frame(frame_root)
frame_left.pack(side=LEFT)
# frame_right.pack(side=RIGHT,anchor=N)
frame_root.pack()

#github源地址
tip0_0= Label(frame_left, text='github源地址:https://github.com/soimort/you-get',font = ('楷体',15))
tip0_0.pack(padx=10,anchor=W)
tip0_1= Label(frame_left, text='仅用于学习研究使用,用于非法用途概不负责',font = ('楷体',15))
tip0_1.pack(padx=10,anchor=W)

#输入视频链接
tip1= Label(frame_left, text='请输入视频链接:     ',font = ('楷体',25))
tip1.pack(padx=10,anchor=W)
#视频链接输入框
input_url= Entry(frame_left,bg='#F7F3EC')
input_url.pack(ipadx=159,ipady=8,padx=20,anchor=W)

#请选择保存位置:
tip2=Label(frame_left, text='请选择保存位置(必填!): ',font = ('楷体',25))
tip2.pack(padx=10,anchor=W)
#保存地址输入框
input_save_address= Entry(frame_left,bg='#F7F3EC')
input_save_address.pack(ipadx=159,ipady=8,padx=20,anchor=W)

#加载会员cookies:
tip3=Label(frame_left, text='加载会员cookies(下载会员视频选填!!!):',bg="red",font = ('楷体',18))
tip3.pack(padx=10,pady=5,anchor=W)
tip4=Label(frame_left, text='cookies文件为火狐浏览器的cookies.sqlite文件',bg="red",font = ('楷体',18))
tip4.pack(padx=10,pady=2,anchor=W)
#会员cookies输入框
input_cookies_address= Entry(frame_left,bg='#F7F3EC')
input_cookies_address.pack(ipadx=159,ipady=8,padx=20,anchor=W)

#浏览本地文件夹,选择保存位置
def browse_folder():
  #浏览选择本地文件夹
  save_address = filedialog.askdirectory()
  #把获得路径,插入保存地址输入框(即插入input_save_address输入框)
  input_save_address.insert(0,save_address)

#浏览本地文件夹,选择保存位置
def browse_cookies():
  #浏览选择本地文件夹
  cookies_address = filedialog.askopenfilename()
  #把获得路径,插入保存地址输入框(即插入input_save_address输入框)
  input_cookies_address.insert(0,cookies_address)

#下载函数
def download():
  tkinter.messagebox.showinfo(title='Hi', message='已经开始下载,耐性等待请勿重复点击')
  #从输入框获取视频链接
  url=input_url.get()
  # 从输入框获取保存地址
  if input_cookies_address.get()=='':
    cookies_address=''
  else:
    cookies_address="-c "+input_cookies_address.get()
  save_address=input_save_address.get()

  cmd = f'you {cookies_address}  -o {save_address}  {url}'
  print(cmd)
  input_url.delete(0,END)
  input_save_address.delete(0,END)

#将cmd结果重定向到tkinterGUI,即将命令行的结果显示ScrolledText(滚动文本框)控件里
  p = sub.Popen(cmd,stdin=sub.PIPE,stdout=sub.PIPE, stderr=sub.PIPE,shell=True)
  for line in iter(p.stdout.readline, b''):
    stext.insert(END,line.decode('UTF-8'))
    stext.yview_moveto(1)
    if not sub.Popen.poll(p) is None:
      if line == "":
        break
  p.stdout.close()
  # while p.poll() is None:
  #   output=p.stdout.readline().decode('UTF-8')
  #   stext.insert(END,output)
  #   stext.yview_moveto(1)
  # if p.poll()!=0:
  #   errors=p.stderr.read().decode('UTF-8')
  #   stext.insert(END,errors)
  #   stext.yview_moveto(1)

#为避免在下载时tkinter界面卡死,创建线程函数
def thread_it(func, *args):
  # 创建
  t = threading.Thread(target=func, args=args)
  # 守护 !!!
  t.setDaemon(True)
  # 启动
  t.start()

# “浏览文件夹”按钮
browse_folder_button = Button(top, text='浏览',font = ('楷体',15),bg="green",command=lambda :thread_it(browse_folder))
browse_folder_button.place(relx=0.81,rely=0.24,anchor="nw")

#cookies文件按钮
browse_folder_cookies = Button(top, text='浏览',font = ('楷体',15),bg="green",command=lambda :thread_it(browse_cookies))
browse_folder_cookies.place(relx=0.81,rely=0.40,anchor="nw")

# “下载”按钮
download_button = Button(frame_left, text='下载',font = ('楷体',15),command=lambda :thread_it(download))
download_button.pack( padx=20,pady=6,anchor=W)

# ScrolledText组件(滚动文本框)
stext = ScrolledText(frame_left, width=60, height=23, background='#F7F3EC')
stext.pack(padx=20,anchor=W)

top.mainloop()

以上就是python 使用tkinter+you-get实现视频下载器的详细内容,更多关于python视频下载器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
python3的pip路径在哪
Jun 23 Python
Python 字符串池化的前提
Jul 03 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
聊聊python中的循环遍历
Sep 07 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 #Python
Pycharm安装第三方库失败解决方案
Nov 17 #Python
Restful_framework视图组件代码实例解析
Nov 17 #Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 #Python
Manjaro、pip、conda更换国内源的方法
Nov 17 #Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 #Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 #Python
You might like
PHP数据库操作面向对象的优点
2006/10/09 PHP
php 定义404页面的实现代码
2012/11/19 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python pymongo模块常用操作分析
2018/09/01 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python二元表达式用法
2019/12/04 Python
python如何实现word批量转HTML
2020/09/30 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
上学迟到的检讨书
2014/01/11 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
大学生求职自荐信
2015/03/24 职场文书
考研导师推荐信范文
2015/03/27 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
七个Python必备的GUI库
2021/04/27 Python
Python数据分析之pandas读取数据
2021/06/02 Python
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle