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
| import os
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
from tkinter import filedialog
cpt = ""
def choisir_dossier ():
global rep
"ouvre un dialogue de sélection de répertoire"
rep = filedialog.askdirectory(
title="Sélectionnez un répertoire",
mustexist=True,
parent=fenetre,
)
if rep:
# print(rep)
remplir_liste(rep)
def remplir_liste (dossier):
cvar_fichiers.set(os.listdir(dossier))
def afficher_fichier (event):
os.path.join(rep,liste_fichiers.get(liste_fichiers.curselection()))
ext=".tex"
def recherche_titre(chaine, path, extension):
global cpt
"""recherche un mot dans le nom des fichiers"""
affichage_texte.delete('1.0',tk.END)
affichage_texte.tag_config('red',foreground='red')
affichage_texte.insert("1.0", "Démarrage de la recherche \n",'red')
cpt = 0
for root, directories, files in os.walk(path):
for file in files:
if file.endswith(extension):
try:
if chaine.lower() in file.lower():
affichage_texte.insert("insert", os.path.join(root,file)+"\n")
cpt = cpt + 1
except UnicodeDecodeError:
affichage_texte.insert("insert","Pb d'encodage :", os.path.join(root,file))
pass
affichage_texte.insert("insert", "total de %s fichiers %s \n" %(str(cpt),extension),'red')
# print(mot, "présent dans le nom de", cpt, "fichiers", extension)
# fenêtre principale
fenetre = tk.Tk()
fenetre.title("Compilation de fichiers .tex")
conteneur_fichiers = tk.Frame(fenetre)
# conteneur redimensionnable
conteneur_fichiers.columnconfigure(0, weight=1)
conteneur_fichiers.rowconfigure(1, weight=1)
# étiquette texte dans ce conteneur
tk.Label(
conteneur_fichiers,
text="--------------------------------"
).grid(row=0, column=0, sticky=tk.EW)
# liste des fichiers
cvar_fichiers = tk.StringVar()
liste_fichiers = tk.Listbox(conteneur_fichiers, listvariable=cvar_fichiers)
liste_fichiers.grid(row=1, column=0, sticky=tk.NS+tk.EW)
# avec sa scrollbar
vbar_fichiers = tk.Scrollbar(conteneur_fichiers, orient=tk.VERTICAL)
vbar_fichiers.grid(row=1, column=1, sticky=tk.NS+tk.EW)
# connection de la scrollbar à la liste des fichiers
liste_fichiers.configure(yscrollcommand=vbar_fichiers.set)
vbar_fichiers.configure(command=liste_fichiers.yview)
# affichage des dossiers sur simple clic
# sur un dossier de la liste
liste_fichiers.bind("<ButtonRelease-1>", afficher_fichier)
# bouton de type 'Parcourir'
tk.Button(
conteneur_fichiers,
text="Cliquer ICI pour sélectionner un dossier",
command=choisir_dossier,
).grid(row=0, 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=tk.NS+tk.EW, padx=5, pady=5)
# on crée un conteneur pour l'affichage
conteneur_affichage = tk.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
tk.Label(
conteneur_affichage,
text="Présent ici : "
).grid(row=0, column=1, sticky=tk.EW)
label_rech=tk.Label(fenetre,text="A rechercher")
label_rech.grid(row=4,column=1,sticky=tk.NS+tk.EW)
mot = tk.StringVar(fenetre)
mot.set("")
entree = tk.Entry(fenetre, textvariable=mot, width=30)
entree.grid(row=5,column=1,sticky=tk.NS+tk.EW)
# on crée la zone d'affichage de texte
affichage_texte = ScrolledText(
conteneur_affichage,
bg="white",
fg="blue",
font="sans 9 bold",
height=25,
width=100,
)
affichage_texte.grid(row=0, column=2, sticky=tk.NS+tk.EW)
# on ajoute un bouton 'recherche_mot titre'
tk.Button(
conteneur_affichage,
text="Recherche mot dans les noms de fichier",
command=lambda: recherche_titre(mot.get(),rep,ext)
).grid(row=8, column=1, sticky=tk.NS+tk.EW)
# on ajoute un bouton 'quitter'
tk.Button(
conteneur_affichage,
text="Quitter",
command=fenetre.destroy
).grid(row=9, column=1, sticky=tk.NS+tk.EW)
# on place le conteneur dans la fenêtre principale
# avec des marges padx et pady
conteneur_affichage.grid(row=0, column=1, sticky=tk.NS+tk.EW, padx=3, pady=3)
# on rend la fenêtre redimensionnable
fenetre.rowconfigure(0, weight=1)
fenetre.columnconfigure(1, weight=1)
remplir_liste("./")
# pour finir
# on lance la boucle événementielle principale
fenetre.mainloop() |
Partager