Python - графика

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

Модератор: Olej

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

Re: Python - графика

Непрочитанное сообщение Olej » 08 сен 2013, 00:24

Olej писал(а):чтобы разобраться с pygame: и графическое рисование, и растровые изображения, и анимация ... и (что было неожиданно и интересно) воспроизведение аудио в разных форматах.
Посмотрел я на эту реализацию аудио обработки и ясно стало вот что:

- такие возможности, возможно, и вполне достаточны для создания "шумового оформления" компьютерных игрушек, но для серьёзной работы со звуком это слишком убого...

- обработка аудио потоков - это вообще отдельный серьёзный вопрос, и его нужно бы разобрать отдельно и детально;

- ... всё это напомнило про большую работу по экспериментированию с аудиообработкой, которую я делал лет 5-6 назад, и которая вылилась в достаточно обстоятельное описание, которое и лежит вот здесь: аудио tools - самое время его достать и реставрировать применительно к текущей задаче;

- в стандартной библиотеке Python достаточно много модулей мультимедийной обработки (беру документацию по версии 3.2.2) - The Python Standard Library:
22. Multimedia Services
22.1. audioop — Manipulate raw audio data
22.2. aifc — Read and write AIFF and AIFC files
22.3. sunau — Read and write Sun AU files
22.4. wave — Read and write WAV files
22.5. chunk — Read IFF chunked data
22.6. colorsys — Conversions between color systems
22.7. imghdr — Determine the type of an image
22.8. sndhdr — Determine type of sound file
22.9. ossaudiodev — Access to OSS-compatible audio devices
Но (по поверхностному взгляду) - это только зачаточные возможности по аудиообработке. А серьёзная обработка может быть легко сделана:
- либо запуском как дочерних процессов аудиоутилит развитых проектов (ALSA, SoX, Ogg etc.);
- либо прямым использованием DLL библиотек этих же проектов.
Это связано ещё и с тем, что аудиообработка - это часто ресурсоёмкие алгоритмы цифровой обработки сигналов (DSP), а Python уступает в производительности на таких задачах в 40 и более раз (сообщается и о 100 раз). А увязывание Python-кода с исполняющими функциями C/C++, в общем, понятно, и уже хорошо рассмотрено: связка Python + C/C++.

P.S. вот как оно всё славно одно к одному вяжется ;-)

P.P.S. и тема эта - аудио - продолжаться будет здесь: обработка аудио потоков.

Ali
Писатель
Сообщения: 57
Зарегистрирован: 08 окт 2011, 08:00
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Ali » 09 сен 2013, 15:19

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

Тема сюда "переползла" вот отсюда:
Есть и ещё одна тема, заслуживающая совершенно отдельной темы рассмотрения: Python и графика, Python и создание GUI приложений...
Но это уже на потом, на десерт ...
Достаточно часто требуется сделать очень простой граф. интерфейс. PyQt или PyGtk для такой задачи явно избыточны, а Tk я недолюбливаю. :-)
В linux под gtk есть очень простой путь -- Zenity.
Zenity это утилита, которая позволяет выводить на экран диалоговые окна GTK+ из командной строки и скриптов командной оболочки. https://help.gnome.org/users/zenity/sta ... on.html.ru
Возможности:
  • Color Selection DialogUse the --color-selection option.
  • Forms DialogUse the --forms option.
  • Message Dialog Error, Info, Question, Warning
  • Password DialogUse the --password option.
  • Scale DialogUse the --scale option.
  • Диалоговое окно ввода текстаUse the --entry option.
  • Диалоговое окно выбора файлаUse the --file-selection option.
  • Диалоговое окно календарьUse the --calendar option.
  • Диалоговое окно спискаUse the --list option.
  • Диалоговое окно текстовой информацииUse the --text-info option.
  • Диалоговое окно хода выполненияUse the --progress option.
  • Значок уведомленияUse the --notification option.
Для python существует модуль PyZenity.
сайт проекта -- http://brianramos.com/?page_id=38
PyPi -- https://pypi.python.org/pypi/PyZenity
Вложения
inf.png

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

Re: Python - графика

Непрочитанное сообщение Olej » 24 окт 2013, 14:49

Ali писал(а): Достаточно часто требуется сделать очень простой граф. интерфейс. PyQt или PyGtk для такой задачи явно избыточны, а Tk я недолюбливаю. :-)
Возвращаюсь в тему ... ;-)
Ali писал(а): В linux под gtk есть очень простой путь -- Zenity.
Обязательно посмотрю.

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

