Python - графика

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Python - графика

Непрочитанное сообщение Olej » 26 авг 2013, 10:14

Эта тема - о графических приложениях на Python, построению GUI.
А заодно (пока и если такой материал не переполнит тему) о сопутствующих GUI вещах: мультимедиа и т.п.

Тема сюда "переползла" вот отсюда:
Есть и ещё одна тема, заслуживающая совершенно отдельной темы рассмотрения: Python и графика, Python и создание GUI приложений...
Но это уже на потом, на десерт ...

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 26 авг 2013, 10:59

Olej писал(а):
Есть и ещё одна тема, заслуживающая совершенно отдельной темы рассмотрения: Python и графика, Python и создание GUI приложений...
Но это уже на потом, на десерт ...
Я сейчас прямо не буду развивать эту тему - как и было сказано: "на десерт" ... по свободному времени...
Но, может, кого раньше заинтересует эта тема, так для этого я ... превентивно ;-) перечислю 3 (пока) совершенно разных направления GUI, которые могут быть интересны для экспериментирования:

1. модуль Tkinter для простого и быстрого написания GUI-приложений.
Подробнейшее описание использования с примерами есть в уже упоминавшейся книге Марк Лутц - Программирование на Python. Том 1, 4-е издание (по этой ссылке её можно свободно скачать):
Изображение
В этом томе книги целая здоровенная часть (>400 стр.) посвящена Tkinter:
III
Программирование
графических интерфейсов
Описание Tkinter есть в WWW-интерфейсе pydoc: http://localhost:8080/Tkinter.html

2. модуль pygame.
Это основа того учебного курса ИНТУИТ, который я уже упоминал:
Olej писал(а): вечером приходит уведомление о свежем курсе ИНТУИТ:
...
P.S. Этот курс был анонсирован и раньше, но на месте его ссылки было пустое место, и писалось "... готовится ...".

P.P.S.
Изображение
Мне не сильно понятно, почему курсы университета, который подписывается как "национальный" должны быть на английском языке? ;-) ... Но это не так важно...
3. инструментарий PyQt - интерфейс Python к библиотекам Qt.
Этого инструментария достаточно много в репозитариях дистрибутивов Linux:

Код: Выделить всё

bash-4.2$ yum list all *PyQt*
...
Установленные пакеты
PyQt4.i686                                             4.10.1-4.fc17                                   @updates
Доступные пакеты
PyQt.i686                                              3.18.1-14.fc17                                  updates 
PyQt-devel.i686                                        3.18.1-14.fc17                                  updates 
PyQt-examples.i686                                     3.18.1-14.fc17                                  updates 
PyQt4-assistant.i686                                   4.10.1-4.fc17                                   updates 
PyQt4-devel.i686                                       4.10.1-4.fc17                                   updates 
plplot-pyqt.i686                                       5.9.9-7.svn12202.fc17                           updates 
pyqtrailer.noarch                                      0.6.2-3.fc17                                    fedora  
python3-PyQt4.i686                                     4.10.1-4.fc17                                   updates 
python3-PyQt4-assistant.i686                           4.10.1-4.fc17                                   updates 
python3-PyQt4-devel.i686                               4.10.1-4.fc17                                   updates 

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 26 авг 2013, 15:40

Olej писал(а): 1. модуль Tkinter для простого и быстрого написания GUI-приложений.
Подробнейшее описание использования с примерами есть в уже упоминавшейся книге Марк Лутц - Программирование на Python. Том 1, 4-е издание (по этой ссылке её можно свободно скачать):
Изображение
В этом томе книги целая здоровенная часть (>400 стр.) посвящена Tkinter:
III
Программирование
графических интерфейсов
Описание Tkinter есть в WWW-интерфейсе pydoc: http://localhost:8080/Tkinter.html
В отношении Tkinter только замечу вот что:

