Partage
  • Partager sur Facebook
  • Partager sur Twitter

Interface graphyque avec tkinter pour pytube

Sujet résolu
    12 septembre 2020 à 21:01:58

    Bonjour,

    je suis entrains de développer une interface graphique pour télécharger des vidéos avec pytube, mais quand j’exécute mon programme, une erreur se produit que je ne comprend pas.

    mon programme:

    from pytube import YouTube
    from tkinter import *
    
    window = Tk()
    window.title("pytube downloader")
    window.geometry("500x650")
    window.iconbitmap("logo.ico")
    window.config(background='#2D9DC6')
    
    frame = Frame(window, bg='#2D9DC6')
    
    def download_yt():
    	global lien
    	video = YouTube(lien)
    	streams = video.streams.filter(progressive=True).order_by('resolution').desc()
    	streams[0].download("C:/Users/Root/Videos")
    
    label_title = Label(frame, text="Python YouTube downloader", font=("Calibri", 30), bg='#2D9DC6', fg='white')
    label_title.pack()
    
    label_subtitle = Label(frame, text="entré le lien de la vidéo", font=("Calibri", 20), bg='#2D9DC6', fg='white')
    label_subtitle.pack()
    
    url_entry = Entry(frame, font=("Calibri", 15), bg='#2D9DC6', fg='white')
    url_entry.pack()
    lien = url_entry.get()
    
    download = Button(frame, text="download", font=("Calibri", 20), bg='white', fg='#2D9DC6', command=download_yt)
    download.pack()
    
    
    frame.pack(expand=YES)
    window.mainloop()

    l'erreur:

    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\Root\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__in
    it__.py", line 1883, in __call__
        return self.func(*args)
      File "C:\Users\Root\Desktop\Prog\Python\download-yt.py", line 14, in download_
    yt
        video = YouTube(lien)
      File "C:\Users\Root\AppData\Local\Programs\Python\Python38-32\lib\site-package
    s\pytube\__main__.py", line 77, in __init__
        self.video_id = extract.video_id(url)
      File "C:\Users\Root\AppData\Local\Programs\Python\Python38-32\lib\site-package
    s\pytube\extract.py", line 80, in video_id
        return regex_search(r"(?:v=|\/)([0-9A-Za-z_-]{11}).*", url, group=1)
      File "C:\Users\Root\AppData\Local\Programs\Python\Python38-32\lib\site-package
    s\pytube\helpers.py", line 34, in regex_search
        raise RegexMatchError(caller="regex_search", pattern=pattern)
    pytube.exceptions.RegexMatchError: regex_search: could not find match for (?:v=|
    \/)([0-9A-Za-z_-]{11}).*




    • Partager sur Facebook
    • Partager sur Twitter
      13 septembre 2020 à 0:40:41

      Ça signifie que le lien donné n'est pas un lien youtube.
      Sinon essaye de ne pas utiliser global. Pour faire propre avec tkinter il faut faire des classes.
      • Partager sur Facebook
      • Partager sur Twitter
        13 septembre 2020 à 10:17:24

        voila, mais j'ai une erreur: "TabError: inconsistent use of tabs and spaces in indentation"

        mon code:

        from pytube import YouTube
        from tkinter import *
        
        class Interface(Frame):
            
            """Notre fenêtre principale.
            Tous les widgets sont stockés comme attributs de cette fenêtre."""
            
            def __init__(self, fenetre, **kwargs):
                Frame.__init__(self, fenetre, **kwargs)
                self.pack(fill=BOTH)
                self.lien = ""
        
                # Création de nos widgets
                self.title = Label(self, text="Python YouTube downloader")
        		self.title.pack()
        
        		self.subtitle = Label(self, text="entré le lien de la vidéo")
        		self.subtitle.pack()
        
        		self.url_entry = Entry(self, font=("Calibri", 15), bg='#2D9DC6', fg='white')
        		self.url_entry.pack(side="left")
        		self.lien = url_entry.get()
        
        		self.download = Button(self, text="download", font=("Calibri", 20), bg='white', fg='#2D9DC6', command=download_yt)
        		self.download.pack(side="right")
        
            def download_yt(self):
        	video = YouTube(self.lien)
        	streams = video.streams.filter(progressive=True).order_by('resolution').desc()
        	streams[0].download("C:/Users/Root/Videos")
        
        fenetre = Tk()
        interface = Interface(fenetre)
        interface.mainloop()
        



        • Partager sur Facebook
        • Partager sur Twitter
          13 septembre 2020 à 11:49:52

          Il suffit de lire le message d'erreur... Tu as mélangé des espaces et des tabulations dans l'indentation.
          • Partager sur Facebook
          • Partager sur Twitter
            16 août 2022 à 17:19:28

            Salut à toi, je pense que tu as déjà trouver la solution à ton problème depuis le temps, mais voici la correction de ton code.

            from pytube import YouTube
            from tkinter import *

            fenetre = Tk()

            class Interface(Frame):
            """Notre fenêtre principale.
            Tous les widgets sont stockés comme attributs de cette fenêtre."""

            def __init__(self, fenetre, **kwargs):
            Frame.__init__(self, fenetre, **kwargs)
            self.pack(fill=BOTH)
            self.lien = ""

            # Création de nos widgets
            self.title = Label(self, text="Python YouTube downloader")
            self.title.pack()

            self.subtitle = Label(self, text="entré le lien de la vidéo")
            self.subtitle.pack()

            def download_yt():
            video = YouTube(self.url_entry.get())
            streams = video.streams.get_by_itag(251)
            streams.download()

            self.url_entry = Entry(self, font=("Calibri", 15), bg='#2D9DC6', fg='white')
            self.url_entry.pack(side="left")
            #lien = str(url_entry.get())

            self.download = Button(self, text="download", font=("Calibri", 20), bg='white', fg='#2D9DC6',
            command=download_yt)
            self.download.pack(side="right")


            interface = Interface(fenetre)
            interface.mainloop()

            #video.streams.filter(progressive=True).order_by('resolution').desc()
            • Partager sur Facebook
            • Partager sur Twitter

            Interface graphyque avec tkinter pour pytube

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown