9.14. Выбор файла

Заметка

Виджет FileSelection считается устаревшим в PyGTK 2.4 и выше.

В новых приложениях используйте FileChooserDialog.

Виджет выбора файла это быстрый и простой способ отобразить диалоговое окно для выбора файла. В нём есть кнопки Ok, Cancel, и Help. А это хороший способ ускорить программирование.

Для создания этого виджета используется:

  filesel = gtk.FileSelection(title=None)

Для выбора имени файла, например, выбора специальной директории или задания имени файла по умолчанию, используйте метод:

  filesel.set_filename(filename)

Для того чтобы получить имя файла выбранного пользователем, используйте метод:

  filename = filesel.get_filename()

Также есть атрибуты-ссылки к виджетам, содержащимся внутри него. Вот эти атрибуты.

  filesel.dir_list
filesel.file_list
filesel.selection_entry
filesel.selection_text
filesel.main_vbox
filesel.ok_button
filesel.cancel_button
filesel.help_button
filesel.history_pulldown
filesel.history_menu
filesel.fileop_dialog
filesel.fileop_entry
filesel.fileop_file
filesel.fileop_c_dir
filesel.fileop_del_file
filesel.fileop_ren_file
filesel.button_area
filesel.action_area

Скорее всего вы захотите использовать атрибуты ok_button, cancel_button и help_button для подключения сигналов к callback-функциям.

Пример filesel.pyпоказывает использование виджета FileSelection. Как вы можете видеть, для создания виджета FileSelection почти ничего не нужно. Но поскольку виджет устарел, то выглядит он наполовину переведённым на другие языки, отличные от английского. Рисунок 9.14, “Пример выбора файла” показывает получаемое окно.

Рисунок 9.14. Пример выбора файла

File Selection Example

Исходный код для filesel.py:

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # example filesel.py
  4.  
  5. import pygtk
  6. pygtk.require('2.0')
  7. import gtk
  8.  
  9. class FileSelectionExample:
  10. # Получаем выбранное имя файла и пишем его в консоль
  11. def file_ok_sel(self, w):
  12. print "%s" % self.filew.get_filename()
  13.  
  14. def destroy(self, widget):
  15. gtk.main_quit()
  16.  
  17. def __init__(self):
  18. # Создаём виджет выбора файла
  19. self.filew = gtk.FileSelection("Выбор файла")
  20.  
  21. self.filew.connect("destroy", self.destroy)
  22. # Подключаем ok_button к методу file_ok_sel
  23. self.filew.ok_button.connect("clicked", self.file_ok_sel)
  24.  
  25. # Подключаем cancel_button к уничтожению виджета
  26. self.filew.cancel_button.connect("clicked",
  27. lambda w: self.filew.destroy())
  28.  
  29. # Устанавливаем имя файла,
  30. # и даём имя файла по умолчанию
  31. self.filew.set_filename("penguin.png")
  32.  
  33. self.filew.show()
  34.  
  35. def main():
  36. gtk.main()
  37. return 0
  38.  
  39. if __name__ == "__main__":
  40. FileSelectionExample()
  41. main()
  42.