- в книге Марк Лутц приводится действительно сильная аргументация почему GUI целесообразно делать именно на интерпретирующем Python:
Кроме того, краткость цикла разработки в Python позволяет программистам быстро экспериментировать с вариантами расположения элементов и их поведением, что невозможно при использовании обычных технологий разработки. На практике обычно можно за считаные секунды сделать изменения в GUI, созданном на Python, и посмотреть на их результат. Не пытайтесь добиться такой же скорости на C или C++ !

P.S. Это цитата (копированием) из изданной книги. Неужели редактор-корректор издательства "Символ-Плюс" просмотрели неправильное написание, которое должно быть: считанные?

- везде по книге Марк Лутц использует (в примерах кода!) вот такое написание tkinter:

Код: Выделить всё

from tkinter import *
- но если вы запустите такой пример, то получите отлуп ;-) :

Код: Выделить всё

bash-4.2$ python hw.py
Traceback (most recent call last):
  File "hw.py", line 1, in <module>
    from tkinter import *
ImportError: No module named tkinter
- правильно его пример нужно бы переписать так (написание Tkinter):

Код: Выделить всё

from Tkinter import *

tk = Tk()
tk.title("Hello World!")
tk.geometry('300x40')
def button_clicked():
    print("Hello World!")

button=Button(tk,text="Press Me",command=button_clicked)
button.pack(fill=BOTH)

tk.mainloop()
hw.png
hw.png (5.1 КБ) 12500 просмотров
- я так понимаю, что Марк Лутц отрабатывает свои примеры в Windows, а Windows - он тупой, и большие-малые буквы никогда не различал, ему "что в лоб, что по лбу" ;-)

Вот теперь можете экспериментировать.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 26 авг 2013, 16:11

Olej писал(а): 2. модуль pygame.
Это основа того учебного курса ИНТУИТ, который я уже упоминал:
Olej писал(а): ...
P.P.S.
Изображение
Мне не сильно понятно, почему курсы университета, который подписывается как "национальный" должны быть на английском языке? ;-) ... Но это не так важно...
1. Теперь мне уже понятно почему ;-) :
- автор иностранный: Albert Sweigart
- это не столько учебный курс "ИНТУИТ" ("слухи сильно преувеличены" ;-) ), сколько вольный пересказ одной из оригинальных книг этого автора, которая, естественно, англоязычная - "Making Games with Python & Pygames":
Изображение
- все 3 книги автора можно посмотреть здесь ... которые, кстати, можно там онлайн читать, или оттуда свободно скачать (.pdf или .mobi для читалки Amazon Kindle 4), что и следует, по правде, немедленно сделать ;-) - это лучше, чем пересказки на "ИНТУИТ" читать ;-)
- там же и архив исходных кодов для скачивания...
- ещё один сайт автора, который он указывает для скачивания примеров: http://invpy.com/downloads/ - не исключено, что они отличаются от сайта книг, так бывает :-?

P.S. Там же по ссылке и ещё одна книга автора в тему - "Invent You Own Computer Games with Python" ( как обещано в аннотации: with Pygames tutorial).
Изображение

2. Автор, судя по всему, большой дока в Python. Но, так же судя по всему, он совсем не настолько силён в операционных системах, их разнообразии и инсталляциях... ;-)
Он описывает использование Python-модуля pygame как данность. И, почти наверняка, в инсталляции Python для Windows это так и есть. Но в Linux запуск примеров сразу завершится примерно так:

Код: Выделить всё

bash-4.2$ python hw.py
Traceback (most recent call last):
  File "hw.py", line 1, in <module>
    import pygame, sys
ImportError: No module named pygame

Это потому, что в Linux модуль pygame нужно устанавливать дополнительно (из репозитария вашего дистрибутива Linux):

Код: Выделить всё

bash-4.2$ yum list pygame*
...
Доступные пакеты
pygame.i686                                           1.9.1-11.fc17                                     updates
pygame-devel.i686                                     1.9.1-11.fc17                                     updates

bash-4.2$ sudo yum install pygame*
...
ависимости определены

===============================================================================================================
 Package                           Архитектура        Версия                         Репозиторий         Размер
