Использование изображений в панелях инструментов

ispolzovanie izobrazhenij v panelyah instrumentov Экскурсия по tkinter, часть 2

Как видно на рис. 9.11, пункты меню легко могут быть украшены графическими изображениями. Хотя это и не было продемонстрировано в примере 9.8, тем не менее элементы панелей инструментов могут также снабжаться картинками, как и элементы меню Image в примере. Для этого достаточно просто поместить небольшие изображения на кнопки в панели инструментов, как мы делали это в примерах с миниатюрами, в последнем разделе главы 8. Как вы уже знаете, при наличии предварительно созданных изображений для кнопок на панели инструментов не составляет никакого труда ассоциировать их с кнопками. Фактически для динамического создания таких изображений требуется приложить ненамного больше труда — навыки создания миниатюр с помощью пакета PIL, полученные нами в предыдущей главе, придутся кстати и в этом контексте.

Рис. 9.10. Сценарий menuDemo: меню и панели инструментов

 

 

Рис. 9.11. Изображения в меню и отрывные меню в действии

 

Для иллюстрации сказанного убедитесь, что у вас расширение PIL установлено, и замените метод конструирования панели инструментов в примере 9.8 следующим фрагментом (я выполнил такую замену в файле menuDemo2.py в пакете с примерами, поэтому вы можете запускать его и экспериментировать с ним):

#   изменяет размеры изображений для кнопок на панели инструментов с помощью PIL

def makeToolBar(self, size=(40, 40)):

from PIL.ImageTk import PhotoImage, Image # для jpeg или новых миниатюр imgdir = r’../PIL/images/’

toolbar = Frame(self, cursor=’hand2’, relief=SUNKEN, bd=2)

toolbar.pack(side=BOTTOM, fill=X)

photos = ‘ora-lp4e-big.jpg’, ‘PythonPoweredAnim.gif’, ‘python_conf_ora.gif’

self.toolPhotoObjs = []

for file in photos:

imgobj = Image.open(imgdir + file) # создать новую миниатюру imgobj.thumbnail(size, Image.ANTIALIAS) # фильтр с лучшим качеством img = PhotoImage(imgobj)

btn = Button(toolbar, image=img, command=self.greeting)

btn.config(relief=RAISED, bd=2)

btn.config(width=size[0], height=size[1])

btn.pack(side=LEFT)

self.toolPhotoObjs.append((img, imgobj)) # сохранить ссылку

Button(toolbar, text=’Quit’, command=self.quit).pack(side=RIGHT, fill=Y)

Если запустить этот альтернативный сценарий, он создаст окно, изображенное на рис. 9.12, — три пункта меню Image, присутствующего в верхней части окна, теперь также доступны в виде кнопок на панели инстру-

Рис. 9.12. Сценарий menuDemo2: добавление изображений в панель инструментов с помощью PIL

ментов в нижней части окна, наряду с кнопкой завершения программы, содержащей текстовую метку. Как и прежде, указатель мыши меняет свою форму при наведении на кнопки в панели инструментов.

Пакет PIL можно не использовать при наличии изображений в формате GIF или в поддерживаемом растровом формате, созданных вручную. Достаточно просто загружать изображения из файлов, используя стандартный объект PhotoImage из библиотеки tkinter, как показано в следующей альтернативной реализации метода конструирования панели инструментов (эта версия сценария сохранена в файле menuDemo3.py в пакете с примерами):

#  использует подготовленные изображения gif и стандартные средства tkinter

def makeToolBar(self, size=(30, 30)): imgdir = r’../gifs/’

toolbar = Frame(self, cursor=’hand2’, relief=SUNKEN, bd=2) toolbar.pack(side=BOTTOM, fill=X)

photos = ‘ora-lp4e.gif’, ‘pythonPowered.gif’, ‘python_conf_ora.gif’ self.toolPhotoObjs = [] for file in photos:

img = PhotoImage(file=imgdir + file)

btn = Button(toolbar, image=img, command=self.greeting) btn.config(bd=5, relief=RIDGE)

btn.config(width=size[0], height=size[1]) btn.pack(side=LEFT)

self.toolPhotoObjs.append(img) # сохранить ссылку

Button(toolbar, text=’Quit’, command=self.quit).pack(side=RIGHT, fill=Y)

Если запустить эту альтернативную версию, использующую изображения в формате GIF, она воспроизведет окно, изображенное на рис. 9.13. В зависимости от предпочтений ваших пользователей вам может потребоваться изменить размеры изображений GIF, используемых в этом качестве, с помощью других инструментов — изображения на кнопках фиксированного размера здесь выводится только частично, что может оказаться нежелательным.

Данный пример является первым приблизительным решением для создания кнопок с картинками на панели инструментов. Существует множество других способов настройки таких кнопок. Однако, поскольку мы собираемся еще вернуться к пакету PIL далее в этой главе, когда будем исследовать холсты, мы оставим дальнейшую доработку сценария для самостоятельного упражнения.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

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