import os import glob from tkinter import * from tkinter.scrolledtext import ScrolledText from tkinter import filedialog 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" motif_fichiers = "*" # on commence par établir l'interface graphique (GUI) # on crée la fenêtre principale fenetre = Tk() fenetre.title("Calcul de réflectivité") # 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 dossier :" ).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("", afficher_fichier) # 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="Veuillez sélectionner un fichier :" ).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 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 démarrer avec un dossier par défaut, # ajoutez simplement ceci : # je veux... #remplir_liste(r"C:\Python34\Scripts\Recettes") remplir_liste("/Users/clement/database/main") # pour finir # on lance la boucle événementielle principale fenetre.mainloop()