===============================================================================================================
Установка:
 pygame                            i686               1.9.1-11.fc17                  updates             2.1 M
 pygame-devel                      i686               1.9.1-11.fc17                  updates             752 k
Установка зависимостей:
 SDL-devel                         i686               1.2.14-17.fc17                 updates             352 k
 SDL_mixer-devel                   i686               1.2.12-3.fc17                  updates              19 k
 SDL_ttf-devel                     i686               2.0.11-1.fc17                  fedora              9.3 k
 alsa-lib-devel                    i686               1.0.26-1.fc17                  updates             797 k
 gnu-free-fonts-common             noarch             20100919-5.fc17                fedora              186 k
 gnu-free-sans-fonts               noarch             20100919-5.fc17                fedora              597 k
 libogg-devel                      i686               2:1.3.0-5.fc17                 updates              13 k
 libvorbis-devel                   i686               1:1.3.3-1.fc17                 fedora               20 k
 portmidi                          i686               217-6.fc17                     updates              24 k
Обновление зависимостей:
 SDL                               i686               1.2.14-17.fc17                 updates             206 k
 alsa-lib                          i686               1.0.26-1.fc17                  updates             362 k
 libogg                            i686               2:1.3.0-5.fc17                 updates              23 k

Результат операции
===============================================================================================================
Установка   2 Пакета (+9 Зависимые пакеты)
Обновление           ( 3 Зависимых пакета)

Объем загрузки: 5.4 M
Продолжить? [y/N]: y
...
Установлено:
  pygame.i686 0:1.9.1-11.fc17                         pygame-devel.i686 0:1.9.1-11.fc17
Как видите, пакет по зависимостям тянет достаточно много за собой.

3. Вот теперь можете экспериментировать с его примерами:

Код: Выделить всё

import pygame, sys
from pygame.locals import *

pygame.init()
DISPLAYSURF = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Hello World!')

while True: # main game loop
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()
hw.png
hw.png (4.8 КБ) 12500 просмотров

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 26 авг 2013, 16:31

Olej писал(а): - правильно его пример нужно бы переписать так (написание Tkinter):
Картина ещё более путанная - всё было ОК, пока Python был 2, но для Python 3:

Код: Выделить всё

bash-4.2$ python3 hw.py 
Traceback (most recent call last):
  File "hw.py", line 1, in <module>
    from Tkinter import *
ImportError: No module named Tkinter
Возможно (зависит от дистрибутива Linux?) нужно будет установить пакет дополнительно:

Код: Выделить всё

bash-4.2$ sudo yum install python3-tkinter.i686
...
Установлено:
  python3-tkinter.i686 0:3.2.3-7.fc17
 
Выполнено!
New leaves:
  python3-tkinter.i686
Но и после этого будет возникать ошибка, пока не измените код примера на исходный (теперь уже должно стать написание: tkinter) :-o :

Код: Выделить всё

from tkinter import *

tk = Tk()
tk.title("Hello World!")
tk.geometry('300x40')
def button_clicked():
    print("Hello World!")

button=Button(tk,text="Press Me",command=button_clicked)
button.pack(fill=BOTH)

tk.mainloop()

Код: Выделить всё

bash-4.2$ python3 hw.py
...

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 26 авг 2013, 16:52

Olej писал(а): Подробнейшее описание использования с примерами есть в уже упоминавшейся книге Марк Лутц - Программирование на Python. Том 1, 4-е издание (по этой ссылке её можно свободно скачать):
Изображение
В этой же книге содержится широкий обзор (но только обзор по верхам!) других интерфейсов из Python и инструментов построения GUI, из которых (сверх названных выше 3-х) не менее интересными чем PyQt могут быть:

