Python Kivy: Desenvolvimento Python cross plataforma

Kivy é Biblioteca de código aberto Python para desenvolvimento rápido de aplicativos, que fazem uso de interfaces de usuário inovadoras, como recursos multi-touch e permite que o mesmo código seja executado em diversos sistemas operacionais.

Benefícios

Cross Plataforma

Kivy é roda em Linux, Windows, OS X, Android e iOS. O mesmo código é suportado em todas as plataformas. Ele permite usar nativamente a maioria das entradas, protocolos e dispositivos, incluindo WM_Touch, WM_Pen, Mac OS X Trackpad e Magic Mouse, Mtdev, Linux Kernel HID, TUIO. E já possui incluído um simulador de mouse multi-touch.

Licença e documentação

Kivy é 100% livre, sob uma licença MIT (a partir de 1.7.2) e LGPL 3 para as versões anteriores. O conjunto de ferramentas é profissionalmente desenvolvido, apoiado e utilizado. Pode-se usá-lo em um produto comercial. A estrutura é estável e tem uma API bem documentada, além de um guia de programação para a ajuda inicial.

Acelerador Gráfico

O motor gráfico é construído sobre OpenGL ES 2, usando um pipeline de gráficos modernos e rápidos. O kit de ferramentas vem com mais de 20 widgets, todos altamente extensíveis. Muitas partes são escritas em C usando Cython, e testadas com testes de alta qualidade.

Escopo

  • Sistema Operacional Linux Debian-Like;
  • Pyhton-2.7
  • Pyhton-3.5

Dependências Linux

sudo apt-get install -y \
    build-essential \
    ffmpeg \
    git \
    libavcodec-dev \
    libavformat-dev \
    libportmidi-dev \
    libsmpeg-dev \
    libswscale-dev \
    mercurial \
    zlib1g-dev

Instalação Cython

sudo aptitude install -y \
     cython \
     cython3

Instalação Python

sudo aptitude install -y \
     python-dev \
     python3-dev \
     python-pip \
     python-virtualenv

Também pode utilizar as outras maneiras indicadas nos artigos listados abaixo:

Instalação SDL2

# Install necessary system packages
sudo apt-get install -y \
    libsdl-mixer1.2-dev \
    libsdl-ttf2.0-dev \
    libsdl1.2-dev \
    libsdl2-dev \
    libsdl2-image-dev \
    libsdl2-mixer-dev \
    libsdl2-ttf-dev \

Instalação Kivy

sudo aptitude install -y \
     python-kivy \
     python3-kivy \
     python-kivy-examples

Criar ambientes Virtuais Python

Trabalhemos no diretório "projetos" no home do usuário ~/projetos.

mkdir ~/projetos

Criemos o diretório para o novo projeto

mkdir ~/projetos/teste_kivy

Criemos o ambiente virtual para Python-2.7

virtualenv -p python2.7 ~/projetos/teste_kivy/py27

Criemos o ambiente virtual para Python-3.5

virtualenv -p python3.5 ~/projetos/teste_kivy/py35

A estrutura ficará assim:

teste_kivy/
├── py27
│   ├── bin
│   ├── include
│   │   └── python2.7 -> /usr/include/python2.7
│   ├── lib
│   │   └── python2.7
│   │       ├── distutils -> /home/brito/projetos/0-aulas_udemy_kivy/py27/lib/python2.7/distutils
│   │       ├── encodings -> /usr/lib/python2.7/encodings
│   │       ├── lib-dynload -> /usr/lib/python2.7/lib-dynload
│   │       └── site-packages
│   │           ├── pip
│   │           │   ├── commands
│   │           │   ├── compat
│   │           │   ├── models
│   │           │   ├── operations
│   │           │   ├── req
│   │           │   ├── utils
│   │           │   ├── vcs
│   │           │   └── _vendor
│   │           │       ├── cachecontrol
│   │           │       │   └── caches
│   │           │       ├── colorama
│   │           │       ├── distlib
│   │           │       │   └── _backport
│   │           │       ├── html5lib
│   │           │       │   ├── filters
│   │           │       │   ├── treeadapters
│   │           │       │   ├── treebuilders
│   │           │       │   ├── treewalkers
│   │           │       │   └── _trie
│   │           │       ├── lockfile
│   │           │       ├── packaging
│   │           │       ├── pkg_resources
│   │           │       ├── progress
│   │           │       ├── requests
│   │           │       │   └── packages
│   │           │       │       ├── chardet
│   │           │       │       └── urllib3
│   │           │       │           ├── contrib
│   │           │       │           ├── packages
│   │           │       │           │   └── ssl_match_hostname
│   │           │       │           └── util
│   │           │       └── webencodings
│   │           ├── pip-9.0.1.dist-info
│   │           ├── pkg_resources
│   │           │   ├── extern
│   │           │   └── _vendor
│   │           │       └── packaging
│   │           ├── pkg_resources-0.0.0.dist-info
│   │           ├── setuptools
│   │           │   ├── command
│   │           │   └── extern
│   │           ├── setuptools-28.8.0.dist-info
│   │           ├── wheel
│   │           │   ├── signatures
│   │           │   ├── test
│   │           │   │   ├── complex-dist
│   │           │   │   │   └── complexdist
│   │           │   │   ├── extension.dist
│   │           │   │   ├── headers.dist
│   │           │   │   └── simple.dist
│   │           │   │       └── simpledist
│   │           │   └── tool
│   │           └── wheel-0.30.0a0.dist-info
│   ├── local
│   │   ├── bin -> /home/brito/projetos/teste_kivy/py27/bin
│   │   ├── include -> /home/brito/projetos/teste_kivy/py27/include
│   │   └── lib -> /home/brito/projetos/teste_kivy/py27/lib
│   └── share
│       └── python-wheels
└── py35
    ├── bin
    ├── include
    │   └── python3.5m -> /usr/include/python3.5m
    ├── lib
    │   └── python3.5
    │       ├── collections -> /usr/lib/python3.5/collections
    │       ├── config-3.5m-x86_64-linux-gnu -> /usr/lib/python3.5/config-3.5m-x86_64-linux-gnu
    │       ├── distutils
    │       │   └── __pycache__
    │       ├── encodings -> /usr/lib/python3.5/encodings
    │       ├── importlib -> /usr/lib/python3.5/importlib
    │       ├── lib-dynload -> /usr/lib/python3.5/lib-dynload
    │       ├── plat-x86_64-linux-gnu -> /usr/lib/python3.5/plat-x86_64-linux-gnu
    │       ├── __pycache__
    │       └── site-packages
    │           ├── pip
    │           │   ├── commands
    │           │   │   └── __pycache__
    │           │   ├── compat
    │           │   │   └── __pycache__
    │           │   ├── models
    │           │   │   └── __pycache__
    │           │   ├── operations
    │           │   │   └── __pycache__
    │           │   ├── __pycache__
    │           │   ├── req
    │           │   │   └── __pycache__
    │           │   ├── utils
    │           │   │   └── __pycache__
    │           │   ├── vcs
    │           │   │   └── __pycache__
    │           │   └── _vendor
    │           │       ├── cachecontrol
    │           │       │   ├── caches
    │           │       │   │   └── __pycache__
    │           │       │   └── __pycache__
    │           │       ├── colorama
    │           │       │   └── __pycache__
    │           │       ├── distlib
    │           │       │   ├── _backport
    │           │       │   │   └── __pycache__
    │           │       │   └── __pycache__
    │           │       ├── html5lib
    │           │       │   ├── filters
    │           │       │   │   └── __pycache__
    │           │       │   ├── __pycache__
    │           │       │   ├── treeadapters
    │           │       │   │   └── __pycache__
    │           │       │   ├── treebuilders
    │           │       │   │   └── __pycache__
    │           │       │   ├── treewalkers
    │           │       │   │   └── __pycache__
    │           │       │   └── _trie
    │           │       │       └── __pycache__
    │           │       ├── lockfile
    │           │       │   └── __pycache__
    │           │       ├── packaging
    │           │       │   └── __pycache__
    │           │       ├── pkg_resources
    │           │       │   └── __pycache__
    │           │       ├── progress
    │           │       │   └── __pycache__
    │           │       ├── __pycache__
    │           │       ├── requests
    │           │       │   ├── packages
    │           │       │   │   ├── chardet
    │           │       │   │   │   └── __pycache__
    │           │       │   │   ├── __pycache__
    │           │       │   │   └── urllib3
    │           │       │   │       ├── contrib
    │           │       │   │       │   └── __pycache__
    │           │       │   │       ├── packages
    │           │       │   │       │   ├── __pycache__
    │           │       │   │       │   └── ssl_match_hostname
    │           │       │   │       │       └── __pycache__
    │           │       │   │       ├── __pycache__
    │           │       │   │       └── util
    │           │       │   │           └── __pycache__
    │           │       │   └── __pycache__
    │           │       └── webencodings
    │           │           └── __pycache__
    │           ├── pip-9.0.1.dist-info
    │           ├── pkg_resources
    │           │   ├── extern
    │           │   │   └── __pycache__
    │           │   ├── __pycache__
    │           │   └── _vendor
    │           │       ├── packaging
    │           │       │   └── __pycache__
    │           │       └── __pycache__
    │           ├── pkg_resources-0.0.0.dist-info
    │           ├── __pycache__
    │           ├── setuptools
    │           │   ├── command
    │           │   │   └── __pycache__
    │           │   ├── extern
    │           │   │   └── __pycache__
    │           │   └── __pycache__
    │           ├── setuptools-28.8.0.dist-info
    │           ├── wheel
    │           │   ├── __pycache__
    │           │   ├── signatures
    │           │   │   └── __pycache__
    │           │   ├── test
    │           │   │   ├── complex-dist
    │           │   │   │   ├── complexdist
    │           │   │   │   │   └── __pycache__
    │           │   │   │   └── __pycache__
    │           │   │   ├── extension.dist
    │           │   │   │   └── __pycache__
    │           │   │   ├── headers.dist
    │           │   │   │   └── __pycache__
    │           │   │   ├── __pycache__
    │           │   │   └── simple.dist
    │           │   │       ├── __pycache__
    │           │   │       └── simpledist
    │           │   │           └── __pycache__
    │           │   └── tool
    │           │       └── __pycache__
    │           └── wheel-0.30.0a0.dist-info
    └── share
        └── python-wheels

Dependências para Kivy

Vamos utilizar os ambientes virtuais criados para prosseguir com a instalação.

em Python-2.x

source py27/bin/activate
pip install numpy Cython==0.23 pygame pygments docutils
pip install kivy

em Python-3.5

source py35/bin/activate
pip install numpy Cython==0.23 pygame pygments docutils
pip install kivy

Teste de execução

Código do "Exemplo de Uso"

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

Copie o código de exemplo de uso, salve-o em ~/projetos/teste_kivy/teste.py e no terminal execute os códigos abaixo:

source ~/projetos/teste_kivy/py27/bin/activate
python ~/projetos/teste_kivy/teste.py

source ~/projetos/teste_kivy/py35/bin/activate
python ~/projetos/teste_kivy/teste.py

Em ambos deverão aparecer uma tela como a tela abaixo.

GUI - Graphical User Interface (Exemplo de Uso)

Referências

https://kivy.org/docs/installation/installation-linux.html

Comentários