Re: Python - графика

Непрочитанное сообщение Olej » 24 окт 2013, 16:20

Olej писал(а):
Ali писал(а): Достаточно часто требуется сделать очень простой граф. интерфейс. PyQt или PyGtk для такой задачи явно избыточны, а Tk я недолюбливаю. :-)
Возвращаюсь в тему ... ;-)
Tkinter ... это никак не "просто Tk" ;-) , это интерфейс из Python к средствам рисования Tk, но он полностью скрывает Tk, и предоставляет свой собственный развитый API виджетов для программирования в Python.
Есть некоторые особенности:

1. Tkinter, хотя и обозначается модуль в составе библиотеки стандартных модулей Python ... но потребует дополнительной установки (в тех дистрибутивах где я видел).

2. Модуль Tkinter потребуется отдельно устанавливать для Python 2 и Python 3 ... или только для той версии, которая вас интересует (Python 2 и Python 3 могут быть установлены в системе одновременно ... будь то в Linux или в Windows).

- установка в Fedora (RFR 17) и др. .rpm:

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

# yum install tkinter
...
# yum install python3-tkinter.i686
...
- установка в Debian 7.0 и др. .deb:

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

$ aptitude search python-tk 
p   python-tk           - Tkinter - написание Tk программ на Python 
p   python-tk-dbg       - Tkinter - Writing Tk applications with Python (debug extension)
p   python-tksnack      - Sound extension to Tcl/Tk and Python/Tkinter - Python library
# apt-get install python-tk 
…

$ aptitude search python3-tk 
p   python3-tk          - Tkinter - Writing Tk applications with Python 3.x
p   python3-tk-dbg      - Tkinter - Writing Tk applications with Python 3.x (debug extension) 
# apt-get install python3-tk
...
По названиям пакетов ... тут нужно проявить некоторую сообразительность ;-) , как видно, дистрибьюторы называют что и как хотят.

Что касается доустановки Tkinter в Windows, то тут (пока?) ничего не могу сказать.

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

Re: Python - графика

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

Olej писал(а): Tkinter ...
Есть некоторые особенности:
3. Что касается написания имени пакета (об этом раньше, на стр.1 ;-) обсждения уже говориось):
- Tkinter в Python 2;
- tkinter в Python 3;

Но это обходится (особенно для .py программ, которые должны работать под любыми версиями Python), если записать импорт вот так:

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

try: 
    from tkinter import * 
except ImportError: 
    from Tkinter import * 
4. По поводу руководств по использованию и примеров ... уже писал:
Olej писал(а): Подробнейшее описание использования с примерами есть в уже упоминавшейся книге Марк Лутц - Программирование на Python. Том 1, 4-е издание (по этой ссылке её можно свободно скачать):
Изображение
В этом томе книги целая здоровенная часть (>400 стр.) посвящена Tkinter:
III
Программирование
графических интерфейсов
Больше по Tkinter ничего и не нужно для начала работы...

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

Re: Python - графика

Непрочитанное сообщение Olej » 24 окт 2013, 16:50

Olej писал(а): Tkinter ...
Есть некоторые особенности:
5. Я тут слепил приложение "по мотивам" учебного курса Coursera, можете поиграться:

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

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import random
import math
try:
    from tkinter import *
except ImportError: 
    from Tkinter import *

# initialize global variables used in your coden
val_range = 100
secret = 0
guesses = 0
limits = 7

# helper function to start and restart the game
def new_game():
    global secret, guesses, limits 
    print( "\nNew game, range: [ 0...{} )".format( val_range ) )
    secret = random.randrange( 0,val_range ) 
    guesses = 0
    limits = int( math.ceil( math.log( val_range, 2 ) ) )

def new_range( high ):
    global val_range
    val_range = high
    if guesses > 0 :
        print( "... game over" )
    new_game()
    
def input_guess( event ):
    global guesses
    try :
        value = int( ent.get() )
    except ValueError:
        print( "Error: value must be integer!" )
        return;
    ent.delete( 0, END )
    guesses += 1
    if value < secret :
        print( "{} - lower ...".format( value ) )
    elif value > secret :
        print( "{} - higher ...".format( value ) )
    else :
        print( "Player wins!" )
        new_game()
        return
    if guesses >= limits :        
        print( "Computer wins! Secret number was {}".format( secret ) )
        new_game()
        return
        
