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 :

Creation de bouton dynamiquement


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut Creation de bouton dynamiquement
    Salut a tous,
    Je debute pas mal en python et je me retrouve devant ce que je pense etre un probleme classique.
    Voici la bete
    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
     
    import os
    import Tkinter
    import tkFileDialog
    import sys
    from Tkinter import *
     
    aFiles = []
    sFolder = r'C:\Python25\perso'
     
    for (path, dirs, files) in os.walk(sFolder):
    	for file in files :
    		aFileSplit = os.path.join(file).split(".")
    		sBuffer = aFiles.append(file)
     
    class Application:
     
    	def __init__(self, root):
     
    		root.title("LGT") 
    		root.geometry("125x275")
    		i = 0
    		for file in aFiles :
    			iIndex = aFiles.index(file)
    			sSplit = file.split(".")
    			if sSplit[-1] == "txt":
    				sFile = "%s\\%s" % (sFolder,file)
    				sCommand = lambda : os.startfile(sFile)
    				sButton = "Button%d" % iIndex
    				oframe = Frame(root)
    				self.sButton = Button(oframe, text=sSplit[0], command = sCommand)
    				self.sButton.pack(side=LEFT)
    				oframe.pack()
    toplevel_window = Tk()
    app = Application(toplevel_window)
    toplevel_window.mainloop()
    Le but de ce petit script est de creer autant de boutons qu il y a de fichiers txt dans le repertoire cible. Et de lier chaque bouton a son fichier. Mon probleme est que tous les boutons se retrouvent lie au dernier fichier txt appelle.

    j'aurais besoin d aide svp

    Kender

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Ton problème se situe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sCommand = lambda : os.startfile(sFile)
    Il faut mettre un argument à lambda sinon comme tu le dis "tous les boutons se retrouvent lie au dernier fichier txt appelle".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sCommand = lambda f=sFile: os.startfile(f)
    Il y a plusieurs chose étrange dans ton code.
    d'abord le sBuffer = aFiles.append(file).
    La méthode retourne None, donc ça n'a pas d'intérêt.
    Ensuite j'ai cru comprendre que tu voulais lister uniquement les fichiers dans le répertoire donnée et pas dans d'éventuel sous-répertoire vu que tu fais sFile = "%s\\%s" % (sFolder,file), donc la méthode "walk" n'a pas vraiment d'intérêt ici, il vaut mieux utiliser "glob".
    J'ai repris ton code en le simplifiant:

    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
     
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
    import os
    import glob
    from Tkinter import *
     
    aFiles = []
    sFolder = r'C:\Python25\perso\*'
    #récupère la liste des fichiers et dossier du répertoire
    listDirFile = glob.glob(sFolder)
    for file in listDirFile:
        #si c'est un fichier et qu'il l'extention .txt
        if os.path.isfile(file) and os.path.splitext(file)[1] == ".txt":
            #on l'ajoute à la liste
            aFiles.append(file)
     
    class Application:
        def __init__(self, root):
            root.title("LGT") 
            root.geometry("125x275")
            for file in aFiles :
                #la commande du bouton
                sCommand = lambda f = file: os.startfile(f)
                #le texte du bouton. le [:-4] sert à enlever le .txt
                textButton = os.path.basename(file)[:-4]
                oframe = Frame(root)
                self.sButton = Button(oframe, text = textButton, command = sCommand)
                self.sButton.pack(side=LEFT)
                oframe.pack()
     
    toplevel_window = Tk()
    app = Application(toplevel_window)
    toplevel_window.mainloop()

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut
    Oki merci beaucoup nyko.
    Je connaissais pas la methode Glob, c'est interessant pour eviter d aller trop loin dans l'arborescence.

    Je regarde ca.

    Kender

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    En fait il y a beaucoup mieux. Je ne devais pas être bien réveillé hier:

    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
     
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
    import os
    import glob
    from Tkinter import *
     
    aFiles = glob.glob(r'C:\Python25\perso\*.txt')
     
    class Application:
        def __init__(self, root):
            root.title("LGT") 
            root.geometry("125x275")
            for file in aFiles :
                #la commande du bouton
                sCommand = lambda f = file: os.startfile(f)
                #le texte du bouton. le [:-4] sert à enlever le .txt
                textButton = os.path.basename(file)[:-4]
                oframe = Frame(root)
                self.sButton = Button(oframe, text = textButton, command = sCommand)
                self.sButton.pack(side=LEFT)
                oframe.pack()
     
    toplevel_window = Tk()
    app = Application(toplevel_window)
    toplevel_window.mainloop()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Creation de bouton dynamique
    Par chnouwa832 dans le forum Composants
    Réponses: 2
    Dernier message: 07/11/2010, 13h05
  2. [XL-2000] Creation bouton dynamique Erreur pour 1 feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/07/2009, 16h12
  3. creation fenetres (TForm) dynamiquement
    Par Erzak dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/12/2004, 20h25
  4. Réponses: 2
    Dernier message: 20/01/2004, 14h27
  5. Creation de fiche dynamique
    Par Mouss26 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/07/2002, 07h56

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