julienWalker
Messages postés7Date d'inscriptionvendredi 4 juin 2021StatutMembreDernière intervention 5 juin 2021
-
Modifié le 4 juin 2021 à 18:32
yg_be
Messages postés23405Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention20 décembre 2024
-
6 juin 2021 à 12:20
Bonjour,
Mon programme sert à afficher des fichiers .txt et à les supprimer.
Le problème est que, quand je supprime un fichier l'affichage des fichiers ne se rafraichit pas, donc on voit encore le fichier qui à été supprimer.
Je cherche donc un moyen pour que l'affichage ce rafraichit après avoir supprimer un fichier.
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", 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))
def Supprimer(): global fichier fichier = normaliser(dossier_actuel, liste_fichiers.get(liste_fichiers.curselection() or 0)) if os.path.isfile(fichier): os.remove(fichier)
else: print("Fichier introuvable")
def afficher_fichier(event): "affiche le contenu du fichier sélectionné" # on récupère le nom du fichier global 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
# on commence par établir l'interface graphique (GUI) # on crée la fenêtre principale fenetre = Tk() fenetre.title("Mes séquences") # 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 une séquence :").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="Ma séquence :").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) Button(fenetre, text="Supprimer", command=Supprimer).grid(row=2, column=0, sticky=E)
# je veux... remplir_liste(r"C:\Users\Mélanie\Desktop\test refresh")
# pour finir # on lance la boucle événementielle principale fenetre.mainloop()
yg_be
Messages postés23405Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention20 décembre 2024Ambassadeur1 557 4 juin 2021 à 19:24
bonjour,
après une analyse rapide de ton code, je ne vois aucune tentative de rafraîchissement de la liste après une suppression.
dans quelle partie du code fais-tu cela?
julienWalker
Messages postés7Date d'inscriptionvendredi 4 juin 2021StatutMembreDernière intervention 5 juin 2021 4 juin 2021 à 20:35
je n'ai pas réussi à refresh, c'est pour ca que je demande
yg_be
Messages postés23405Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention20 décembre 20241 557
>
julienWalker
Messages postés7Date d'inscriptionvendredi 4 juin 2021StatutMembreDernière intervention 5 juin 2021 4 juin 2021 à 20:52
à quel endroit du programme affiches-tu la liste?
julienWalker
Messages postés7Date d'inscriptionvendredi 4 juin 2021StatutMembreDernière intervention 5 juin 2021
>
yg_be
Messages postés23405Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention20 décembre 2024 4 juin 2021 à 21:09
dans la fonction afficher_fichier.
def afficher_fichier(event):
yg_be
Messages postés23405Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention20 décembre 20241 557
>
julienWalker
Messages postés7Date d'inscriptionvendredi 4 juin 2021StatutMembreDernière intervention 5 juin 2021 5 juin 2021 à 13:40
je ne pense pas que cette fonction affiche la liste des fichiers.
julienWalker
Messages postés7Date d'inscriptionvendredi 4 juin 2021StatutMembreDernière intervention 5 juin 2021
>
yg_be
Messages postés23405Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention20 décembre 2024 Modifié le 5 juin 2021 à 14:23
si, et le but est de trouver un moyen de refresh l'affichage des fichiers txt, lance le programme tu comprendras
4 juin 2021 à 20:35
4 juin 2021 à 20:52
4 juin 2021 à 21:09
def afficher_fichier(event):
5 juin 2021 à 13:40
Modifié le 5 juin 2021 à 14:23