Refresh l'affichage de fichier

Signaler
Messages postés
7
Date d'inscription
vendredi 4 juin 2021
Statut
Membre
Dernière intervention
5 juin 2021
-
Messages postés
15960
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juin 2021
-
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


# end def

# début du programme

# init variables globales
dossier_actuel = ""
motif_fichiers = "*.txt"

# 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()


Configuration: Windows / Chrome 91.0.4472.77

1 réponse

Messages postés
15960
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juin 2021
866
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?
Messages postés
15960
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juin 2021
866 >
Messages postés
7
Date d'inscription
vendredi 4 juin 2021
Statut
Membre
Dernière intervention
5 juin 2021

je pense qu'il suffit, après avoir supprimé un fichier, d'appeler la fonction qui affiche la liste.
Messages postés
7
Date d'inscription
vendredi 4 juin 2021
Statut
Membre
Dernière intervention
5 juin 2021
>
Messages postés
15960
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juin 2021

liste_fichiers = Listbox(conteneur_fichiers, listvariable=cvar_fichiers)
ca doit être cette ligne qui permet d'afficher les fichiers
Messages postés
15960
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juin 2021
866 >
Messages postés
7
Date d'inscription
vendredi 4 juin 2021
Statut
Membre
Dernière intervention
5 juin 2021

as-tu écrit ce programme? le comprends-tu?
Messages postés
7
Date d'inscription
vendredi 4 juin 2021
Statut
Membre
Dernière intervention
5 juin 2021
>
Messages postés
15960
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juin 2021

J'ai écrit une partie, mais pas tout c'est un projet en équipe, mais on est bloqué sur le refresh de l'affichage.
Si tu as une solution ca serai sympa de ta part de m'envoyer le code.
Messages postés
15960
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juin 2021
866 >
Messages postés
7
Date d'inscription
vendredi 4 juin 2021
Statut
Membre
Dernière intervention
5 juin 2021

que penses-tu que signifie le commentaire "remplit la liste de fichiers à partir de l'emplacement"?