Il s'agit ici de faire ce qu'on a l'habitude de faire avec une application graphique et un menu “Fichier”:
Pour tester ces différentes fonctions, vous pouvez utiliser la fenêtre avec le menu de base de la page qui décrit les menus (barre_de_menu)
Le module utilisé s'appelle tkFileDialog, et il faut commencer par l'importer en plus de Tkinter.
Les différentes fonctions que nous utiliserons sont les suivantes:
Il existe aussi askopenfile() et asksaveasfile() que je n'utiliserai pas dans un 1er temps.
La doc concernant ces fonctions est difficile à trouver… Mais il y a une astuce pour trouver les options permises: sous un outil de développement comme idle, vous essayez avec une option fausse (comme zwxqrtpvfr=“nimportequoi”) et le message d'erreur vous rappellera toutes les options autorisées .
Connaitre le répertoire courant:
repcour = os.getcwd()
Exemples:
Pour connaitre le répertoire du programme Python en cours d'exécution:
rep=os.path.dirname(sys.argv[0])
Savoir décomposer un chemin complet “repfic” dans ses 2 parties: répertoire et fichier:
rep=os.path.dirname(repfic) fic=os.path.basename(repfic)
exemple:
Pour reconstituer un chemin complet
Utilisez os.sep comme séparateur: il sera correctement traduit en fonction de l'OS:
Exemple:
Vous pouvez utiliser aussi pour faire la même chose:
os.path.join(rep,fic)
Pour compléter le nom d'un fichier avec son chemin complet:
os.path.abspath("toto.py")
Pour changer le répertoire courant:
os.chdir(rep)
On utilise la fonction askopenfilename(…options…)
Ses options sont:
Code proposé (la méthode est appelée par l'item “Ouvrir” du menu et se trouve dans la classe de l'application):
import Tkinter import tkFileDialog import os, os.path ... ... self.rep=os.getcwd() self.fic="" ... def ouvrir(self): self.repfic = tkFileDialog.askopenfilename(title="Ouvrir le fichier:", initialdir=self.rep, \ initialfile=self.fic, filetypes = [("All", "*"),("Fichiers Python","*.py;*.pyw")]) if len(self.repfic) > 0: self.rep=os.path.dirname(self.repfic) self.fic=os.path.basename(self.repfic) ... ...
On utilise la fonction askdirectory(…options…) avec les options possibles suivantes:
Code proposé (la méthode est appelée par l'item “Répertoire de travail” du menu et se trouve dans la classe de l'application):
import Tkinter import tkFileDialog import os ... ... self.rep=os.getcwd() ... def repertoiredetravail(self): rep = tkFileDialog.askdirectory(title="Répertoire de travail", initialdir=self.rep) if len(rep) > 0: self.rep = rep os.chdir(self.rep) ... ...
On utilise la fonction asksaveasfilename(…options…)
Ses options sont:
Code proposé (la méthode est appelée par l'item “Enregistrer sous” du menu et se trouve dans la classe de l'application):
import Tkinter import tkFileDialog import os ... ... self.rep=os.getcwd() self.fic="" ... def enregistrersous(self): repfic = tkFileDialog.asksaveasfilename(title="Enregistrer sous", initialdir=self.rep, initialfile=self.fic, filetypes = [("All", "*"),("Fichiers Python","*.py;*.pyw")]) if len(repfic) > 0: self.repfic = repfic # ici le code pour enregistrer l'objet interne dans le fichier sélectionné self.repfic ...