4. wxPython
Интерфейс Python к биб­ иотеке wxWidgets с открытыми исходными текстами (ранее называвшейся wxWindows), которая представляет собой переносимую структуру классов GUI, первоначально созданную для использования из программ на языке C++. Система wxPython является модулем расширения, служащим оболочкой для классов wxWidgets. По общему мнению эта библиотека превосходно подходит для создания сложных интерфейсов и сегодня является, вероятно, вторым по популярности инструментом создания графических интерфейсов в Python после tkinter.
5. PyGTK
Интерфейс Python к GTK, переносимой биб­ иотеке GUI, первоначально использовавшейся как ядро оконной сис­ емы Gnome в Linux.
...
К моменту написания этих строк интерфейс PyGTK поддерживал возможность работы в Windows и в POSIX-совместимых системах, таких как Linux и Mac OS X (согласно документации, в настоящее время требуется, чтобы в Mac OS был установлен X-сервер, при этом разрабатывается версия для Mac).
P.S. Понятно, что все 5 (уже теперь) интерфейсов, перечисленные мной как "интересные" - все они независимые от платформы. Всякие специфические поделка a'la Windows-инструментария представлять интереса не могут.

P.P.S. Положительный результат использования любого из таких GUI-инструментариев должен был бы состоять в том, что GUI-приложение, перенесенное как файл из одной операционной системы в другую (Linux => Windows, Windows => Linux и др.) - должно работать так же без каких либо а). компиляций, б). настроек, в). игрищ с кодировками и локализациями. Вот это будет тогда высочайшая степень платформонезависимости, с трудом достигаемая до такого уровня в более привычных C/C++ или Java.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 26 авг 2013, 20:44

Olej писал(а): Но и после этого будет возникать ошибка, пока не измените код примера на исходный (теперь уже должно стать написание: tkinter) :-o :
Документация:

- справочник классов An Introduction to Tkinter (Work in Progress)

- может пригодится The Python Imaging Library Handbook

- там же - это не графика, но огромный справочник по модулям Python 2, с примерами использования каждого модуля:
Based in part on over 3,000 newsgroup articles written by Python veteran Fredrik Lundh since 1995, this book provides brief descriptions and sample scripts for all standard modules in the Python 2.0 library.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 06 сен 2013, 20:51

Olej писал(а): 1. Теперь мне уже понятно почему ;-) :
- автор иностранный: Albert Sweigart
- это не столько учебный курс "ИНТУИТ" ("слухи сильно преувеличены" ;-) ), сколько вольный пересказ одной из оригинальных книг этого автора, которая, естественно, англоязычная - "Making Games with Python & Pygames":
Изображение
- все 3 книги автора можно посмотреть здесь ... которые, кстати, можно там онлайн читать, или оттуда свободно скачать (.pdf или .mobi для читалки Amazon Kindle 4), что и следует, по правде, немедленно сделать ;-) - это лучше, чем пересказки на "ИНТУИТ" читать ;-)
- там же и архив исходных кодов для скачивания...
- ещё один сайт автора, который он указывает для скачивания примеров: http://invpy.com/downloads/ - не исключено, что они отличаются от сайта книг, так бывает :-?
Книга очень приличная. Начал на досуге почитывать и просматривать примеры реализаций...
Очень подробное (до слишком подробное, до противного) изложение на 365 страницах, с детальным разбором каждого примера.
Исходных кодов примеров и сопутствующих им фалов почти на 2Mb:

Код: Выделить всё

bash-4.2$ du -hs makinggames_src 
1,8M	makinggames_src
Это всё в плюс.

А в минус ... ?

1. Автор все свои опыты делал в Windows под IDLE.
Мне это неинтересно. Плюс, как всегда, в таких случаях все коды с этими противными Windows-ными ^M в конце строчки, можно бы и так оставить ... но я уже давно по привычке этого видеть не могу!
Как назло, в моём рабочем Linux не оказалось установленного трансформера текстов Windows=>Linux (давно не пользовался). Пришлось вспоминать и устанавливать:

Код: Выделить всё

bash-4.2$ sudo yum install dos2unix
...
Объем загрузки: 61 k
Объем изменений: 156 k
Продолжить? [y/N]: y
...
Установлено:
  dos2unix.i686 0:5.3.3-1.fc17
Если у вас не RPM-дистрибутив, то там, в Debian, например, будет такой же пакет с таким же именем...
Теперь можно первейшим шагом работы с примерами книги трансформировать их:

