>> tkimg = ImageTk.PhotoImage(img)
>>> tkinter.Label(main, image=tkimg). pack()
>>> main.mainloop()
Обратите внимание: мы использовали некоторые модули PIL/Pillow. Вы снова должны увидеть логотип издательства O’Reilly, как показано на рис. А.4.
Рис. A.4. Изображение, показанное с помощью библиотеки Tkinter
Для того чтобы окно пропало, нажмите кнопку Закрыть или выйдите из интерпретатора Python.
О библиотеке Tkinker вы можете прочитать в tkinter wiki (http://tkinter.unpythonic.net/wiki/) и Python wiki (https://wiki.python.org/moin/TkInter). Теперь мы поговорим о GUI, которые не входят в стандартную библиотеку.
• Qt (http://qt-project.org/). Это профессиональный инструментарий для создания GUI и приложений, созданный около 20 лет назад компанией Trolltech из Норвегии. Он использовался для помощи в создании таких приложений, как Google Earth, Maya и Skype. Он применен также как основа для KDE, графической оболочки Linux. Для Qt существуют две основные библиотеки, работающие с Python: PySide (http://qt-project.org/wiki/PySide) бесплатна (по лицензии LGPL), а PyQt (http://bit.ly/pyqt-info) лицензирована либо с GPL, либо коммерчески. Пользователи Qt видят разницу. Вы можете загрузить PySide с сайтов PyPI (https://pypi.python.org/pypi/PySide) или Qt (http://qt-project.org/wiki/Get-PySide), а также прочесть руководство (http://qt-project.org/wiki/PySide_Tutorials). Загрузить Qt бесплатно можно здесь: http://bit.ly/qt-dl.
• GTK+ (http://www.gtk.org/). Является соперником Qt, он также был использован для создания множества приложений (http://gtk-apps.org/) вроде GIMP и оболочки Gnome для Linux. Для Python используется PyGTK (http://www.pygtk.org/). Чтобы загрузить код, перейдите на сайт PyGTK (http://bit.ly/pygtk-dl), где вы также можете прочитать документацию (http://bit.ly/py-gtk-docs).
• WxPython (http://www.wxpython.org/). Это привязка Python к WxWidgets (http://www.wxwidgets.org/), представляющему еще один крупный пакет, который можно бесплатно загрузить онлайн (http://wxpython.org/download.php).
• Kivy (http://kivy.org/). Это бесплатная современная библиотека для создания мультимедийных интерфейсов пользователя, которые можно переносить на другие платформы — стационарные (Windows, OS X, Linux) и мобильные (Android, iOS). Она имеет поддержку мультитача. Вы можете загрузить ее для всех платформ с сайта Kivy (http://kivy.org/#download). Kivy содержит руководства по разработке приложений (http://bit.ly/kivy-intro).
• The Web. Фреймворки вроде Qt используют встроенные компоненты, но некоторые другие используют Web. Web — это универсальный GUI, который содержит графику (SVG), текст (HTML) и даже мультимедиа (в HTML5). Некоторые инструменты GUI, основанные на нем, содержат RCTK (Remote Control Toolkit) (https://code.google.com/p/rctk/) и Muntjac (http://www.muntiacus.org/). Вы можете создать веб-приложения с любой комбинацией фронтенда (клиентской части) и бэкенда (машинного интерфейса) инструментов. Тонкий клиент позволяет бэкенду делать всю работу. Если доминирует фронтенд, клиент называется толстым или насыщенным, последний эпитет звучит более льстиво. Части приложения могут общаться друг с другом с помощью RESTful API, AJAX и JSON.
Трехмерная графика и анимация
Посмотрите длинные финальные титры любого современного фильма, и вы увидите огромное количество людей, занимавшихся спецэффектами и анимацией. Большинство крупных студий: Walt Disney Animation, ILM, Weta, Dreamworks, Pixar — нанимают людей, имеющих опыт работы с Python. Поищите в Интернете «python анимация работа» или посетите сайт vfxjobs (http://vfxjobs.com/search/) и поищите там «python», чтобы увидеть действующие предложения.
Если вы хотите поэкспериментировать с Python и трехмерной анимацией, мультимедиа и играми, вам следует попробовать Panda3D (http://www.panda3d.org/). Этот движок имеет открытый исходный код и бесплатен даже для коммерческих приложений. Вы можете загрузить версию для своего компьютера с сайта Panda3D (http://bit.ly/dl-panda). Чтобы запустить примеры, измените каталог на /Developer/Examples/Panda3D. Каждый подкаталог содержит один или несколько файлов с расширением. py. Запустите один из них с помощью команды ppython, которая поставляется с Panda3D, например:
$ cd /Developer/Examples/Panda3D
$ cd Ball-in-Maze/
$ ppython Tut-Ball-in-Maze.py
DirectStart: Starting the game.
Known pipe types:
··osxGraphicsPipe
(all display modules loaded.)
Откроется окно, похожее на то, что показано на рис. А.5.
Рис. A.5. Изображение, показанное с помощью библиотеки Panda3D
Воспользуйтесь мышью, чтобы потрясти коробку и подвигать шарик в лабиринте.
Если все сработало и базовая установка Panda3D выглядит хорошо, можете начать экспериментировать с библиотекой Python.
Рассмотрим простой пример приложения из документации Panda3D (сохраните его как panda1.py):
from direct.showbase.ShowBase import ShowBase
class MyApp(ShowBase):
····def __init__(self):
········ShowBase.__init__(self)
········# Загрузка модели окружения.
········self.environ = self.loader.loadModel("models/environment")
········# Переподчинить модель для отрисовки.
········self.environ.reparentTo(self.render)
········# Применить к модели преобразования масштаба и позиции.
········self.environ.setScale(0.25, 0.25, 0.25)
········self.environ.setPos(-8, 42, 0)
app = MyApp()
app.run()
Запустите приложение с помощью следующей команды:
$ ppython panda1.py
Known pipe types:
··osxGraphicsPipe
(all display modules loaded.)
Откроется окно, содержащее сцену, которая показана на рис. А.6.
Рис. A.6. Масштабированное изображение, показанное с помощью библиотеки Panda3D
Камень и дерево парят над землей. Нажмите кнопку Next (Далее), чтобы продолжить исследовать руководство и исправить эти проблемы.
Далее показаны некоторые пакеты Python для работы с 3D.
• Blender (http://www.blender.org/). Это бесплатное средство создания 3D-анимации и игр. Если вы загрузите и установите его с сайта www.blender.org/download, на ваш компьютер будет установлена копия также Python 3.
• Maya (http://www.autodesk.com/products/autodesk-maya/overview). Это коммерческая система для создания 3D-анимации и графики. Она поставляется вместе с версией Python — в данный момент Python 2.6. Чед Вернон (Chad Vernon) написал о ней бесплатно загружаемую книгу Python Scripting for Maya Artists (http://bit.ly/py-maya). Если вы поищете в Интернете информацию о Python и Maya, то сможете найти множество других ресурсов, как бесплатных, так и коммерческих, включая видеоролики.
• Houdini (https://www.sidefx.com/). Это коммерческий пакет, однако вы можете загрузить бесплатную версию, которая называется Apprentice. Как и другие пакеты для анимации, он поставляется с привязкой к Python (http://bit.ly/py-bind).
Диаграммы, графики и визуализация
Python является отличным инструментом для создания диаграмм, графиков и визуализации данных и особенно популярен в научной среде (см. приложение В). Официальный сайт Python содержит обзор таких пакетов (https://wiki.python.org/moin/NumericAndScientific/Plotting). Позвольте мне рассказать чуть более подробно о некоторых из них.
matplotlib
Бесплатная библиотека для создания двухмерных диаграмм matplotlib (http://matplotlib.org/) может быть установлена с помощью следующей команды:
$ pip install matplotlib
Примеры из галереи (http://matplotlib.org/gallery.html) показывают широту библиотеки matplotlib. Попробуем написать такое же приложение для показа изображений (результаты можно увидеть на рис. А.7) только для того, чтобы увидеть, как будут выглядеть код и презентация:
import matplotlib.pyplot as plot
import matplotlib.image as image
img = image.imread('oreilly.png')
plot.imshow(img)
plot.show()
Рис. A.7. Изображение, показанное с помощью библиотеки matplotlib
В приложении В мы еще вернемся к matplotlib — она тесно связана с NumPy и другими научными приложениями.
bokeh
В ранние дни существования Интернета разработчики генерировали графику на сервере и давали браузеру URL для доступа к ней. В недавнее время JavaScript повысил свою производительность и получил инструменты генерации графики на стороне клиента, такие как D3. Пару страниц назад я говорил о возможности использовать Python как часть архитектуры фронтенд-бэкенд-графики и GUIs. Новый инструмент, который называется bokeh (http://bokeh.pydata.org/), совмещает плюсы Python (крупные наборы данных, простота использования) и JavaScript (интерактивность, меньшая латентность графики). Он делает акцент на быстрой визуализации крупных наборов данных.
Если вы уже установили необходимые для bokeh пакеты (NumPy, Pandas и Redis), можете установить и его самого, введя следующую команду:
$ pip install bokeh
(NumPy и Pandas в действии вы сможете увидеть в приложении В.)
Или же можете установить все сразу с сайта Bokeh (http://bit.ly/bokeh-dl). Несмотря на то что на сервере запущен matplotlib, bokeh в основном работает в браузере и может пользоваться всеми новыми возможностями клиентской стороны. Нажмите на любое изображение в галерее (http://bokeh.pydata.org/docs/gallery.html), чтобы получить интерактивное представление дисплея и его код.
Игры