Я добавил GtkFileChooserButton в свое приложение через Glade. Он установлен в режим выбора папки. При нажатии на виджет отображается раскрывающийся список закладок Nautilus с опцией «прочее» в конце. Новое диалоговое окно выбора файла запускается при нажатии «Другое». Кнопка не связана ни с каким другим настраиваемым диалоговым окном выбора файлов.
Используемый мной сигнал подключения - «набор файлов», и я получаю полный путь к выбранной пользователем папке, используя Gtk.FileChooser.get_current_folder ().
Эта настройка работает нормально, если пользователь выбирает папку из «другого» варианта. Но если пользователь выбирает закладку из выпадающего списка, путь не возвращается. Как решить эту проблему?
Есть ли способ отключить этот выпадающий список и перейти непосредственно в диалог выбора файлов? Я хочу использовать GtkFileChooserButton только для того, чтобы пользователь мог получить предварительный просмотр выбранной папки.
GtkFileChooserButton в режиме выбора папки может возвращать URI папки. Используйте модуль urlparse
для преобразования URI в путь. Это работает даже с закладками. Надеюсь, что это решит вашу проблему.
import urlparse
folder_uri = filechooserbutton_meas.get_uri()
folder = urlparse.urlparse(folder_uri).path
Поскольку сигнал набора файлов отправляется только тогда, когда пользователь изменяет файл, вам нужно будет выполнить вызов get_current_folder (), когда вам нужно знать путь, а не когда Установленный сигнал называется. Из документации я не вижу способа получить уведомление, когда пользователь выбирает путь из закладок в режиме выбора папки.
В качестве альтернативы вы можете использовать FileChooserButton в обычном режиме и просто использовать get_current_folder
при отправке сигнала file-set
. Это должно дать вам каталог, в котором находится пользователь, когда файл выбран. К сожалению, пользовательский интерфейс в этом случае также будет выглядеть странно, так как кнопка покажет имя файла, когда вы на самом деле используете каталог.
Кроме того, вам, вероятно, следует сообщить об ошибке в вышестоящий GTK + об этом сценарии использования и о том, как он не может быть использован. Сигнал набора файлов действительно должен быть признан устаревшим и переименован в набор путей и использоваться в обоих режимах.
Я использовал сигнал current_folder_changed
, унаследованный от GtkFileChooser
, и, похоже, он работает даже с закладками.
Эта настройка работает нормально, если пользователь выбирает папку из «другого» варианта. Но если пользователь выбирает закладку из выпадающего списка, путь не возвращается. Как решить эту проблему?
blockquote>С GtkFileChooserButton, режим «выбор папки». Следующий код достаточно хорош:
def on_mybutton_selection_changed(self, w): print "selected folder: ", w.get_file().get_path()
Мы получаем путь к каталогу при каждом выборе раскрывающегося меню, даже в закладках.
Я использовал сигнал current_folder_changed, унаследованный от GtkFileChooser, и, похоже, он работает даже с закладками.
blockquote>Осторожно с помощью w.get_current_folder (). Возвращает ПОСЛЕДНЮЮ выбранную папку, когда пользователь выбрал папку из «другого» варианта, а не выбранную папку в раскрывающемся меню.