|   1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
 | # -*- coding = utf -8 -*-
# @Time : 2022/2/19 11:17
# @Author : hair
from tkinter import *
import tkinter.messagebox
from tkinter import filedialog
from tkinter.scrolledtext import ScrolledText
import subprocess as sub
import threading
import os
import subprocess
import bvToAv
#为避免在下载时tkinter界面卡死,创建线程函数
def thread_it(func, *args):
    # 创建
    t = threading.Thread(target=func, args=args)
    # 守护
    t.setDaemon(True)
    # 启动
    t.start()
#浏览本地文件夹,选择保存位置
def browse_folder():
    #浏览选择本地文件夹
    save_address = filedialog.askdirectory()
    #把获得路径,插入保存地址输入框(即插入input_save_address输入框)
    input_save_address.insert(0,save_address)
def download():
	videoUrl = input_url.get()
	playlist = flag01.get()
	if playlist == "0":
		playlist = ""
	else:
		playlist = "--playlist"
	outFile = input_save_address.get()
	cmds = f"you-get {playlist} -o {outFile} {videoUrl}"
	print(cmds)
	input_url.delete(0, END)
	input_save_address.delete(0, END)
	flag01.delete(0,END)
	p = subprocess.Popen(cmds, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding="utf-8")
	for line in iter(p.stdout.readline, b''):
		stext.insert(END, line)
		stext.yview_moveto(1)
		if not sub.Popen.poll(p) is None:
			if line == "":
				break
	p.stdout.close()
if __name__ == '__main__':
	top = Tk()
	top.title("头发视频下载器")
	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)
	#框架布局
	frame_root=Frame(top)
	frame_left=Frame(frame_root)
	frame_left.pack(side=LEFT)
	# frame_right.pack(side=RIGHT,anchor=N)
	frame_root.pack()
	#输入视频链接
	tip1= Label(frame_left, text='请输入视频链接:         ',font = ('楷体',20))
	tip1.pack(padx=10,anchor=W)
	#视频链接输入框
	input_url= Entry(frame_left,bg='#F7F3EC')
	input_url.pack(ipadx=159,ipady=8,padx=20,anchor=W)
	#是否下载全部框
	tipf=Label(frame_left, text='是否下载全部(输入0,1,1代表是) ',font = ('楷体',20))
	tipf.pack(padx=10,anchor=W)
	flag01= Entry(frame_left,bg='#F7F3EC')
	flag01.pack(ipadx=159,ipady=8,padx=20,anchor=W)
	#请选择保存位置:
	tip2=Label(frame_left, text='请选择保存位置(必填!):  ',font = ('楷体',20))
	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)
	# “浏览文件夹”按钮
	browse_folder_button = Button(top, text='浏览',font = ('楷体',15),bg="green",command=lambda :thread_it(browse_folder))
	browse_folder_button.place(relx=0.86,rely=0.25,anchor="nw")
	# “下载”按钮
	download_button = Button(frame_left, text='下载',font = ('楷体',15),command=lambda :thread_it(download))
	download_button.pack( padx=20,pady=20,anchor=W)
	# ScrolledText组件(滚动文本框)
	stext = ScrolledText(frame_left, width=60, height=23, background='#F7F3EC')
	stext.pack(padx=20,anchor=W)
	top.mainloop()
 |