root = Tk()
root.title( 'Угадай число!' )
root.geometry( '300x140' )

Label( root, text='Вводите следующее число...' ).pack( side=TOP )
but1 = Button( root, text='     Новая игра      ', command=new_game ).pack( side=BOTTOM )
but2 = Button( root, text='Диапазон 0...100 ', command=(lambda: new_range( 100 )) ).pack( side=BOTTOM )
but3 = Button( root, text='Диапазон 0...1000', command=(lambda: new_range( 1000 )) ).pack( side=BOTTOM )

ent = Entry( root, width=10 )
ent.pack( side=TOP ) 
ent.focus() # избавить от необходимости выполнять щелчок мышью по нажатию клавиши Enter
ent.bind( '<Return>', input_guess )

new_game()
root.mainloop()


Выполнять можно хоть в Python 2, хоть в Python 3 ("что в лоб, что по лбу" ;-) ):

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

olej@notebook:~/2013_WORK/Python/GUI/Tkinter/Py3$ python gnt.py
...

olej@notebook:~/2013_WORK/Python/GUI/Tkinter/Py3$ python3 gnt.py

New game, range: [ 0...100 )
12 - lower ...

New game, range: [ 0...100 )

New game, range: [ 0...1000 )
500 - lower ...
750 - lower ...
875 - lower ...
945 - lower ...
970 - higher ...
957 - lower ...
967 - higher ...
Player wins!

New game, range: [ 0...1000 )
...

Вот то, что показано выше - это вывод хода игры, протокол, который выводится на терминал.

Изображение
Вложения
gnt.py
(1.98 КБ) 435 скачиваний

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

Re: Python - графика

Непрочитанное сообщение Olej » 24 окт 2013, 17:22

Olej писал(а):
Ali писал(а): Достаточно часто требуется сделать очень простой граф. интерфейс. PyQt или PyGtk для такой задачи явно избыточны, а Tk я недолюбливаю. :-)
Возвращаюсь в тему ... ;-)
PyQt ...

Интерфейс Python к Qt4 (я никогда не видел интерфейса Python к Qt3).

1. Тоже потребует инсталляций дополнительных модулей, и тоже раздельно - для Python 2 и Python 3.

- Python 2 :

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

$ aptitude search python-qt 
p   ipython-qtconsole                  - enhanced interactive Python shell - Qt console 
p   python-qt4                         - Python bindings for Qt4 
p   python-qt4-dbg                     - Python bindings for Qt4 (debug extensions) 
p   python-qt4-dbus                    - D-Bus Support for PyQt4 
p   python-qt4-dbus-dbg                - D-Bus Support for PyQt4 (debug extensions) 
p   python-qt4-dev                     - Development files for PyQt4 
p   python-qt4-doc                     - документация и примеры для PyQt4 
p   python-qt4-gl                      - Python bindings for Qt4's OpenGL module 
p   python-qt4-gl-dbg                  - Python bindings for Qt4's OpenGL module (debug extension) 
p   python-qt4-phonon                  - Python bindings for Phonon 
p   python-qt4-phonon-dbg              - Python bindings for Phonon (debug extensions) 
p   python-qt4-sql                     - интерфейс Python к модулю Qt4 SQL 
p   python-qt4-sql-dbg                 - Python bindings for PyQt4's SQL module (debug extension) 

$ sudo apt-get install python-qt4 python-qt4-dev python-qt4-doc
...
Необходимо скачать 41,0 MБ архивов. 
После данной операции, объём занятого дискового пространства возрастёт на 93,2 MB.
...
Настраивается пакет python-qt4-doc (4.9.3-4) …
- Python 3 :

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

$ aptitude search  python3-pyqt* 
p   python3-pyqt4                      - Python3 bindings for Qt4 
p   python3-pyqt4-dbg                  - Python3 bindings for Qt4 (debug extensions) 
p   python3-pyqt4.phonon               - Python3 bindings for Phonon 
p   python3-pyqt4.phonon-dbg           - Python3 bindings for Phonon (debug extensions) 
p   python3-pyqt4.qsci                 - Python 3 bindings for QScintilla 2 
p   python3-pyqt4.qtopengl             - Python 3 bindings for Qt4's OpenGL module 
p   python3-pyqt4.qtopengl-dbg         - Python 3 bindings for Qt4's OpenGL module (debug extension) 
p   python3-pyqt4.qtsql                - Python3 bindings for PyQt4's SQL module 
p   python3-pyqt4.qtsql-dbg            - Python3 bindings for PyQt4's SQL module (debug extension) 

