Refresh l'affichage de fichier

Fermé
julienWalker Messages postés 7 Date d'inscription vendredi 4 juin 2021 Statut Membre Dernière intervention 5 juin 2021 - Modifié le 4 juin 2021 à 18:32
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 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


# 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
A voir également:

1 réponse

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
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?
0
julienWalker Messages postés 7 Date d'inscription vendredi 4 juin 2021 Statut Membre Dernière intervention 5 juin 2021
4 juin 2021 à 20:35
je n'ai pas réussi à refresh, c'est pour ca que je demande
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > julienWalker Messages postés 7 Date d'inscription vendredi 4 juin 2021 Statut Membre Dernière intervention 5 juin 2021
4 juin 2021 à 20:52
à quel endroit du programme affiches-tu la liste?
0
julienWalker Messages postés 7 Date d'inscription vendredi 4 juin 2021 Statut Membre Dernière intervention 5 juin 2021 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
4 juin 2021 à 21:09
dans la fonction afficher_fichier.
def afficher_fichier(event):
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > julienWalker Messages postés 7 Date d'inscription vendredi 4 juin 2021 Statut Membre Dernière intervention 5 juin 2021
5 juin 2021 à 13:40
je ne pense pas que cette fonction affiche la liste des fichiers.
0
julienWalker Messages postés 7 Date d'inscription vendredi 4 juin 2021 Statut Membre Dernière intervention 5 juin 2021 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 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
0