Код: Выделить всё

bash-4.2$ dos2unix drawing.py
dos2unix: converting file drawing.py to Unix format ...
Уже хорошо...

2. Автор пишет так:
However, the programs in this book work with both Python 2 and 3.
...
Ubuntu and Linux Instructions
Pygame for Linux also only supports Python 2, not Python 3.
Вот так вот... Нужно сходить на URL проекта Pygame и смотреть что там сейчас происходит, а не на момент написания книги.

Код: Выделить всё

bash-4.2$ python3 drawing.py
Traceback (most recent call last):
  File "drawing.py", line 1, in <module>
    import pygame, sys
ImportError: No module named pygame
Ну а в остальном примеры достаточно хорошо воспроизводимы:

Код: Выделить всё

bash-4.2$ python drawing.py
ALSA lib pcm_pulse.c:750:(pulse_prepare) PulseAudio: Unable to create stream: Too large
ALSA lib pcm_pulse.c:750:(pulse_prepare) PulseAudio: Unable to create stream: Too large
ALSA lib pcm_pulse.c:750:(pulse_prepare) PulseAudio: Unable to create stream: Too large
(но предполагаю, что здесь с звуковой подсистемой ещё придётся пободаться :-o )
drawing.png
drawing.png (6.2 КБ) 12417 просмотров
Вложения
drawing.py
(1.15 КБ) 578 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 06 сен 2013, 21:23

Olej писал(а): 2. Автор пишет так:
However, the programs in this book work with both Python 2 and 3.
...
Ubuntu and Linux Instructions
Pygame for Linux also only supports Python 2, not Python 3.
Вот так вот... Нужно сходить на URL проекта Pygame и смотреть что там сейчас происходит, а не на момент написания книги.
Хождение показывает, что, скорее всего, так оно и есть - Downloads - последние редакции:
1.9.1 Packages (August 6th 2009)
Хотя страничка FrequentlyAskedQuestions даёт вот такое робкое разъяснение:
Does Pygame work with Python 3?
Mostly yes. Only the scrap, _movie, surfarray for Numeric, and threads modules have not been ported. The Pygame alternative, pgreloaded (Pygame Reloaded), also supports Python 3.
Для этого, нужно полагать, файлы пакета Pygame нужно вручную перенести в дерево пакетов Python 3, и получить в чём-то ограниченную функциональность...
Ну и там же указан URL pgreloaded на том же сайте, как альтернативу (pygame2):
Pygame Reloaded (aka pygame2, pgreloaded) is an ongoing rewrite of the Pygame multimedia and game framework.
Зато инсталляция под Python 2 очень и очень...
По выполнению команды (в том же FAQ подсмотрел ;-) ):

Код: Выделить всё

bash-4.2$ python -m pygame.docs
info: Error while loading localization: There is no localization file for your language.
Открывается окно браузера с обширной локальной системой документации Python (URL: file:///usr/lib/python2.7/site-packages/pygame/docs/index.html ).

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 07 сен 2013, 19:16

Olej писал(а): P.S. Там же по ссылке и ещё одна книга автора в тему - "Invent You Own Computer Games with Python" ( как обещано в аннотации: with Pygames tutorial).
Изображение
Книги не дублируют друг-друга, в основном, так что их стоит пробежать обе... Именно пробежать, потому что изложение очень (подробно) размазано - 2 книги на 1 вечер - это как-раз норма будет ;-) . Тем не менее, интересно, и более чем достаточно, чтобы разобраться с pygame: и графическое рисование, и растровые изображения, и анимация ... и (что было неожиданно и интересно) воспроизведение аудио в разных форматах.

Для того, чтобы разобраться с pygame, достаточно, собственно 4-5 максимум примеров автора, не обязательно 2 книги ;-) . Эти (ключевые) примеры я проверил + собрал в один архив. Как всегда, там есть текстовый файл протокола (журнала) выполнявшихся команд: что и как запускать и т.д.
Вложения
pygame.tgz
(1.75 МБ) 587 скачиваний

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя