Отображение всех изображений в каталоге

otobrazhenie vseh izobrazhenij v kataloge Экскурсия по tkinter, часть 1

В рамках нашего примера не потребуется приложить много усилий, чтобы обеспечить возможность просмотра всех изображений в каталоге, опираясь на некоторые инструменты для работы с каталогами, с которыми мы познакомились в первой части книги. Сценарий в примере 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

Оцените статью
Секреты программирования
Добавить комментарий