PDF de programación - Poniendonos serios con Kivy

Imágen de pdf Poniendonos serios con Kivy

Poniendonos serios con Kivygráfica de visualizaciones

Publicado el 19 de Marzo del 2018
5.486 visualizaciones desde el 19 de Marzo del 2018
4,8 MB
34 paginas
Creado hace 3a (25/11/2016)
Introducción

Entendiendo cómo se usa

Diseño visual

Poniendonos serios con Kivy

Sofía Martin y Lucas Chiacchio
Facultad de Informática - UNLP

Noviembre 2016

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Contenido

1

Introducción
¿Qué es?
Antes que nada

2 Entendiendo cómo se usa

Estructura
Comunicación

3 Diseño visual

Agregar color a label y botones

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Características

Librería UI Python orientada app multitouch.
Motor gráfico basado en OpenGL ES 2.
100 % libre.
Widgets: bloques GUI pre armados.
Versión actual:

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Plataformas

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Instalación

Instalar kivy:

git clone http://github.com/kivy/kivy

Instalar y configurar algunas de todas las formas para compilar.

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Opciones compilación

Usando el proyecto python-for-android.
Imagen virtual ya armada con Kivy Android.
Utilizando la herramienta Buildozer.
Kivy Launcher.

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Kivy Launcher

No se necesita compilar.
Bajar al app Kivy Launcher.
Copiar a /sdcard/kivy/<aplicacion>
<aplicacion> debe ser un directorio con:

Archivo principal: main.py
Información sobre la app :android.txt

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Buildozer - preparación

Modificación del archivo buildozer.spec:

source.dir = /path/del/proyecto/app
version = 1.0
requirements = kivy==master
Path de android ndk(python-for-andorid)

android.ndk_path = ~/git/github/python-for-android/

android/android-ndk-r8c

Path de android sdk(python-for-andorid)

android.sdk_path = ~/git/github/python-for-android/

android/android-sdk-linux

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Buildozer - Instalación

Una vez preparado el archivo
Instalación de la app

Copiar el archivo buildozer.spec al directorio del proyecto.
buildozer -v android debug deploy

Buildozer compila, genera apk y la instala en el dispositivo
conectado.

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Hello Pycon 2015

from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):

def build(self):

return Button(text='Hello Pycon 2015')

TestApp().run()

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Armado

sub-classing la clase App

Implementar su método build()
para que corra como una
instancia de un Widget (es el root
del árbol de widgets).

Instanciar esta clase y correr el
método run().

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Clase App

from kivy.app import App
class TestApp(App):

Método build()

def build(self):

