Хочу уточнить, при нажатии кнопки "Скачать" никакой ошибки не выскакивает, просто это не работает.
Вот весь код. п>
Код: Выделить всё
# importing packages
from pytube import YouTube
import tkinter as tk
from tkinter import filedialog, messagebox
WIDTH = "500"
HEIGHT = "300"
dir = ""
url_list = []
root = tk.Tk()
root.geometry(WIDTH + "x" + HEIGHT)
root.resizable(False, True)
root.title("Youtube Downloader")
audio = tk.BooleanVar()
single_song = tk.BooleanVar()
def download(url, dir, audio):
yt = YouTube(url=url)
if audio.get():
video = yt.streams.filter(only_audio=True).first()
else:
video = yt.streams.get_highest_resolution()
video.download(output_path=dir)
if single_song.get():
messagebox.showinfo("Done", yt.title + " has been successfully downloaded.")
def change_value(var):
if var:
var = False
else:
var = True
def get_dir():
global dir
dir = filedialog.askdirectory()
def add(url):
global url_list
url_list.append(url)
def display():
global url_list
for child in frm_disp.winfo_children():
child.destroy()
for url in url_list:
label = tk.Label(frm_disp, text=url)
label.pack()
def clear():
global url_list
url_list = []
for child in frm_disp.winfo_children():
child.destroy()
def download_all(dir, audio):
global url_list
if len(url_list) == 0:
messagebox.showwarning("URL","Please write a URL")
return
if dir == "":
messagebox.showwarning("Directory", "Please select a directory")
return
for url in url_list:
download(url, dir, audio)
messagebox.showinfo("Done", "All songs downloaded correctly")
frm = tk.Frame(root, width=480, height=480)
frm.pack()
lbl = tk.Label(root, text="List of songs to be donwloaded (Press \"Display\" to refresh):", pady=10)
lbl.pack()
frm_disp = tk.Frame(root, width=480, height=100, highlightthickness=2,highlightbackground="black")
frm_disp.pack()
btsingle_song = tk.Checkbutton(root, variable=single_song, text="Warn when each song has been downloaded")
btsingle_song.pack()
guide = tk.Label(frm, text="Write the URL of the Youtube video:")
guide.grid(row=0, column=0, columnspan=3,pady=10)
bturl = tk.Entry(frm, width=75)
bturl.grid(row=1, column=0, columnspan=3)
dwn = tk.Button(frm, command= lambda: download_all(dir, audio), width=15, text="Download")
dwn.grid(row=2, column=1)
btdir = tk.Button(frm, command=get_dir, width=15, text="Directory")
btdir.grid(row=2, column=0)
btadd = tk.Button(frm, command= lambda: add(bturl.get()), width=15, text="Add")
btadd.grid(row=3, column=0)
disp = tk.Button(frm, command=display, width=15, text="Display")
disp.grid(row=3, column=1)
clr = tk.Button(frm, command=clear, width=15, text="Clear")
clr.grid(row=3, column=2)
only_audio = tk.Checkbutton(frm, text="Only audio (as mp3)", variable=audio)
only_audio.grid(row=2, column=2)
root.update()
root.mainloop()
Поскольку единственной проблемой является кнопка «Загрузить», я подумал, что, возможно, проблема в pytube, но понятия не имею.
Обновление:
Я сохранил тестирую код, и всякий раз, когда я пытаюсь загрузить видео или аудио, выдается следующая ошибка:
Код: Выделить всё
Traceback (most recent call last):
File "tkinter\__init__.py", line 1892, in __call__
File "DonwloadYoutube.py", line 93, in
File "DonwloadYoutube.py", line 71, in download_all
File "DonwloadYoutube.py", line 27, in download
File "pytube\__main__.py", line 296, in streams
File "pytube\__main__.py", line 181, in fmt_streams
File "pytube\extract.py", line 409, in apply_signature
File "pytube\cipher.py", line 30, in __init__
File "re.py", line 252, in compile
File "re.py", line 304, in _compile
File "sre_compile.py", line 764, in compile
File "sre_parse.py", line 950, in parse
File "sre_parse.py", line 443, in _parse_sub
File "sre_parse.py", line 668, in _parse
re.error: nothing to repeat at position 2
Подробнее здесь: https://stackoverflow.com/questions/786 ... e-it-fails