Actualmente
los teléfonos están viviendo un boom tecnológico, lo que permite que
evolucionen a un ritmo increíblemente acelerado, es por esto que la gran mayoría
de lenguajes de programación han tratado de acercarse a esta nueva plataforma y
poder crear aplicaciones que corran sobre ella.
Existen
muchos S.O para celulares pero el gran dominador del mercado actualmente es
Android, debido a esto no es raro que hayan surgido diversas librerías que
permitan programar en Android. Y entre todos ellos Python no es la excepción y
en la actualidad ya cuenta con varias formas de acércanos a la plataforma
Android.
Algunas
de las más reconocidas son Kivy, SL4A y QPython, sin embargo la opción QPython está
descartada en este post debido a que está hecho para ejecutarse y programar
directamente sobre un dispositivo Android, lo mismo que SL4A por lo tanto nos
vamos a enfocar a la programación con Kivy al ser multiplataforma.
¿Cómo instalar Kivy?
Para
instalar Kivy basta con ir a la página oficial y en ella bajar la versión adecuada
de acuerdo a nuestro sistema, en este caso, la versión para Windows, después de
bajarla y descomprimirla copiamos el archivo kivy-3.4.bat y lo mandamos a la
carpeta Shell:sendto como acceso directo y le cambiamos el nombre a kivy-1.9.
De
esta manera al tener nuestro archivo *.py le damos con click derecho y luego a “enviar
a” y elegimos como opción kivy-1.9, así podemos probar nuestras aplicaciones.
Programando con Kivy
Realizaremos
un ejemplo sencillo en kivy el cual simplemente desplegara el mensaje hola
mundo en pantalla usando un botón, que en este ejemplo no realizara ninguna acción,
el código es el siguiente:
from kivy.app import App
from kivy.uix.button import Button
class Hello(App):
def build(self):
btn = Button(text='Hello World')
return btn
Hello().run()
Como
podemos observar lo único que hace esta clase es regresar un botón al que se le
agrega la palabra “Hola Mundo” y ejecutar la aplicación con el método run().
Este ejemplo se puede descargar desde este link.
El
siguiente ejemplo es tomado de los ejemplos de prueba de la propia herramienta Kivy,
la cual obtiene la posición en pantalla cuando damos clic sobre ella, además nos
indica el tipo de evento que es llamado y el número de eventos que han
ocurrido, todo esto en colores generados aleatoriamente:
import kivy
kivy.require('1.0.6')
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.graphics import Color, Rectangle, Point, GraphicException
from random import random
from math import sqrt
def calculate_points(x1, y1, x2, y2, steps=5):
dx = x2 - x1
dy = y2 - y1
dist = sqrt(dx * dx + dy * dy)
if dist < steps:
return None
o = []
m = dist / steps
for i in xrange(1, int(m)):
mi = i / m
lastx = x1 + dx * mi
lasty = y1 + dy * mi
o.extend([lastx, lasty])
return o
class Touchtracer(FloatLayout):
def on_touch_down(self, touch):
win = self.get_parent_window()
ud = touch.ud
ud['group'] = g = str(touch.uid)
with self.canvas:
ud['color'] = Color(random(), 1, 1, mode='hsv', group=g)
ud['lines'] = (
Rectangle(pos=(touch.x, 0), size=(1, win.height), group=g),
Rectangle(pos=(0, touch.y), size=(win.width, 1), group=g),
Point(points=(touch.x, touch.y), source='particle.png',
pointsize=5, group=g))
ud['label'] = Label(size_hint=(None, None))
self.update_touch_label(ud['label'], touch)
self.add_widget(ud['label'])
touch.grab(self)
return True
def on_touch_move(self, touch):
if touch.grab_current is not self:
return
ud = touch.ud
ud['lines'][0].pos = touch.x, 0
ud['lines'][1].pos = 0, touch.y
points = ud['lines'][2].points
oldx, oldy = points[-2], points[-1]
points = calculate_points(oldx, oldy, touch.x, touch.y)
if points:
try:
lp = ud['lines'][2].add_point
for idx in xrange(0, len(points), 2):
lp(points[idx], points[idx+1])
except GraphicException:
pass
ud['label'].pos = touch.pos
import time
t = int(time.time())
if t not in ud:
ud[t] = 1
else:
ud[t] += 1
self.update_touch_label(ud['label'], touch)
def on_touch_up(self, touch):
if touch.grab_current is not self:
return
touch.ungrab(self)
ud = touch.ud
self.canvas.remove_group(ud['group'])
self.remove_widget(ud['label'])
def update_touch_label(self, label, touch):
label.text = 'ID: %s\nPos: (%d, %d)\nClass: %s' % (
touch.id, touch.x, touch.y, touch.__class__.__name__)
label.texture_update()
label.pos = touch.pos
label.size = label.texture_size[0] + 20, label.texture_size[1] + 20
class TouchtracerApp(App):
title = 'Touchtracer'
icon = 'icon.png'
def build(self):
return Touchtracer()
def on_pause(self):
return True
if __name__ in ('__main__', '__android__'):
TouchtracerApp().run()
El
ejemplo se puede descargar del siguiente link. Como podemos observar Kivy es
una herramienta poderosa, que nos permite hacer cosas muy interesantes, que si
bien no tiene métodos tan eficientes como otras opciones al ser
multiplataforma, es una buena forma de comenzar en la programación de
aplicaciones para Android.
No hay comentarios.:
Publicar un comentario