return Button(text='Hello

Pycon 2015')

Método run()

TestApp().run()

Introducción

Entendiendo cómo se usa

Diseño visual

Kv language

Separa el diseño de la interfaz gráfica del código.
Archivo separado con extensión .kv.
Indentación identifica la estructura.
Similar a css con html - glade con gtk.

Ejemplo

<Hola>:

# cada clase en la aplicación puede identicarse con

una regla como esta
Button: #se agrega el widget indicado.

text:'Hola Pycon 2015' # configuración de una de las

propiedades del o layout

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Entendiendo cómo se usa

Diseño visual

Archivo py + kv

main.py
from kivy.app import App

class TestApp(App):

pass

if __name__=='__main__':

TestApp().run()

test.kv
classTestApp(App) :⇒ test.kv

Button:

text:'Hola Pycon 2015'

Este archivo define el Widget
Root que se conectará con la App
y será la base del árbol widget de
la aplicación.

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Tipos de Keywords

Entendiendo cómo se usa

Diseño visual

Hay 3 tipos de palabras claves específicas en kv:
app: se refiere a la instancia de la aplicación
root: es el widget base.
self: se refiere al widget actual.
test.kv

main.py

class Hola(FloatLayout):
....

def cambiar(self):

self.ids['saludo'].text

='Chau'

Button:

id:saludo
text:'Hola Pycon 2015!!'
on_press: root.cambiar()

<Hola>:

BoxLayout:

orientation: 'vertical' if

self.width < self.height

else 'horizontal'

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Comunicación por id

test.kv
Image:

id: personaje
source: 'imagenes/
piepagina.png'

Entendiendo cómo se usa

Diseño visual

main.py

self.pers = self.ids.

personaje

self.pers.pos =

(550,50) if

self.pers.pos == self.
center else self.center

self.pers = self.ids['

personaje']

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Entendiendo cómo se usa

Diseño visual

Comunicación por property

Properties: objetos que se modifican a través del patrón observer.

class ClockLayout(BoxLayout):

time_prop = ObjectProperty(None)

....
def cambiar(self):

self.time_prop.text = "demo"
self.ids['saludo'].text='Chau'
self.pers.pos = (550,50) if self.
pers.pos == self.center else
self.center

<ClockLayout>:

time_prop: time
texto: leyendo
Label:

id: time

Button:

text:'Cambiar'
on_press: root.

cambiar()

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Importar

Entendiendo cómo se usa

Diseño visual

main.py
from x.y import z as name
from os.path import isdir
import numpy as np

test.kv
#:import name x.y.z
#:import isdir os.path.isdir
#:import np numpy

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

No repeat yourself

Entendiendo cómo se usa

Diseño visual

<GridLayout>:

cols: 2
#spacing: 10
row_default_height: 10

<GridMia@GridLayout>:

cols: 2
#spacing: 10
row_default_height:

.......
GridMia:

Label:

text: 'Usuario:'

GridLayout:
cols: 2

row_default_height: 10

GridLayout:

cols: 2

row_default_height: 10

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Entendiendo cómo se usa

Diseño visual

Ver errores en Android:

adb
Logger

Logger.info('info: iniciando')
Logger.exception('Info: NO se pudo iniciar')

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Cambiar de pantallas

Entendiendo cómo se usa

Diseño visual

ScreenManager permite el cambio de pantalla.

<Info>:

screen_manager:

screen_manager

screen_manager.transition
.direction = 'right'

ScreenManager:

id: screen_manager

Screen:

name: 'inicio'
id: inicio

......
Button:
on_release: root.iniciar(

inicio, 'piso_1')

def iniciar(self,

actual_screen,
next_screen):

self.

list_of_prev_screens
.append(
actual_screen.name)

self.screen_manager.

current =
next_screen

Logger.info('datos:

cambio pantalla')

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Cambiar de pantallas

Entendiendo cómo se usa

Diseño visual

ScreenManager cargar dinámicamente

def jugar(self):

Builder.load_file('tabaco.kv')
import tabaco

def on_leave(self):

Builder.unload_file('tabaco.kv')
.......

class MenuPerder(Screen):

pass

<MenuPerder>:

id: 'perder'
name: 'perder'

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Entendiendo cómo se usa

Diseño visual

Toolbar:

id: toolbar
title: 'KivyMD Kitchen Sink'
background_color: app.theme_cls.

primary_color

left_action_items: [['menu',

lambda x: app.nav_drawer.
toggle()]]

right_action_items: [['dots-

vertical', lambda x: app.
nav_drawer.toggle()]]

ScreenManager:

id: scc
Screen:

name: bb

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Entendiendo cómo se usa

Diseño visual

Relacionar un widget con una acción desde kv y desde python.

Button:

text: "Cambiar"
on_press: root.cambiar("

chau")

def cambiar(self, texto):

label = self.ids["hola"]
label.text = texto

Conectar desde python un botón con una función y pasarle
parámetros

class Mota(Button):

----------
self.bind(on_release=

partial(self.
historial_mota,
historial))

<Mota>:

background_color: (0.0,

0.0, 0.0, 0.0)

size_hint: (0.1, .1)
markup: True
valign: 'bottom'

Sofía Martin y Lucas Chiacchio Facultad de Informática - UNLP
Poniendonos serios con Kivy

Introducción

Comunicación

Creación de un servicio

Entendiendo cómo se usa

Diseño visual

Recibir notificaciones cuando se suspende usando service.
Recuperar el estado al minimizar la aplicación.

def on_pause(self):

if platform == 'android':

from android import AndroidService
service = AndroidService('Datos Sensores', 'running')
service.start('service started')
self.service = service
return True

#~ #~
def on_resume(self):

self.service.stop()
self.service = None

--

from plyer import notification
def informar()

no
  • Links de descarga
http://lwp-l.com/pdf9687

Comentarios de: Poniendonos serios con Kivy (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad