J'ai ajouté un GtkFileChooserButton à mon application via Glade. Il est réglé sur le mode de sélection de dossier. Lorsque le widget est cliqué, il affiche une liste déroulante de signets Nautilus avec une option "autre" à la fin. Une nouvelle boîte de dialogue de sélection de fichier est ouverte lorsque vous cliquez sur "autre". Le bouton n'est connecté à aucune autre boîte de dialogue de sélection de fichier personnalisée.
Le signal de connexion que j'utilise est "ensemble de fichiers" et je récupère le chemin complet du dossier sélectionné par l'utilisateur à l'aide de Gtk.FileChooser.get_current_folder ().
Cette configuration fonctionne correctement si l'utilisateur sélectionne un dossier dans l'option "autre". Mais si un utilisateur sélectionne un signet dans la liste déroulante, aucun chemin n'est renvoyé. Comment résoudre ceci?
Existe-t-il un moyen de désactiver cette liste déroulante et d'accéder directement à la boîte de dialogue filechooser? Je souhaite utiliser GtkFileChooserButton uniquement pour que l'utilisateur puisse obtenir un aperçu de son dossier sélectionné.
Comme le signal d'ensemble de fichiers n'est envoyé que lorsque l'utilisateur modifie le fichier, vous devez effectuer l'appel get_current_folder () lorsque vous devez savoir le chemin, et non lorsque le signal de l'ensemble de fichiers est appelé. À partir de documentation , je ne vois aucun moyen de recevoir une notification lorsque l'utilisateur sélectionne un chemin d'accès dans les signets, en mode de sélection de dossier.
En guise d'alternative, vous pouvez utiliser le FileChooserButton en mode normal et simplement utiliser get_current_folder
lorsque le signal file-set
est envoyé. Cela devrait vous donner le répertoire dans lequel se trouve l'utilisateur lorsqu'un fichier est sélectionné. Malheureusement, l'interface utilisateur sera également étrange dans ce cas, car le bouton affichera le nom du fichier, alors que vous utilisez réellement le répertoire.
En outre, vous devriez probablement signaler un bogue contre GTK + en amont à propos de ce cas d'utilisation et de la façon dont il n'est pas utilisable. Le signal de jeu de fichiers doit vraiment être obsolète et renommé en chemin, et utilisé dans les deux modes.
J'ai utilisé le signal current_folder_changed
hérité de GtkFileChooser
et il semble fonctionner même avec les signets.
GtkFileChooserButton en mode de sélection de dossier peut renvoyer l'URI du dossier. Utilisez le module urlparse
pour convertir l'URI en chemin. Cela fonctionne même avec des signets. J'espère que cela résout votre problème.
import urlparse
folder_uri = filechooserbutton_meas.get_uri()
folder = urlparse.urlparse(folder_uri).path
Cette configuration fonctionne correctement si l'utilisateur sélectionne un dossier dans l'option "autre". Mais si un utilisateur sélectionne un signet dans la liste déroulante, aucun chemin n'est renvoyé. Comment résoudre ceci?
Avec GtkFileChooserButton, mode 'sélection du dossier'. Le code suivant est assez bon:
def on_mybutton_selection_changed(self, w):
print "selected folder: ", w.get_file().get_path()
Nous obtenons le chemin du répertoire sur chaque sélection du menu déroulant, même les signets.
J'ai utilisé le signal current_folder_changed hérité de GtkFileChooser et il semble fonctionner même avec les signets.
Attention avec w.get_current_folder (). Il renvoie le dernier dossier sélectionné lorsque l'utilisateur a choisi un dossier dans l'option 'autre', et non le dossier sélectionné dans le menu déroulant.