Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupération des entry sur TKINTER

    3 novembre 2022 à 0:22:25

    Bonjour,

    Je suis débutant sur python et je suis en train de découvrir tkinter.

    Pour mettre en pratique les tutos et documents que j'ai pu lire, je cherche à créer un petit programme qui permet de télécharger les musiques des vidéo sur yt.

    Le programme utilise 2 entry:

    - La première est la saisie de l'URL

    - La seconde, la saisie de l'emplacement du dossier dans lequel le téléchargement doit être effectué.

    Le téléchargement est enclenché par l'utilisation d'un bouton.

    Lorsque j'exécute le programme, j'obtiens le message "AttributeError: 'NoneType' object has no attribute 'get'"

    J'ai l'impression que le traitement ne récupère pas les entry. J'ai utilisé la méthode .get() mais je dois mal m'y prendre.

    J'ai regardé sur différents forums mais pour le moment je n'ai pas trouvé de solution. Je sollicite donc votre aide en vous remerciant par avance.

    ## import des modules
    from tkinter import *
    from tkinter import filedialog
    import shutil
    from lxml import html
    import os
    from os import path
    from functools import partial
    from pytube import YouTube
    
    ## Fonctions
    
    def dl_son(*arg):
        global entry_url
        global entry_directory
        dir_output = entry_directory.get()
        url_yt = entry_url.get()
        yt = YouTube(url_yt)
        yt.streams.filter(only_audio=True).first().download(dir_output)
    
    
    ## fenêtre principale
    # Structure
    window = Tk()
    window.title("fenetre_son")               # titre
    window.geometry("800x600")                # dimension au démarrage
    window.minsize(800, 600)                  # taille minimale
    window.maxsize(1080, 720)                 # taille max
    window.config(background='#41B77F')       # coloration de la fenêtre ''#code hexa decimal de la couleur'
    
    # Création d'un frame
    frame = Frame(window,bg='#41B77F')
    
    # Titres
    label_title = Label(frame, text="Music extract", font=("Arial",40),bg='#41B77F',fg='white') 
    label_title.pack(pady=50)                        
    frame.pack(expand=YES)                    
    
    # Champ de l'URL
    label_url = Label(frame, text="ENTRER URL YOUTUBE", font=("Arial",15),bg='#41B77F',fg='white') 
    label_url.pack(pady=5)                        # Affichage du titre
    frame.pack(expand=YES)                        # Permet de centrer les éléments de frame
    url = StringVar()
    entry_url = Entry(frame, textvariable=url).pack(pady=5,fill=X) # Champ de saisie de l'URL
    
    # Champ du fichier en sortie
    label_bouton = Label(frame, text="ENTRER REPERTOIRE", font=("Arial",15),bg='#41B77F',fg='white') 
    label_bouton.pack(pady=5)                        
    directory = StringVar()
    entry_directory = Entry(frame, textvariable=directory).pack(pady=5,fill=X)
    
    # Bouton de téléchargement
    Button(frame, text="MUSIC EXTRACT",command=dl_son).pack(pady=100)
    
    window.mainloop()



    Cordialement

    -
    Edité par Aflatox 3 novembre 2022 à 0:32:45

    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2022 à 0:43:26

      Salut,

      Ce sont les StringVar() qu'il faut récupérer avec url.get() et directory.get()

      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2022 à 0:53:27

        Effectivement, cela fonctionne mieux ainsi.

        Merci beaucoup pour votre aide :)

        • Partager sur Facebook
        • Partager sur Twitter
          3 novembre 2022 à 3:07:47

          Aflatox a écrit:

          Effectivement, cela fonctionne mieux ainsi. [...]

          Bonjour,

          Sujet résolu

          Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

          • Partager sur Facebook
          • Partager sur Twitter
            3 novembre 2022 à 11:30:38

            Sinon pour explication, entry_url et entry_directory récupérent le résultat du pack() fait sur les entry, pas les entry, et comme pack renvoie None, CQFD
            • Partager sur Facebook
            • Partager sur Twitter
              4 novembre 2022 à 5:20:03

              umfred a écrit:

              Sinon pour explication, entry_url et entry_directory récupérent le résultat du pack() fait sur les entry, pas les entry, et comme pack renvoie None, CQFD


              Effectivement, c'est bien de le préciser, car du coup, on perd la référence à l'objet, ce qui peut poser problème si l'on veut modifier les propriétés de l'objet.

              Exemple avec un bouton :

              from tkinter import Tk, Button
              
              def config():
                  but.configure(text="Clicked")
              
              window = Tk()
              
              window.title("Window") 
              window.geometry("300x200")
              but = Button(window, text="Click me...", command=config).pack()
              
              window.mainloop()

              Traceback :

              Exception in Tkinter callback
              Traceback (most recent call last):
                File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
                  return self.func(*args)
                File "Test.py", line 5, in config
                  but.configure(text="Clicked")
              AttributeError: 'NoneType' object has no attribute 'configure'


              Pour éviter cette erreur :

              but = Button(window, text="Click me...", command=config)
              but.pack()




              -
              Edité par Garkam 4 novembre 2022 à 5:22:43

              • Partager sur Facebook
              • Partager sur Twitter

              Récupération des entry sur TKINTER

              × 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