logo oujood
🔍

Ouvrir et enregistrer des fichiers Tkinter (filedialog)

filedialog ouvre les dialogues natifs du système pour choisir un fichier ou un dossier. Quelques lignes suffisent pour une sélection de fichier professionnelle.

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

📋 Copier le code

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

📋 Copier le code

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

📋 Copier le code

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

📋 Copier le code

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