from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.app import App from kivy.uix.popup import Popup from kivy.uix.floatlayout import FloatLayout from kivy.uix.scrollview import ScrollView from pytube import YouTube class Layout(FloatLayout): def __init__(self, **kwargs): super().__init__(**kwargs) self.vids = [] self.label_banner = Label(text='YouTube Downloader', size_hint=(None,None), size=(180,50), pos_hint={'top':0.98, 'center_x':0.5}, font_size=40) self.label_url = Label(text='URL', size_hint=(None,None), size=(180,50), pos_hint={'top':0.87, 'center_x':0.5}) self.txtin_url = TextInput(text='', size_hint=(None,None), size=(620,130), pos_hint={'top':0.81, 'center_x':0.5}) self.label_url = Label(text='URL', size_hint=(None,None), size=(180,50), pos_hint={'top':0.87, 'center_x':0.5}) self.btn_go = Button(text='Go', size_hint=(None,None), size=(180,70), pos_hint={'top':0.68, 'center_x':0.5}, on_release=self.process, on_press=self.wait) self.label_url = Label(text='URL', size_hint=(None,None), size=(180,50), pos_hint={'top':0.87, 'center_x':0.5}) self.popup1 = Popup(title='In-progress',content=Label(text='Please wait\nThis might take\n5 mins'), size_hint=(0.6,0.6), pos_hint={'top':0.75, 'center_x':0.5},auto_dismiss=True) self.popup2 = Popup(title='Done',content=Label(text='Done!'), size_hint=(0.6,0.6), pos_hint={'top':0.75, 'center_x':0.5},auto_dismiss=True) self.popup3 = Popup(title='Error',content=Label(text='Error!'), size_hint=(0.6,0.6), pos_hint={'top':0.75, 'center_x':0.5},auto_dismiss=True) self.txtin_result = TextInput(text='', size_hint=(1,None), height=1050, pos_hint={'top':0.60, 'center_x':0.5}) self.sv = ScrollView(size_hint=(1,None), height=400, pos_hint={'top':0.60,'center_x':0.5}) self.label_vq= Label(text='Stream Quality No:', size_hint=(None,None), size=(180,40), pos_hint={'top':0.25, 'x':0.06}) self.txtin_vq= TextInput(text='', size_hint=(None,None), size=(100,50), pos_hint={'top':0.25, 'x':0.36}) self.label_dp= Label(text='Download path:', size_hint=(None,None), size=(160,40), pos_hint={'top':0.17, 'x':0.04}) self.label_dp2= Label(text='Check C: drive for downloads', size_hint=(None,None), size=(460,120), pos_hint={'top':0.20, 'x':0.31},color=(0,1,0,1)) self.btn_d= Button(text='Download', size_hint=(None,None), size=(200,60), pos_hint={'top':0.08, 'center_x':0.50}, on_press=self.wait2, on_release=self.process2) self.sv.add_widget(self.txtin_result) self.add_widget(self.label_banner) self.add_widget(self.label_url) self.add_widget(self.txtin_url) self.add_widget(self.sv) self.add_widget(self.btn_go) self.add_widget(self.label_vq) self.add_widget(self.txtin_vq) self.add_widget(self.label_dp) self.add_widget(self.label_dp2) self.add_widget(self.btn_d) def process(self, *args): try: yt = YouTube(self.txtin_url.text) items = yt.streams.all() except: self.popup3.open() else: for x in items: self.vids.append(x) self.popup2.open() for vid in self.vids: self.txtin_result.text += str(vid) + '\n' def wait(self, *args): try: if len(self.txtin_url.text) > 0: self.popup1.open() except: self.popup3.open() else: pass def wait2(self, *args): if len(self.txtin_url.text) > 7: self.popup1.open() def process2(self, *args): try: num = self.txtin_vq.text num = int(num) self.vids[num].download() except: self.popup3.open() else: self.vids[num].download() self.popup2.open() class Main(App): def build(self, *args): return Layout() app = Main() app.run()