Завантажувач з Youtube із GUI customtkinter







 #! Завантажувач з Youtube

from tkinter import *

import customtkinter

from customtkinter import *  # <- import the CustomTkinter module

from CTkMessagebox import CTkMessagebox

from pytube import YouTube

from pytube.cli import on_progress

from pytube.exceptions import VideoUnavailable


class YoDowloader(customtkinter.CTk):

    def on_closing(self):

        msg = CTkMessagebox(title="Exit?", message="Закрити програму?",

                        icon="question", option_1="Скасувати", option_2="Ні", option_3="Так")

        

        if msg.get() == "Так":            

            self.after_cancel(self)

            self.destroy()

    

    def addType(self):

        print(self.radio_var.get())

    def v_prog(self, stream, chunk, toEnd):

        #print(stream.filesize,"$$$$$$$$$$$")

        size = (1-(toEnd/stream.filesize))*100

        #print(chunk, "++++++++++++")

        #print(round(size,1), "%")

        self.info.configure(text=f"Завантажено: {round(size,1)} %")

        self.update()

    def test (self):

        

        line = "https://www.youtube.com/watch?v=" #32

    def download (self):

        #print(self.project.get())

        #self.info.configure(text="Завантажую...")

        #if self.test() == True:

        line = "https://www.youtube.com/watch?v="

        link = self.project.get()

        if link.startswith(line):

            try:

                video = YouTube (link, on_progress_callback=self.v_prog)

            except VideoUnavailable:

                print(f'Video  is unavaialable, skipping.')

            else:

                Dtype = int(self.radio_var.get())

                if Dtype == 2: 

                    self.stream = video.streams.get_audio_only()

                else:

                    self.stream = video.streams.get_highest_resolution()        

                self.stream.download()        

                self.info.configure(text="Завантаження виконано")

                self.insert.delete(0, 100)

        else:

            CTkMessagebox(title="Помилка", message="Недійсна адреса",

                        icon="question", option_1="Ок")

    def __init__(self):

        

        super().__init__()

        

        customtkinter.set_appearance_mode("System")  # Modes: "System" (standard), "Dark", "Light"

        self.geometry("670x150+100+100")

        self.help = CTkLabel (master = self,text = 'Вставте посилання на Youtube відео')

        self.help.place(x=20, y=10)

        self.project = StringVar()

        self.insert = CTkEntry(master = self, textvariable = self.project, width=400)

        self.insert.place(x=20, y=40)

        self.radio_var = IntVar(value=0)

        self.radiobutton_1 = customtkinter.CTkRadioButton(self, text="Відео",

                                             command=self.addType, variable= self.radio_var, value=1)

        self.radiobutton_2 = customtkinter.CTkRadioButton(self, text="Аудіо",

                                             command=self.addType, variable= self.radio_var, value=2)

        self.radiobutton_1.place(x=450, y=40)

        self.radiobutton_2.place(x=450, y=80)

        self.btn5 = CTkButton(master = self, text = "Завантажити", command = self.download)

        self.btn5.place(x=20, y=100)

        self.info = CTkLabel (master = self, text = "")

        self.info.place(x=20, y=70)

        

        

        self.protocol("WM_DELETE_WINDOW",self.on_closing)

    

if __name__=="__main__":

      


    yo = YoDowloader()

    

    yo.mainloop()


Коментарі