From be93154128ac403e13b8b075c82cbddadffe57a5 Mon Sep 17 00:00:00 2001 From: Phytacode Date: Fri, 15 Nov 2024 19:08:15 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20d'une=20barre=20de=20d=C3=A9filement=20?= =?UTF-8?q?et=20d'une=20fonction=20pour=20suprimer=20les=20vid=C3=A9os=20a?= =?UTF-8?q?jout=C3=A9*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Attention, il faut ajouter le traitement en arrière plan --- main.py | 65 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/main.py b/main.py index ae842ae..ff0fc38 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,6 @@ from io import BytesIO from tkinter import * from PIL import Image, ImageTk - def add_url(): url = EntryURL.get() @@ -16,17 +15,20 @@ def add_url(): 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' + 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é + # Découper l'image en un carré centré + square_size = min(width, height) left = (width - square_size) // 2 top = (height - square_size) // 2 @@ -38,17 +40,17 @@ def add_url(): image = image.crop((left, top, right, bottom)) image.thumbnail((50, 50)) - # Création d'un cadre pour contenir chaque élément - cadre = Frame(MoviesList) + # Création d'un cadre pour chaque vidéo + cadre = Frame(scrollable_frame) cadre.pack(fill=X, padx=10, pady=5) - # Charger l'image et la convertir en PhotoImage pour nter + # Charger l'image et l'afficher 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.image = image # Préserver la référence pour éviter le garbage collection image_label.pack(side=LEFT, padx=5) - # Ajouter les textes (texte1 et texte2) + # Ajouter les titres texte_frame = Frame(cadre) texte_frame.pack(side=LEFT, padx=10, fill=BOTH, expand=True) @@ -58,21 +60,21 @@ def add_url(): 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) + # Ajouter un bouton "Supprimer" + menu_button = Button(cadre, text="Supprimer", relief=FLAT, command=cadre.destroy) menu_button.pack(side=RIGHT) - EntryURL.delete(0,END) + # Effacer l'entrée URL + EntryURL.delete(0, END) # Fenêtre principale root = Tk() -root.title("Téléchargeur youtube") -root.geometry("400x200") - +root.title("Téléchargeur YouTube") +root.geometry("1000x500") +# Cadre pour la barre d'URL EntryFrame = Frame(root) -EntryFrame.pack(fill="x", expand=True, padx=5, pady=2.5) +EntryFrame.pack(fill="x", padx=5, pady=2.5) EntryURL = Entry(EntryFrame) EntryURL.pack(side=LEFT, fill="x", expand=True, padx=2.5) @@ -80,9 +82,30 @@ 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) +# LabelFrame pour lister les vidéos +MoviesList = LabelFrame(root, text="Vidéos à télécharger", relief=GROOVE) MoviesList.pack(fill="both", expand=True, padx=5, pady=2.5) +# Canvas pour le défilement +MoviesCanva = Canvas(MoviesList, highlightthickness=0) +MoviesCanva.pack(side="left", fill="both", expand=True) +# Barre de défilement verticale +scrollbar = Scrollbar(MoviesList, orient="vertical", command=MoviesCanva.yview) +scrollbar.pack(side="right", fill="y") +MoviesCanva.configure(yscrollcommand=scrollbar.set) + +# Frame pour les vidéos à l'intérieur du Canvas +scrollable_frame = Frame(MoviesCanva) +canvas_frame = MoviesCanva.create_window((0, 0), window=scrollable_frame, anchor="nw") + +# Ajuster la taille du Canvas en fonction du contenu +def on_frame_configure(event): + MoviesCanva.configure(scrollregion=MoviesCanva.bbox("all")) + +scrollable_frame.bind("", on_frame_configure) + +# Ajuster la largeur du Canvas au redimensionnement +MoviesCanva.bind("", lambda e: MoviesCanva.itemconfig(canvas_frame, width=e.width)) root.mainloop()