Сначала давайте установим наши библиотеки: kivy и pytube. Чтобы установить их, откройте свой терминал и напишите эти
pip install pytube pip install kivy pip install kivymd
Теперь давайте установим наши библиотеки в код. Мы не собираемся использовать все виджеты в этих библиотеках, поэтому я буду импортировать только часть из них.
from pytube import YouTube from kivymd.uix.relativelayout import MDRelativeLayout from kivymd.app import MDApp from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.image import Image from kivy.uix.button import Button from kivymd.uix.list import OneLineListItem,MDList from kivy.uix.scrollview import ScrollView from kivy.core.window import Window import os as os
Сначала давайте создадим размер нашего окна. Я сделаю 720/600. Но вы можете сделать это, как хотите. Возможно, вам придется внести небольшие коррективы в код, хотя… Также давайте создадим класс и создадим приложение.
Window.size = (720,600) class Yt(MDApp):
Теперь мы хотим сделать функцию. В этой функции у нас будут наши виджеты, такие как кнопки, метки, текстовые вводы и изображения. Виджеты имеют так много разных атрибутов, что вы можете использовать разные атрибуты или изменять их значения.
def build(self): self.icon = "Assets\\1077046.png" layout = MDRelativeLayout(md_bg_color = [0,1,1]) # using with RGB code # size hint means that it makes the size of the widget according to the apps default resolution. Pos_hint makes the same thing with about widget placement. # you can use different images and icons just dont forget to enter their path correctly tly self.img = Image(source='Assets\download-removebg-preview.png',size_hint=(.5,.5),pos_hint={'center_x':0.5,'center_y':0.9}) self.linkinput = TextInput(text="",pos_hint={'center_x':0.5,'center_y':0.65},size_hint=(1,None),height=48,font_size=29,foreground_color=(34/255,139/255,34/255),) self.label = Label(text="Enter the link of the video which you want to download to your device ", pos_hint = {"center_x":0.5,"center_y":0.75},size_hint=(.3,.3),font_size=20,color=(0,100/255,0)) self.button = Button(text="Download",size_hint=(0.15,0.15),pos_hint = {"center_x":0.5,"center_y":0.50},background_color=(34/255,139/255,34/255) # We divide the RGB codes to 255 because kivy only allows values between 0 to 1. self.res_link_input = TextInput(text="",pos_hint = {"center_x":0.1,"center_y":0.1},size_hint=(.2,.1),font_size=40,foreground_color=(34/255,139/255,34/255))
Теперь давайте добавим эти виджеты в наш макет. Это означает, что наше основное приложение
layout.add_widget(self.label) layout.add_widget(self.img) layout.add_widget(self.linkinput) layout.add_widget(self.button) layout.add_widget(self.res_link_input) return layout
Теперь нам нужно получить значение textinput и прикрепить функцию к нашей кнопке. Мы хотим, чтобы кнопка загружала видео по ссылке, которую мы написали в linkinput, когда она нажата. Мы должны создать другую функцию, чтобы сделать это
def OnClicked(self,button): input_value = self.linkinput.text #gets the value from the input res_value = self.res_link_input.text # makes the linkinput value text button.disabled = True # cannot press he button try: youtube_object = YouTube(input_value, use_oauth=True, allow_oauth_cache=True) # Creating the youtube obect youtube_object.streams.filter(res=f"{res_value}p").first().download()# filtering the resolution so we can download which resolution we want self.success = Label(text="Video has been downloaded succesfully ", pos_hint = {"center_x":0.5,"center_y":0.3},size_hint=(.3,.3),font_size=20,color=(0,100/255,0)) except : print("An error has occurred:" )
Теперь давайте создадим основную функцию для запуска приложения:
if __name__ == '__main__': Yt().run()
Окончательный код:
from pytube import YouTube from kivymd.uix.relativelayout import MDRelativeLayout from kivymd.app import MDApp from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.image import Image from kivy.uix.button import Button from kivymd.uix.list import OneLineListItem,MDList from kivy.uix.scrollview import ScrollView from kivy.core.window import Window import os as os try: Window.size = (720,600) class Yt(MDApp): def build(self): self.icon = "Assets\\1077046.png" layout = MDRelativeLayout(md_bg_color = [0,1,1]) self.img = Image(source='Assets\download-removebg-preview.png',size_hint=(.5,.5),pos_hint={'center_x':0.5,'center_y':0.9}) # size hint means that it makes the size of the widget according to the apps default resolution. Pos_hint makes the same thing with about widget placement self.linkinput = TextInput(text="",pos_hint={'center_x':0.5,'center_y':0.65},size_hint=(1,None),height=48,font_size=29,foreground_color=(34/255,139/255,34/255),) self.label = Label(text="Enter the link of the video which you want to download to your device ", pos_hint = {"center_x":0.5,"center_y":0.75},size_hint=(.3,.3),font_size=20,color=(0,100/255,0)) self.button = Button(text="Download",size_hint=(0.15,0.15),pos_hint = {"center_x":0.5,"center_y":0.50},background_color=(34/255,139/255,34/255)) self.button.bind(on_release=self.OnClicked) self.res_link_input = TextInput(text="",pos_hint = {"center_x":0.1,"center_y":0.1},size_hint=(.2,.1),font_size=40,foreground_color=(34/255,139/255,34/255)) layout.add_widget(self.label) layout.add_widget(self.img) layout.add_widget(self.linkinput) layout.add_widget(self.button) layout.add_widget(self.res_link_input) return layout def OnClicked(self,button): input_value = self.linkinput.text res_value = self.res_link_input.text button.disabled = True try: youtube_object = YouTube(input_value, use_oauth=True, allow_oauth_cache=True) youtube_object.streams.filter(res=f"{res_value}p").first().download() self.success = Label(text="Video has been downloaded succesfully ", pos_hint = {"center_x":0.5,"center_y":0.3},size_hint=(.3,.3),font_size=20,color=(0,100/255,0)) except : print("An error has occurred:" ) except: print("there was an error") if __name__ == '__main__': Yt().run()
Окончательный результат будет таким: