В рамках нашего примера не потребуется приложить много усилий, чтобы обеспечить возможность просмотра всех изображений в каталоге, опираясь на некоторые инструменты для работы с каталогами, с которыми мы познакомились в первой части книги. Сценарий в примере 8.44 просто открывает новое окно Toplevel для каждого файла изображения, обнаруженного в каталоге (указанном в в аргументе командной строки или используемом по умолчанию), пропуская файлы, не являющиеся изображениями, за счет обработки исключения, при этом сообщения об ошибках выводятся в окне, открытом для файла.
Рис. 8.44. Отображение картинки в формате GIF средствами tkinter и PIL
Пример 8.44. PP4E\Gui\PIL\viewer-dir.py
выводит все изображения, найденные в каталоге, открывая новые окна
GIF-файлы поддерживаются стандартными средствами tkinter, но JPEG-файлы будут пропускаться при отсутствии пакета PIL
import os, sys
from tkinter import *
from PIL.ImageTk import PhotoImage # <== требуется для JPEG и др. форматов
imgdir = ‘images’
if len(sys.argv) > 1: imgdir = sys.argv[1]
imgfiles = os.listdir(imgdir) # не включает полный путь к каталогу
main = Tk()
main.title(‘Viewer’)
quit = Button(main, text=’Quit all’, command=main.quit, font=(‘courier’, 25)) quit.pack() savephotos = []
for imgfile in imgfiles:
imgpath = os.path.join(imgdir, imgfile) win = Toplevel() win.title(imgfile) try:
imgobj = PhotoImage(file=imgpath)
Label(win, image=imgobj).pack()
print(imgpath, imgobj.width(), imgobj.height()) # размер в пикселях savephotos.append(imgobj) # сохранить ссылку
except:
errmsg = ‘skipping %s\n%s’ % (imgfile, sys.exc_info()[1]) Label(win, text=errmsg).pack()
main.mainloop()
Запустите этот сценарий у себя, чтобы посмотреть создаваемые им окна. При запуске он создает одно главное окно с кнопкой Quit, щелчок на которой закрывает все дополнительные окна, количество которых совпадает с количеством файлов изображений в каталоге. Этот сценарий удобно использовать для быстрой организации просмотра, но он определенно не является образцом дружественного отношения к пользователю, особенно если в каталоге содержится огромное количество изображений! Каталог images, находящийся в дереве примеров и использовавшийся при тестировании, содержит 59 изображений. В результате при просмотре этого каталога сценарий порождает 60 окон, а каталоги, где вы храните свои снимки, сделанные цифровой фотокамерой, могут содержать гораздо больше изображений. Чтобы улучшить сценарий, перейдем к следующему разделу.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011