Ajout d'une barre de défilement et d'une fonction pour suprimer les vidéos ajouté*

* Attention, il faut ajouter le traitement en arrière plan
This commit is contained in:
Phytacode 2024-11-15 19:08:15 +01:00
parent 29cbb3bfb6
commit be93154128

63
main.py
View File

@ -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("<Configure>", on_frame_configure)
# Ajuster la largeur du Canvas au redimensionnement
MoviesCanva.bind("<Configure>", lambda e: MoviesCanva.itemconfig(canvas_frame, width=e.width))
root.mainloop()