# apt-get install python3-pyqt4 
...
Настраивается пакет python-qt4-doc (4.9.3-4) …

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

Re: Python - графика

Непрочитанное сообщение Olej » 24 окт 2013, 17:28

Olej писал(а):
Olej писал(а):
Ali писал(а): Достаточно часто требуется сделать очень простой граф. интерфейс. PyQt или PyGtk для такой задачи явно избыточны, а Tk я недолюбливаю. :-)
Возвращаюсь в тему ... ;-)
PyQt ...
2. Простейшее приложение ... для ощущения внешнего вида, как это выглядит:

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

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4.QtGui import * 

# Каждое приложение должно создать объект QApplication 
# sys.argv - список аргументов командной строки 
application = QApplication(sys.argv) 

# QWidget - базовый класс для всех объектов интерфейса 
# пользователя; если использовать для виджета конструктор 
# без родителя, такой виджет станет окном 
widget = QWidget() 

widget.resize(320, 240)                 # изменить размеры виджета 
widget.setWindowTitle("Hello, World!")  # установить заголовок 
widget.show()                           # отобразить окно на экране 

sys.exit(application.exec_())           # запуск основного цикла приложения 

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

olej@notebook:~/2013_WORK/Python/GUI/PyQt$ python hw3pyqt.py 
...
Вложения
hw3pyqt_001.png
hw3pyqt_001.png (4.08 КБ) 7297 просмотров
hw3pyqt.py
(958 байт) 479 скачиваний

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

Re: Python - графика

Непрочитанное сообщение Olej » 24 окт 2013, 17:37

Olej писал(а):
Olej писал(а): PyQt ...
2. Простейшее приложение ... для ощущения внешнего вида, как это выглядит:
3. Теперь то же, но Python 3:

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

olej@notebook:~/2013_WORK/Python/GUI/PyQt$ python3 hw3pyqt.py 
Gtk-Message: Failed to load module "canberra-gtk-module"
Причём само GUI-приложене нормально выполняется...

Это какие-то перекрёстные междуусобные разборки между GTK и Qt ... Но, чтоб такого не было ... установим ему что ему хочется ;-) :

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

olej@notebook:~/2013_WORK/Python/GUI/PyQt$ aptitude search canberra-gtk-
p   libcanberra-gtk-common-dev                      - simple abstract interface for playing event sounds                  
p   libcanberra-gtk-dev                             - simple abstract interface for playing event sounds                  
p   libcanberra-gtk-module                          - translates GTK+ widgets signals to event sounds                     
p   libcanberra-gtk-module-dbg                      - libcanberra GtkModule detached debugging symbols        

olej@notebook:~/2013_WORK/Python/GUI/PyQt$ sudo apt-get install libcanberra-gtk-module
...
Настраивается пакет libcanberra-gtk-module:i386 (0.28-6) …
И всё ;-) :

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

olej@notebook:~/2013_WORK/Python/GUI/PyQt$ python3 hw3pyqt.py 
...
Так и запишем: работает с Python и 2 и 3.

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

Re: Python - графика

Непрочитанное сообщение Olej » 24 окт 2013, 17:45

Olej писал(а): PyQt ...
4. В какое-то время от PyQt отпочковался проект PySide, и теперь они оба развиваются параллельно.

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

olej@notebook:~/2013_WORK/Python/GUI/PyQt$ aptitude search python3.2-pyside*
v   python3.2-pyside.phonon                                   -
v   python3.2-pyside.qtcore                                   -
v   python3.2-pyside.qtdeclarative                            -
v   python3.2-pyside.qtgui                                    -
v   python3.2-pyside.qthelp                                   -
v   python3.2-pyside.qtnetwork                                -
v   python3.2-pyside.qtopengl                                 -
v   python3.2-pyside.qtscript                                 -
v   python3.2-pyside.qtsql                                    -
v   python3.2-pyside.qtsvg                                    -
v   python3.2-pyside.qttest                                   -
v   python3.2-pyside.qtuitools                                -
v   python3.2-pyside.qtwebkit                                 -
v   python3.2-pyside.qtxml                                    -
Некоторые из разработчиков называют PySide более предпочтительным и удобным для использования, чем оригинальный PyQt.

Разницу PySide и PyQt читаем здесь: Differences_Between_PySide_and_PyQt. Там же есть некоторые рекомендации по портированию кода PyQt в PySide.

Ответить

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

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

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