import yt_dlp from PIL import Image import requests from io import BytesIO from tkinter import * from PIL import Image, ImageTk def add_url(): url = EntryURL.get() ydl_opts = {} with yt_dlp.YoutubeDL(ydl_opts) as ydl: info = ydl.extract_info(url, download=False) title = info.get('title', 'Titre indisponible') subtitlte = info.get('artist', info.get('uploader', 'Artiste indisponible')) + ' · ' + '{:,}'.format(info.get('view_count', 'Nombre de vue indisponible')).replace(',', ' ') + ' vues' thumbnail_url = info.get('thumbnail') response = requests.get(thumbnail_url) image = Image.open(BytesIO(response.content)) width, height = image.size # Calculer les dimensions du carré square_size = min(width, height) # Le carré a la taille de la plus petite dimension (largeur ou hauteur) # Calculer les coordonnées du coin supérieur gauche du carré left = (width - square_size) // 2 top = (height - square_size) // 2 # Calculer les coordonnées du coin inférieur droit du carré right = left + square_size bottom = top + square_size # Découper l'image carrée image = image.crop((left, top, right, bottom)) image.thumbnail((50, 50)) # Création d'un cadre pour contenir chaque élément cadre = Frame(MoviesList) cadre.pack(fill=X, padx=10, pady=5) # Charger l'image et la convertir en PhotoImage pour nter image = ImageTk.PhotoImage(image) image_label = Label(cadre, image=image) image_label.image = image # Garder une référence pour éviter le garbage collection image_label.pack(side=LEFT, padx=5) # Ajouter les textes (texte1 et texte2) texte_frame = Frame(cadre) texte_frame.pack(side=LEFT, padx=10, fill=BOTH, expand=True) label_texte1 = Label(texte_frame, text=title, font=("Arial", 12, "bold")) label_texte1.pack(anchor="w") label_texte2 = Label(texte_frame, text=subtitlte, font=("Arial", 10)) label_texte2.pack(anchor="w") # Ajouter un menu contextuel sur le côté droit menu_button = Menubutton(cadre, text="Suprimer", relief=FLAT) menu_button.pack(side=RIGHT) EntryURL.delete(0,END) # Fenêtre principale root = Tk() root.title("Téléchargeur youtube") root.geometry("400x200") EntryFrame = Frame(root) EntryFrame.pack(fill="x", expand=True, padx=5, pady=2.5) EntryURL = Entry(EntryFrame) EntryURL.pack(side=LEFT, fill="x", expand=True, padx=2.5) EntryButton = Button(EntryFrame, text="Ajouter", command=add_url) EntryButton.pack(side=RIGHT, padx=3.5) MoviesList = LabelFrame(root, text="Vidéo à télécharger", relief=GROOVE) MoviesList.pack(fill="both", expand=True, padx=5, pady=2.5) root.mainloop()