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 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
| import os, re
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
from tkinter import filedialog
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()))
# récupérer un élément cliqué dans une Listbox
def clic(evt):
global ext
widget = evt.widget
i=widget.curselection() ## Récupération de l'index de l'élément sélectionné
ext = l_box.get(i) ## On retourne l'élément (un string) sélectionné
# init variables globales
rep = "/"
mot = "acide"
ext=".tex"
def recherche(chaine="acide", path='/', extension=".tex"):
affichage_texte.delete("1.0", tk.END)
"""recherche un mot dans le contenu des fichiers"""
cpt = 0
for root, directories, files in os.walk(path):
for file in files:
if file.endswith(extension) and file.endswith(extension) != '.pdf':
try:
f = open(os.path.join(root,file), 'r',encoding='utf-8').read()
if chaine.lower() in f.lower():
# on insère le nouveau contenu texte du fichier
affichage_texte.insert("1.0", os.path.join(root,file)+"\n")
cpt = cpt + 1
except UnicodeDecodeError:
try:
f = open(os.path.join(root,file), 'r',encoding='latin-1').read()
if chaine.lower() in f.lower():
# on insère le nouveau contenu texte du fichier
affichage_texte.insert("1.0", os.path.join(root,file)+"\n")
cpt = cpt + 1
except UnicodeDecodeError:
# on insère le nouveau contenu texte du fichier
affichage_texte.insert("Pb d'encodage : ", os.path.join(root,file)+"\n")
pass
regex = re.compile(mot)
# fenêtre principale
fenetre = tk.Tk()
fenetre.title("Recherche d'un mot")
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.W)
# 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="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=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=0, sticky=tk.EW)
# listbox extension
l_box = tk.Listbox(fenetre)
l_box.grid(row=2,column=0,sticky=tk.E)
l_box.bind('<ButtonRelease-1>',clic) # on associe l'évènement "relachement du bouton gauche la souris" à la listbox
liste_ext = [".csv", ".doc", ".docx", ".py", ".tex", ".txt", ".xls", ".xlsx" ,".*"]
for name in liste_ext:
l_box.insert('end', name)
# fenetre saisie mot
value = tk.StringVar(fenetre)
value.set("recherche")
entree = tk.Entry(fenetre, textvariable=value, width=30)
entree.grid(row=0,column=3,sticky=tk.E)
mot=entree.get()
# 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=tk.NS+tk.EW)
# on ajoute un bouton 'recherche_mot'
tk.Button(
conteneur_affichage,
text="Recherche mot dans le contenu",
command=lambda: recherche(mot,rep,ext)
).grid(row=2, column=6, sticky=tk.E)
# on ajoute un bouton 'quitter'
tk.Button(
conteneur_affichage,
text="Quitter",
command=fenetre.destroy
).grid(row=6, column=6, sticky=tk.E)
# 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=5, pady=5)
# on rend la fenêtre redimensionnable
fenetre.rowconfigure(0, weight=1)
fenetre.columnconfigure(1, weight=1)
remplir_liste("./")
print(rep,ext,mot)
# pour finir
# on lance la boucle événementielle principale
fenetre.mainloop() |
Partager