Простой Python — страница 48 из 66

>> 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), чтобы получить интерактивное представление дисплея и его код.

Игры