IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

[Tkinter] Afficher la liste des fichiers d'un dossier dans une fenêtre.


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 9
    Par défaut [Tkinter] Afficher la liste des fichiers d'un dossier dans une fenêtre.
    Bonjour,
    Je débute en Python.
    Je voudrais, après avoir lu un répertoire contenant des fichiers .txt, afficher dans une fenêtre la liste de ces fichiers.
    Pouvez-vous m'aider ( avec éventuellement des exemples ). Je n'ai rien trouvé pour le moment.
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par niduab Voir le message
    Bonjour,
    Je débute en Python.
    Je voudrais, après avoir lu un répertoire contenant des fichiers .txt, afficher dans une fenêtre la liste de ces fichiers.
    Pouvez-vous m'aider ( avec éventuellement des exemples ). Je n'ai rien trouvé pour le moment.
    Merci
    Bonjour,

    Avez-vous du code pour nous montrer où vous en êtes dans vos recherches ?

    Si vous ne savez pas par où commencer :

    documentation officielle sur les modules os, os.path :

    https://docs.python.org/3/library/os...nd-directories

    https://docs.python.org/3/library/os.path.html

    documentation officielle Tkinter pour les fenêtres graphiques :

    http://infohost.nmt.edu/tcc/help/pub...web/index.html

    D'après votre demande, le mieux reste encore d'acquérir les premières connaissances par vous-même, vous irez beaucoup plus vite une fois les bases assimilées.

    Écrivez au moins le code qui permet d'obtenir une liste de fichiers *.txt d'un dossier donné et ensuite je vous montrerais comment on écrit la partie GUI (Graphical User Interface), c'est-à-dire les fenêtres graphiques et tout ce qui est beaucoup moins évident à assimiler au départ.

    @+.

  3. #3
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 9
    Par défaut
    Bonjour,
    Merci pour votre aide. Ci-dessous le code de mon 1° programme ( vraiment basique ), qui affiche une fenêtre avec 3 options:
    1 liste des recettes
    2 créer une recette
    3 quitter
    Lorsque je clique sur "liste des recettes", j'ai une fenêtre blanche qui s'ouvre.
    Comment récupérer la liste des fichiers pour les afficher dans la fénêtre ?
    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    from tkinter import *
    import os
    def creer():
        print("creer")
     
    def liste():
        Bliste.forget()
        Bcreer.forget()
        Bquitter.forget()   
        for filename in os.listdir("C:\Python34\Scripts\Recettes"):
            print(filename)
     
    fen = Tk()    
    fen.title("Menu")
     
    Bliste = Button(fen, text = "Liste des recettes ", bg = "green", font ="Arial 20 italic",relief = RIDGE ,borderwidth = 10, command = liste)
    Bliste.pack(expand = TRUE,fill = BOTH)#bouton liste des recettes
     
    Bcreer = Button(fen, text = "Créer une recette ", bg = "green", font ="Arial 20 italic",relief = RIDGE ,borderwidth = 10, command = creer)
    Bcreer.pack(expand = TRUE,fill = BOTH)   #bouton creer recette
     
    Bquitter = Button(fen, text = "Quitter", bg = "red", font ="Arial 20 italic",relief = RIDGE ,borderwidth = 10, command = fen.destroy)
    Bquitter.pack(expand = TRUE,fill = BOTH)   #bouton quitter
     
    fen.mainloop()

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si tu parles de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        for filename in os.listdir("C:\Python34\Scripts\Recettes"):
            print(filename)
    c'est dans le terminal que Python print la liste, pas dans le fenêtre TK. Pour cela il faut y ajouter un widget adéquat et y envoyer la liste sous forme de texte.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Salut,

    Pour afficher une liste de... on peut utiliser le widget Text et une logique proche de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import tkinter as tk
    import os
     
    def do_afficher():
        for s in os.listdir():
            display.insert('end', s + '\n')
     
    def create_display(app):
     
        display = tk.Text(app)
        return display
     
    if __name__ == '__main__':
        app = tk.Tk()
     
        display = create_display(app)
        btn = tk.Button(app, text='afficher', command=do_afficher)
        btn.pack()
        display.pack()
     
        app.mainloop()
    Après tout dépend des interactions que l'utilisateur aura avec... pour savoir si Text est approprié plutôt que Listbox ou autre...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 9
    Par défaut
    Bonjour,
    Et merci pour vos réponses.
    Ce que je voudrais c'est afficher la liste dans un widget ListBox, afin de pouvoir sélectionner un fichier et l'afficher.
    Et c'est ça que je n'arrive pas à faire. Je vais m'inspirer de vos exemples, afin d'avancer. Mais bien sur je suis preneur d'autres exemples si vous en avez.
    Encore merci.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par niduab Voir le message
    Bonjour,
    Et merci pour vos réponses.
    Ce que je voudrais c'est afficher la liste dans un widget ListBox, afin de pouvoir sélectionner un fichier et l'afficher.
    Et c'est ça que je n'arrive pas à faire. Je vais m'inspirer de vos exemples, afin d'avancer. Mais bien sur je suis preneur d'autres exemples si vous en avez.
    Encore merci.
    Bonjour,

    Voici un exemple commenté pour vous aider à comprendre comment tout cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import os
    import glob
    from tkinter import *
    from tkinter.scrolledtext import ScrolledText
    from tkinter import filedialog
     
    # zone de définition de fonctions
     
    def choisir_dossier ():
        "ouvre un dialogue de sélection de répertoire"
        # voir http://tkinter.unpythonic.net/wiki/tkFileDialog
        dossier = filedialog.askdirectory(
            title="Sélectionnez un dossier de recettes de cuisine",
            mustexist=True,
            parent=fenetre,
        )
        # un dossier a vraiment été sélectionné ?
        if dossier:
            # on remplit la liste de fichiers
            remplir_liste(dossier)
        # end if
    # end def
     
    def remplir_liste (dossier):
        """
            remplit la liste de fichiers à partir de l'emplacement
            @dossier fourni en paramètre de fonction;
        """
        # init globales
        global dossier_actuel
        # on conserve le dossier en cours de traitement
        dossier_actuel = dossier
        # on récupère la liste des fichiers
        _liste_fichiers = glob.glob(normaliser(dossier, motif_fichiers))
        # on met à jour la listbox à travers la variable de contrôle
        cvar_fichiers.set(" ".join(map(os.path.basename, _liste_fichiers)))
    # end def
     
    def normaliser (chemin, *args):
        "met un chemin de fichier en conformité avec l'OS utilisé"
        return os.path.normpath(os.path.join(chemin, *args))
    # end def
     
    def afficher_fichier (event):
        "affiche le contenu du fichier sélectionné"
        # on récupère le nom du fichier
        fichier = normaliser(
            dossier_actuel,
            liste_fichiers.get(liste_fichiers.curselection() or 0)
        )
        # est-ce réellement un fichier ?
        if os.path.isfile(fichier):
            # oui, on peut l'ouvrir
            with open(fichier) as file_in:
                # on efface d'abord la zone de texte
                affichage_texte.delete("1.0", END)
                # on insère le nouveau contenu texte du fichier
                affichage_texte.insert("1.0", file_in.read())
            # end with
        # end if
    # end def
     
    # début du programme
     
    # init variables globales
    dossier_actuel = ""
    motif_fichiers = "*.txt"
     
    # on commence par établir l'interface graphique (GUI)
    # on crée la fenêtre principale
    fenetre = Tk()
    fenetre.title("Mon livre de recettes")
    # SVP, NE FORCEZ PAS LA GÉOMÉTRIE de la fenêtre /!\
    # elle va s'adapter toute seule...
    #~ fenetre.geometry("1000x800") --> c'est NON !
    # d'autant plus qu'elle sera REDIMENSIONNABLE ensuite
    # on ajoute des composants graphiques à la fenêtre principale
    # on crée un conteneur pour la gestion des fichiers
    conteneur_fichiers = Frame(fenetre)
    # on rend le conteneur redimensionnable
    conteneur_fichiers.columnconfigure(0, weight=1)
    conteneur_fichiers.rowconfigure(1, weight=1)
    # on crée une étiquette texte dans ce conteneur
    Label(
        conteneur_fichiers,
        text="Veuillez sélectionner un fichier :"
    ).grid(row=0, column=0, sticky=EW)
    # on crée la liste des fichiers
    cvar_fichiers = StringVar()
    liste_fichiers = Listbox(conteneur_fichiers, listvariable=cvar_fichiers)
    liste_fichiers.grid(row=1, column=0, sticky=NS+EW)
    # avec sa scrollbar
    vbar_fichiers = Scrollbar(conteneur_fichiers, orient=VERTICAL)
    vbar_fichiers.grid(row=1, column=1, sticky=NS+W)
    # on connecte la scrollbar à la liste des fichiers
    liste_fichiers.configure(yscrollcommand=vbar_fichiers.set)
    vbar_fichiers.configure(command=liste_fichiers.yview)
    # on va gérer l'affichage des recettes sur simple clic
    # sur un fichier de la liste
    liste_fichiers.bind("<ButtonRelease-1>", afficher_fichier)
    # on crée un bouton de type 'Parcourir'
    Button(
        conteneur_fichiers,
        text="Sélectionner un dossier",
        command=choisir_dossier,
    ).grid(row=2, column=0)
    # on place le conteneur dans la fenêtre principale
    # avec des marges padx et pady
    conteneur_fichiers.grid(row=0, column=0, sticky=NS+EW, padx=5, pady=5)
    # on crée un conteneur pour l'affichage
    conteneur_affichage = Frame(fenetre)
    # on rend le conteneur redimensionnable
    conteneur_affichage.columnconfigure(0, weight=1)
    conteneur_affichage.rowconfigure(1, weight=1)
    # on crée une étiquette texte dans ce conteneur
    Label(
        conteneur_affichage,
        text="Recette du jour :"
    ).grid(row=0, column=0, sticky=EW)
    # on crée la zone d'affichage de texte
    affichage_texte = ScrolledText(
        conteneur_affichage,
        bg="white",
        fg="blue",
        font="sans 12 bold",
        height=10,
        width=20,
    )
    affichage_texte.grid(row=1, column=0, sticky=NS+EW)
    # on ajoute un bouton 'quitter'
    Button(
        conteneur_affichage,
        text="Quitter",
        command=fenetre.destroy
    ).grid(row=2, column=0, sticky=E)
    # on place le conteneur dans la fenêtre principale
    # avec des marges padx et pady
    conteneur_affichage.grid(row=0, column=1, sticky=NS+EW, padx=5, pady=5)
    # on rend la fenêtre redimensionnable
    fenetre.rowconfigure(0, weight=1)
    fenetre.columnconfigure(1, weight=1)
    # pour finir
    # on lance la boucle événementielle principale
    fenetre.mainloop()
    Essayez aussi - par la même occasion - de prendre dès à présent de bonnes habitudes en programmation Python (PEP 8) : http://legacy.python.org/dev/peps/pep-0008/

    Ainsi que PEP 0263 : http://legacy.python.org/dev/peps/pep-0263/

    Bon courage.

    @+.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Salut,

    Ce que je voudrais c'est afficher la liste dans un widget ListBox, afin de pouvoir sélectionner un fichier et l'afficher.
    Et c'est ça que je n'arrive pas à faire. Je vais m'inspirer de vos exemples, afin d'avancer. Mais bien sur je suis preneur d'autres exemples si vous en avez.
    Si on remplace Text par Listbox, çà ne change pas la forme du code, juste les détails de ce qu'on fait dans les fonctions appelées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    import tkinter as tk
    import os
     
    def do_afficher():
        display.insert(0, *os.listdir())
     
    def create_display(app):
        display = tk.Listbox(app)
        return display
     
    if __name__ == '__main__':
        app = tk.Tk()
     
        display = create_display(app)
        btn = tk.Button(app, text='afficher', command=do_afficher)
        btn.pack()
        display.pack()
     
        app.mainloop()
    Après faut essayer de décolérer les différentes opérations.
    La liste de fichiers n'est qu'une liste de chaînes de caractères.
    Une fois affichée dans la listbox, comment permettre à l'utilisateur de sélectionner et lancer une action associée à...
    C'est un cas d'utilisation assez classique d'une Listbox.
    En général, vous avez une réponse dans la FAQ: Comment récupérer un élément cliqué dans une Listbox ?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. liste récursive des fichiers d'un dossier dans une liste
    Par identifiant_bidon dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2010, 16h33
  2. récupérer la liste des fichiers d'un dossier dans un fichier texte
    Par mathieu_r dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 26/04/2009, 19h47
  3. Réponses: 1
    Dernier message: 06/02/2009, 17h58
  4. [E-03] ListBox avec liste des fichiers d'un dossier
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/11/2008, 01h43
  5. Réponses: 4
    Dernier message: 11/07/2007, 19h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo