OUJOOD.COM
Le module tkinter.filedialog ouvre les boîtes de dialogue natives du système d'exploitation pour sélectionner des fichiers ou des dossiers. L'apparence est celle que l'utilisateur connaît déjà — Explorateur Windows, Finder macOS ou gestionnaire de fichiers Linux selon la plateforme.
Ouvrir un fichier — askopenfilename
import tkinter as tk
from tkinter import filedialog
fenetre = tk.Tk()
fenetre.title("Ouvrir un fichier")
fenetre.geometry("420x200")
def ouvrir_fichier():
chemin = filedialog.askopenfilename(
title="Choisir un fichier",
initialdir="/", # dossier de départ
filetypes=[ # filtres de types
("Fichiers texte", "*.txt"),
("Fichiers CSV", "*.csv"),
("Tous les fichiers", "*.*")
]
)
if chemin: # chaîne vide si l'utilisateur annule
label_chemin.config(text=chemin)
with open(chemin, "r", encoding="utf-8") as f:
contenu = f.read(500) # aperçu des 500 premiers caractères
zone.delete("1.0", tk.END)
zone.insert("1.0", contenu)
tk.Button(fenetre, text="Ouvrir un fichier", command=ouvrir_fichier).pack(pady=10)
label_chemin = tk.Label(fenetre, text="Aucun fichier", fg="#555", wraplength=380)
label_chemin.pack()
zone = tk.Text(fenetre, height=4, width=50, font=("Courier", 9))
zone.pack(padx=10, pady=5)
fenetre.mainloop()
Si l'utilisateur ferme la boîte sans choisir, askopenfilename() retourne une chaîne vide — toujours vérifier avant de traiter le chemin. Le paramètre filetypes est une liste de tuples (description, motif). On peut combiner plusieurs extensions dans un même filtre : ("Images", "*.png *.jpg *.gif").
Ouvrir plusieurs fichiers — askopenfilenames
import tkinter as tk
from tkinter import filedialog
fenetre = tk.Tk()
fenetre.geometry("380x180")
def ouvrir_plusieurs():
chemins = filedialog.askopenfilenames(
title="Sélectionner des fichiers CSV",
filetypes=[("Fichiers CSV", "*.csv"), ("Tous", "*.*")]
)
# chemins est un tuple — vide si annulation
if chemins:
liste.delete(0, tk.END)
for c in chemins:
liste.insert(tk.END, c.split("/")[-1]) # nom du fichier seulement
tk.Button(fenetre, text="Sélectionner des fichiers", command=ouvrir_plusieurs).pack(pady=10)
liste = tk.Listbox(fenetre, height=5, width=48)
liste.pack(padx=10)
fenetre.mainloop()
Enregistrer un fichier — asksaveasfilename
import tkinter as tk
from tkinter import filedialog, messagebox
fenetre = tk.Tk()
fenetre.geometry("400x240")
zone = tk.Text(fenetre, height=7, width=48)
zone.pack(padx=10, pady=10)
zone.insert("1.0", "Contenu à sauvegarder...\nModifiez ce texte et sauvegardez.")
def sauvegarder():
chemin = filedialog.asksaveasfilename(
title="Enregistrer sous",
defaultextension=".txt", # extension ajoutée automatiquement
filetypes=[
("Fichiers texte", "*.txt"),
("Tous les fichiers", "*.*")
]
)
if chemin:
try:
with open(chemin, "w", encoding="utf-8") as f:
f.write(zone.get("1.0", tk.END))
messagebox.showinfo("Sauvegardé", f"Fichier enregistré :\n{chemin}")
except IOError as e:
messagebox.showerror("Erreur", f"Impossible de sauvegarder :\n{e}")
tk.Button(fenetre, text="Enregistrer sous…", command=sauvegarder).pack(pady=5)
fenetre.mainloop()
defaultextension ajoute automatiquement l'extension si l'utilisateur oublie de la saisir. Entourer l'écriture d'un try/except IOError protège contre les erreurs de permissions ou d'espace disque — une bonne pratique pour toutes les opérations fichier. Ce type de dialogue est souvent combiné avec Pandas pour charger des CSV : pd.read_csv(chemin) directement après la sélection.
Choisir un dossier — askdirectory
import tkinter as tk
from tkinter import filedialog
fenetre = tk.Tk()
fenetre.geometry("380x130")
def choisir_dossier():
dossier = filedialog.askdirectory(
title="Choisir un dossier de destination"
)
if dossier:
label.config(text=dossier)
tk.Button(fenetre, text="Choisir un dossier", command=choisir_dossier).pack(pady=20)
label = tk.Label(fenetre, text="Aucun dossier", fg="#555", wraplength=350)
label.pack()
fenetre.mainloop()
askdirectory() retourne le chemin du dossier sélectionné, ou une chaîne vide si l'utilisateur annule. Utile pour choisir un répertoire de sortie, un dossier d'importation en lot ou un emplacement de sauvegarde.
Par carabde | Mis à jour le 30 avril 2025