La sélection des fichiers
1. Présentation
Pour qu'un utilisateur puisse sélectionner un fichier pour des actions comme la sauvegarde ou l'ouverture, nous allons utiliser les widgets
GtkFileChooserDialog et
GtkFileChooser.
1.1 Hiérarchie
GObject ->
GtkObject ->
GtkWidget ->
GtkContainer ->
GtkBin? ->
GtkWindow ->
GtkDialog ->
GtkFileChooserDialog
GInterface? ->
GtkFileChooser
2. Utilisation de base
2.1 Création
Nous n'allons étudier qu'une seule fonction de création sur les deux que propose GTK+ :
dialog_window = gtk.FileChooserDialog?(title, parent, action, (first_button_text,...) )
Avec cette fonction nous allons donc ainsi créer la boîte de dialogue qui va nous demander de sélectionner un nom de fichier (ou un répertoire) pour effectuer une opération de sauvegarde ou autre.
Le premier paramètre
title est le titre de la fenêtre, le deuxième paramètre
parent permet de définir la fenêtre parente.
Le troisième paramètre
action permet de définir le comportement de la boîte de dialogue. Ce paramètre peut prendre quatre valeurs différentes :
- gtk.FILE_CHOOSER_ACTION_OPEN pour ouvrir un fichier ;
- gtk.FILE_CHOOSER_ACTION_SAVE pour sauver un fichier ;
- gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER pour sélectionner un répertoire ;
- gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER pour pouvoir créer ou renommer un répertoire.
Ensuite le fonctionnement est le même que pour les boîte de dialogue classique, il faut ajouter les boutons présents dans la boîte de sélection ainsi que les valeurs de retour, ceci par un tuple de la forme: ( boutton1, valeur1, boutton2, valeur2, ....)
2.2 Affichage
Comme nous venons de le voir, le widget
GtkFileChooserDialog dérive de
GtkDialog, c'est donc tout naturellement que l'affichage de la boîte de sélection va se faire avec cette fonction :
reponce = dialog_window.run ()
a valeur de retour sera très importante pour savoir, si l'utilisateur à sélectionné un nom de fichier ou pas.
2.3 Récupération du chemin
Encore une fois, nous allons utiliser les propriétés du widget
GtkDialog. Si la valeur de retour de
run() est
gtk.RESPONSE_OK, alors un nom de fichier a été sélectionné, et il faut donc récupérer sa valeur avec la fonction suivante :
fichier = dialog_window.get_filename()
fichier est de type string et contient le nom de fichier selectionné
2.4 Definition de filtres
Création d'un
GtkFileFilter?
filter = gtk.FileFilter?()
filter.set_name(filename)
filter.add_pattern(format)
Ajout du filtre à la fenetre de selection de fichier:
dialog_window.add_filter(filter)
2.5 Programme exemple
2.5.1 Programme exemple (gestion des evenements)
Nous allons créer une fenêtre avec un bouton nous permettant d'ouvrir une
GtkFileChooserDialog. Une fois le fichier sélectionné, nous affichons son chemin sur la sortie standard.
import gtk
def OnDestroy(widget, data):
# Arret de la boucle evenementielle
gtk.main_quit()
def OnButton(widget, data):
wParent = data
wFileSelection = gtk.FileChooserDialog("Ouvrir...",
wParent,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK));
if(wFileSelection.run() == gtk.RESPONSE_OK):
fichier = wFileSelection.get_filename()
print fichier
# Arret de la boucle evenementielle
gtk.main_quit()
def main():
# Creation de la fenetre
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("GtkFileSelection")
window.set_default_size(320, 200)
button = gtk.Button("Explorer...");
window.add(button)
window.connect("destroy", OnDestroy, None)
button.connect("clicked", OnButton, None)
window.show_all()
gtk.main()
if __name__ == '__main__':
main()
}Résultats


2.5.2 Programme exemple (Selection d'un répertoire)
import gtk
window = gtk.FileChooserDialog("Ouvrir...",
gtk.Window(gtk.WINDOW_TOPLEVEL),
gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK));
if(window.run() == gtk.RESPONSE_OK):
fichier = window.get_filename()
print fichier
Résultat
