Python - графика

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

Модератор: Olej

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

Re: Python - графика

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

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

1. Есть очень хороший учебник (перевод): Учебник PyGTK 2.0

2. Тоже может потребовать установки модулей, но для Python 2 нужные модули могут быть уже установлены (в разных дистрибутивах Linux ... и в зависимости от DE, наверное). По крайней мере хорошо бы проверить:

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

olej@notebook:~/2013_WORK/HISTORY/10.2013/24$ aptitude search python-gtk
p   bpython-gtk                                          - fancy interface to the Python interpreter - GTK+ frontend
p   python-gtk-gnash                                     - GNU Shockwave Flash (SWF) player - Python bindings
p   python-gtk-vnc                                       - VNC viewer widget for GTK+2 (Python binding)
i A python-gtk2                                          - Python-привязки для набора элементов графического интерфейса GTK+
p   python-gtk2-dbg                                      - Python bindings for the GTK+ widget set (debug extension)
i   python-gtk2-dev                                      - GTK+ bindings: devel files
i A python-gtk2-doc                                      - Python bindings for the GTK+ widget set - documentation
p   python-gtk2-tutoria                                  - tutorial for the GTK2 python library
p   python-gtkglext1                                     - GtkGLext python bindings
p   python-gtkmvc                                        - model-view-controller (MVC) implementation for pygtk
p   python-gtkmvc-doc                                    - pygtkmvc documentation, tutorial and examples
i A python-gtksourceview2                                - Python bindings for the GtkSourceView widget
p   python-gtkspell                                      - Python bindings for the GtkSpell library
3. Простейший пример (Python 2), как это выглядит:

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

#!/usr/bin/env python
#-*- coding: UTF-8 -*-

import gtk

def button_clicked(button):
    print 'Hello World!'

def main():
    window = gtk.Window()
    window.set_default_size(240, 180)
    window.set_title('Hello World!')
    window.connect('destroy', lambda w: gtk.main_quit())

    button = gtk.Button('Press Me')
    button.connect('clicked', button_clicked)
    button.show()

    window.add(button)
    window.present()

    gtk.main()


if __name__ == '__main__':
    main()

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

olej@notebook:~/2013_WORK/Python/GUI/PyGTK$ python hw2gtk.py
Hello World!
Hello World!
Hello World!
...
Вложения
hw3gtk.py_018.png
hw3gtk.py_018.png (5.43 КБ) 7246 просмотров
hw3gtk.py
(490 байт) 471 скачивание

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

Re: Python - графика

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

Olej писал(а): PyGTK - Интерфейс Python к GTK+.
...

2. Тоже может потребовать установки модулей, но для Python 2 нужные модули могут быть уже установлены (в разных дистрибутивах Linux ... и в зависимости от DE, наверное).
4. Пакетов PyGTK под Python 3 я не нашёл ... почти наверняка реализация PyGTK под Python 3 есть на сайте проекта, в виде исходных кодов и т.д.
Но! ...

5.
Начиная с версии 2012 года (версии 2.8), обёртки объектов Glib вынесены в отдельную библиотеку — PyGObject, в которая должна полностью вытеснить PyGTK при использовании GTK+ версии 3

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

$ aptitude search python3-gi 
p   python3-gi             - Python 3 bindings for gobject-introspection libraries 
p   python3-gi-cairo       - Python 3 Cairo bindings for the GObject library 
p   python3-gi-dbg         - Python 3 bindings for gobject-introspection libraries (debug extension)
(обратите внимание как называются пакеты!)
После установки python3-gi предыдущий пример можно переписать (имена API и др. многое поменялось! ... ну, и импорт и т.д.):

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

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

from gi.repository import Gtk

def button_clicked(button):
    print( 'Hello World!' )

def main():
    window = Gtk.Window()
    window.set_default_size(240, 180)
    window.set_title('Hello World!')
    window.connect('destroy', lambda w: Gtk.main_quit())

    button = Gtk.Button('Press Me')
    button.connect('clicked', button_clicked)
    button.show()

    window.add(button)
    window.present()

    Gtk.main()


if __name__ == '__main__':
    main()
Вот вам на Python 3:

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

olej@notebook:~/2013_WORK/Python/GUI/PyGTK$ python3 hw4gtk.py
Hello World!
Hello World!
Hello World!
...
Картинка будет в точности та же, что и предыдущая ... повторяться не будем ;-)

P.S. В точности то же приложение можно выполнить (с той же картинкой) и в Python 2 ... но с уймой warnings (в терминал) от GTK: то ему color-схема не та, то какието offset ... с совместимостью надо разбираться.
Хотя, судя по описаниям PyGObject, с ним должны работать и 2 и 3.
Вложения
hw4gtk.py
(510 байт) 482 скачивания

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

Re: Python - графика

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

Olej писал(а): PyGTK - Интерфейс Python к GTK+.
6. По миграции кода из PyGTK в PyGObject есть достаточно полное руководство : PyGObject - GLib/GObject/GIO Python bindings.

И на русском ;-) языке : Кратко о PyGI

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

Re: Python - графика

Непрочитанное сообщение Olej » 25 окт 2013, 01:53

Ali писал(а): Для python существует модуль PyZenity.
сайт проекта -- http://brianramos.com/?page_id=38
PyPi -- https://pypi.python.org/pypi/PyZenity
OK ;-)

1. берём здесь: PyZenity-0.1.7.tar.gz

2. устанавливаем так:

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

olej@notebook:~/2013_WORK/Python/GUI/PyZenity$ tar -xzvf PyZenity-0.1.7.tar.gz
PyZenity-0.1.7/
PyZenity-0.1.7/PyZenity.py
PyZenity-0.1.7/PKG-INFO
PyZenity-0.1.7/setup.py
olej@notebook:~/2013_WORK/Python/GUI/PyZenity$ cd PyZenity-0.1.7
- Python 2 :

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

olej@notebook:~/2013_WORK/Python/GUI/PyZenity/PyZenity-0.1.7$ sudo python setup.py install
running install
running build
running build_py
running install_lib
copying build/lib.linux-i686-2.7/PyZenity.py -> /usr/local/lib/python2.7/dist-packages
byte-compiling /usr/local/lib/python2.7/dist-packages/PyZenity.py to PyZenity.pyc
running install_egg_info
Writing /usr/local/lib/python2.7/dist-packages/PyZenity-0.1.7.egg-info
- Python 3 :

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

olej@notebook:~/2013_WORK/Python/GUI/PyZenity/PyZenity-0.1.7$ sudo python3 setup.py install
running install
running build
running build_py
creating build/lib
copying PyZenity.py -> build/lib
running install_lib
copying build/lib/PyZenity.py -> /usr/local/lib/python3.2/dist-packages
byte-compiling /usr/local/lib/python3.2/dist-packages/PyZenity.py to PyZenity.cpython-32.pyc
running install_egg_info
Writing /usr/local/lib/python3.2/dist-packages/PyZenity-0.1.7.egg-info
3. примеры кода (хоть Python 2, хоть 3):

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

import PyZenity

a = PyZenity.GetText( text="Enter the string : ", entry_text="", password=False )

print( a )

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

olej@notebook:~/2013_WORK/Python/GUI/PyZenity$ python enter.py
...
map
enter.png
enter.png (8.59 КБ) 7233 просмотра

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

import PyZenity

x = PyZenity.List( ["choices","test1","test2"], title="selection", boolstyle="checklist",
                   editable=False, select_col="ALL", sep='|',
                   data=[["","hello","hi"],["","1","2"]])
print( x )

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

olej@notebook:~/2013_WORK/Python/GUI/PyZenity$ python select.py
...
['1', '2']
selection.png
selection.png (10.91 КБ) 7234 просмотра

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

Re: Python - графика

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

Olej писал(а): PyGTK - Интерфейс Python к GTK+.
ОК, из тех GUI-фреймворков, что упоминались ранее, и что меня интересуют, остался один:

wxPython

1. Проект wxPython, как несложно догадаться, происходит от широко известного родительского проекта wxWidgets. В основе, wxWidgets — библиотека GUI, реализованная на C++.
Для работы библиотеки wxWidgets используют низкоуровневым API (native) конкретной платформы, главная задача при этом — быть как можно более системо-независимой и работать под самыми разнообразными операционными системами. Таким образом параллельно существуют несколько различных портов wxWidgets: wxGTK, wxMSW, wxMac, wxPalmOS, wxOS2, wxMGL, wxX11.
Это то, что я помню из wxWidgets ;-)

2. Библиотеки wxWidgets гораздо более чужеродные Linux, чем GTK+ или Ot, потому всё необходимое для использования wxPython нужно устанавливать дополнительно:

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

$ aptitude search python-wx 
p   python-wxglade      - GUI designer written in Python with wxPython 
p   python-wxgtk2.8     - wxWidgets Cross-platform C++ GUI toolkit (wxPython binding) 
p   python-wxgtk2.8-dbg - wxWidgets Cross-platform C++ GUI toolkit (wxPython binding, debug version) 
p   python-wxmpl        - Painless matplotlib embedding in wxPython 
p   python-wxtools      - wxWidgets Cross-platform C++ GUI toolkit (wxPython common files) 
p   python-wxversion    - wxWidgets Cross-platform C++ GUI toolkit (wxPython version selector) 
Минимально достаточно будет установить python-wxgtk2, всё остальное необходимое он подтянет по зависимостям...

3. Самое минимальное "приложение" ;-) (трудно придумать что-то ещё проще) при использовании wxPython будет иметь вид:

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

import wx 

class App( wx.App ): 

    def OnInit(self): 
        frame = wx.Frame( parent=None, title='Bare' ) 
        frame.Show() 
        return True 
    
app = App() 
app.MainLoop() 
Вложения
Bare_018.png
Bare_018.png (3.82 КБ) 7227 просмотров

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

Re: Python - графика

Непрочитанное сообщение Olej » 25 окт 2013, 15:10

Olej писал(а): wxPython
4. По wxPython издано парочка обстоятельных книг (от его автора).
Есть перевод одной: WxPython in Action (перевод) - обстоятельно и более чем достаточно для квалифицированной работы.

5. Вот ещё одно приложение (из книги)...
Для внешнего вида кода ... + оно демонстрирует оригинальным образом перенаправление потоков SYSOUT и SYSERR из Python-кода в созданное окно:

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

import wx
import sys

class Frame(wx.Frame):

    def __init__(self, parent, id, title):
        print "Frame __init__"
        wx.Frame.__init__(self, parent, id, title)

class App(wx.App):

    def __init__(self, redirect=True, filename=None):
        print "App __init__"
        wx.App.__init__(self, redirect, filename)

    def OnInit(self):
        print "OnInit"                                                        # Writing to stdout
        # Creating the frame
        self.frame = Frame(parent=None, id=-1, title='Startup')
        self.frame.Show()
        self.SetTopWindow(self.frame)
        print >> sys.stderr, "A pretend error message"   # Writing to stderr
        return True

    def OnExit(self):
        print "OnExit"

if __name__ == '__main__':
    app = App(redirect=True)     # Text redirection starts here
    print "before MainLoop"        # The main event loop is entered here
    app.MainLoop()
    print "after MainLoop"
Запуск приложения ... очень любопытно проследить какие сообщения print будут отправлены в окно приложения, а какие — в терминал запуска:

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

$ python sysout.py 
App __init__
after MainLoop
А вот само окно приложения:
stdout-stderr.png
stdout-stderr.png (8.14 КБ) 7225 просмотров
6. Все примеры в руководствах (и Интернет) для wxPython показаны в синтаксисе Python 2.
Это объясняется тем, нужно думать, тем, что ещё на середину 2012 года создатель и вдохновитель wxPython Robin Dunn сообщал о сборке wxPython в своём блоге исключительно в порядке экспериментов.
На сайте проекта, в качестве последних стабильных реализаций, представлены (на 31 августа 2013г.) только реализации под Python 2.7.

7. Высказываются мнения, что реализация wxPython могла бы быть стандартным GUI фреймворком для Python … если бы хронологически раньше эту позицию не занял Tkinter. WxPython используется в достаточно многих открытых публичных проектах.

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

Re: Python - графика

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

Olej писал(а):
Olej писал(а): PyGTK - Интерфейс Python к GTK+.
ОК, из тех GUI-фреймворков, что упоминались ранее, и что меня интересуют, остался один:

wxPython
Всё, что из всего предыдущего обсуждения сложилось, внятно и последовательно (надеюсь) описано связным текстом здесь: Python.

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

Re: Python - графика

Непрочитанное сообщение Olej » 12 июн 2015, 16:47

Достаточно интересная статья Анализ временных рядов с помощью python
24 декабря в 12:01

В сегодняшней статье, я попытаюсь описать процесс анализа временных рядов с помощью python и модуля statsmodels. Данный модуль предоставляет широкий набор средств и методов для проведения статистического анализа и эконометрики.
Это, конечно, ещё не очень серьёзный анализ временных рядов, или DSP обработки временных последовательностей.
Но это может быть очень неплохой отправной точкой для развития, потому что дорастить это математическими методами и DSP-алгоритмами - дело не столь сложное. Такие подходы могут очень сильно "выстрелить" в реальных (железных) системах обработки данных, в системах АСУТП, встраиваемой автоматики и т.п.
На это стоит обратить внимание.

Интересно то, что в статье показывается не только способы анализа данных, но их при этом визуализации:
Изображение
Обычно именно после визуализации человеку становится понятно какие методы обработки дальше прилагать к таким данным. И, опять же, наблюдая результат применения очередного метода, "на глаз" становится сразу понятно стоит ли возиться с этим методом дальше.

Ну, и от того же автора статьи в тему:

Введение в анализ данных с помощью Pandas

Введение в визуализацию данных при анализе с помощью Pandas

Изображение

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

Re: Python - графика

Непрочитанное сообщение Olej » 02 ноя 2015, 13:59

И говоря о графике Python, совершенно нельзя не упомнить Reinteract - совершенно прелестнейшая штучка:
Изображение
Изображение

Аватара пользователя
Lepton
Писатель
Сообщения: 73
Зарегистрирован: 18 окт 2011, 20:26
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Lepton » 26 ноя 2015, 15:00

Если оставить за скобками GUI, то применительно к заявленной теме "Python - графика" можно вспомнить о библиотеки PyOpenGL
с примером особо мудрить не стал :-D

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from OpenGL.GL import * 
from OpenGL.GLU import * 
from OpenGL.GLUT import *

x = 50
y = 50
ESCAPE = '\033'

def keyPressed(*args):
    if args[0] == ESCAPE:
	    glutDestroyWindow(window)
	    sys.exit()

def InitGL():
	glClearColor(0.5, 0.5, 0.5, 1.0)
	glLoadIdentity()

def glut_print( x,  y,  font,  text, r,  g , b , a):
    blending = False 
    if glIsEnabled(GL_BLEND) :
        blending = True
    glColor3f(1,1,1)
    glWindowPos2f(x,y)
    for ch in text :
        glutBitmapCharacter( font , ctypes.c_int( ord(ch) ) )

    if not blending :
        glDisable(GL_BLEND)

def DrawGLScene():
	glClear(GL_COLOR_BUFFER_BIT)
	glLoadIdentity()
	glBegin(GL_QUADS)
	glColor3f(0.3, 0.5, 1.0)
	glVertex3f(-0.8, 0.8, 0.0)
	glColor3f(1.0, 0.0, 0.0)
	glVertex3f(0.8, 0.8, 0.0)
	glColor3f(0.0, 0.0, 1.0)
	glVertex3f(0.8, -0.8, 0.0)
	glColor3f(0.0, 1.0, 0.0)
	glVertex3f(-0.8, -0.8, 0.0)
	glEnd()
	glut_print( x , y , GLUT_BITMAP_TIMES_ROMAN_24 , "Hello World!" , 1.0 , 1.0 , 1.0 , 1.0 )
	glutSwapBuffers()

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) 
glutInitWindowSize(320, 240)
glutInitWindowPosition(x, y)
glutInit(sys.argv)
window = glutCreateWindow(b"Test PyOpenGL")
glutDisplayFunc(DrawGLScene)
glutKeyboardFunc(keyPressed)
InitGL()
print "Нажать ESC для выхода."
glutMainLoop()

$ python PyOpenGL.py
PyOpenGL.jpg
PyOpenGL.jpg (16.94 КБ) 4672 просмотра

Ответить

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

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

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