(→Aplicaciones Educativas Gratis para Android) |
(→Desarrollo de Aplicaciones con Kivy) |
||
(6 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
+ | == Desarrollo de Aplicaciones con Kivy == | ||
+ | <br /> | ||
+ | ===Qué es kivy:=== | ||
+ | Es un framework para desarrollar aplicaciones multi plataforma con python. Funciona en OS X, Linux, Windows, iOS y Android. | ||
+ | <br /> | ||
+ | <br /> | ||
+ | ===Primera aplicación:=== | ||
+ | <center> | ||
+ | <gallery widths=200px heights=100px perrow=6 caption="Mostrar un mensaje en kivy"> | ||
+ | File:kivy_hola1.png | ||
+ | File:kivy_hola_run.png | ||
+ | </gallery> | ||
+ | En este ejemplo se muestra un mensaje en pantalla mediante un Label de kivy. Para ello se importan las clases App y Label. Luego se crea una clase para la aplicacion (debe heredar de App) y un metodo "build" que retorna un nuevo Label con el texto a mostrar. Finalmente se ejecuta la aplicacion con el método "run" en la clase creada. | ||
+ | </center> | ||
+ | <br /> | ||
+ | ===Botones:=== | ||
+ | Con la siguiente línea creamos un botón con el texto "Hola mundo".<br /> | ||
+ | btn1 = Button(text='Hola mundo') | ||
+ | |||
+ | A continuación le decimos al botón que llame a la funcion "hacer_algo" (que debe haberse declarado previamente) al hacer click.<br /> | ||
+ | btn1.bind(on_press=hacer_algo) | ||
+ | <center> | ||
+ | <gallery widths=200px heights=100px perrow=6 caption="Botones"> | ||
+ | File:Button_kivy.png | ||
+ | File:pressButton_kivy.png | ||
+ | </gallery> | ||
+ | </center> | ||
+ | |||
+ | <center> | ||
+ | <gallery widths=200px heights=100px perrow=6 caption="Botones personalizados"> | ||
+ | File:PersonalButton_kivy.png | ||
+ | File:PersonalButton_kv.png | ||
+ | File:Btn_zan_kivy.png | ||
+ | </gallery> | ||
+ | En esta ocación se hace uso del lenguaje KV que posee kivy para establecer la ruta de la imagen, su posicion y tamaño. Además se declara una clase con el comportamiento de un botón y las propiedades de una imagen (hereda de ButtonBehavior e Image).<br/> | ||
+ | Nótese la relación entre el nombre de la clase en python y en el archivo KV. Cabe destacar que el archivo KV debe poseer como nombre el mismo nombre que tiene la clase de la aplicación en el archivo de python. | ||
+ | </center> | ||
+ | <br /> | ||
+ | ===Layouts:=== | ||
+ | Los layouts son una forma de organizar los widgets.<br/> | ||
+ | Existen varios tipos de layouts, a continuación se detallan los principales:<br/> | ||
+ | <b>GridLayout:</b> Los widgets pertenecientes (hijos) de un gridlayout se organizan en columnas y filas. | ||
+ | <b>BoxLayout:</b> Los widgets pertenecientes (hijos) de un boxlayout se organizan de manera vertical u horizontal. <br>BoxLayout(orientation='vertical') o BoxLayout(orientation='horizontal'). | ||
+ | <b>FloatLayout:</b> Los widgets pertenecientes (hijos) de un floatlayout se organizan en posiciones relativas al widget<br> que los contiene, respetando el pos_hint (posicion relativa) y size_hint (tamaño relativo). | ||
+ | <center> | ||
+ | <gallery widths=200px heights=100px perrow=6 caption="Layouts"> | ||
+ | File:Gridlayout.gif | ||
+ | File:Boxlayout.gif | ||
+ | File:Floatlayout.gif | ||
+ | </gallery> | ||
+ | </center> | ||
+ | <b>Agregando widgets a un layout:</b><br> | ||
+ | Para agregar un widget a un layout se utiliza el método add_widget de la siguiente forma:<br/> | ||
+ | |||
+ | layout = BoxLayout(padding=10) #Creamos un layout<br/> | ||
+ | button = Button(text='My first button') #Creamos un botón<br/> | ||
+ | layout.add_widget(button) #Agregamos el botón al layout creado previamente<br/> | ||
+ | |||
+ | Luego, con el método remove_widget se lo puede eliminar:<br/> | ||
+ | layout.remove_widget(button)<br/> | ||
+ | Y con el método clear_widgets se eliminan todos los widgets hijos que posee el layout.<br/> | ||
+ | layout.clear_widgets()<br/> | ||
+ | |||
+ | ===Launcher interactivo:=== | ||
+ | Mediante el launcher interactivo que provee kivy es posible programar desde el intérprete de python viendo en vivo los cambios realizados sobre la aplicación. | ||
+ | A continuación se detalla un ejemplo. | ||
+ | from kivy.app import App | ||
+ | from kivy.interactive import InteractiveLauncher #Importa el launcher interactivo | ||
+ | |||
+ | class TestApp(App): | ||
+ | def build(self): | ||
+ | return Widget() | ||
+ | |||
+ | i = InteractiveLauncher(TestApp()) #Crea un launcher interactivo recibiendo la aplicación base como parámetro. | ||
+ | i.run() #Se ejecuta. | ||
+ | |||
+ | Posteriormente todo lo que hagamos se verá reflejado en la aplicación que ya se encuentra corriendo. Por ejemplo, agregar un botón. | ||
+ | from kivy.uix.button import Button | ||
+ | i.root.add_widget(Button(text="Hola mundo!", pos=(100,100))) | ||
+ | |||
+ | ===Lenguaje KV:=== | ||
+ | Permite crear el árbol de widgets de manera simple y enlazar properties y callbacks. Además es una manera ágil y rápida de aplicar cambios al diseño de la interfaz.<br> | ||
+ | Existen dos maneras de cargar un archivo de kv:<br> | ||
+ | - Mediante el mismo nombre que la aplicacion omitiendo la palabra "App" y en minúscula las letras, por ejemplo: MyApp -> my.kv<br> | ||
+ | - De manera explícita mediante utilizando la siguiente sentencia: Builder.load_file('path/to/file.kv') e importando previamente el módulo correspondiente.<br> | ||
+ | <b>Conceptos básicos:</b><br> | ||
+ | Para referenciar una clase de un widget existente se usa la siguiente sintaxis: | ||
+ | <MiWidget>: | ||
+ | Luego podemos instanciar nuevos widgets hijos:<br> | ||
+ | <MiWidget>: | ||
+ | BoxLayout: ... | ||
+ | Button: ... | ||
+ | Button: ... | ||
+ | Los módulos correspondientes a las clases utilizadas deben estar importadas desde el archivo ".py". | ||
+ | |||
== Aplicaciones Educativas Libres para Android == | == Aplicaciones Educativas Libres para Android == | ||
<br /> | <br /> |
Es un framework para desarrollar aplicaciones multi plataforma con python. Funciona en OS X, Linux, Windows, iOS y Android.
En este ejemplo se muestra un mensaje en pantalla mediante un Label de kivy. Para ello se importan las clases App y Label. Luego se crea una clase para la aplicacion (debe heredar de App) y un metodo "build" que retorna un nuevo Label con el texto a mostrar. Finalmente se ejecuta la aplicacion con el método "run" en la clase creada.
Con la siguiente línea creamos un botón con el texto "Hola mundo".
btn1 = Button(text='Hola mundo')
A continuación le decimos al botón que llame a la funcion "hacer_algo" (que debe haberse declarado previamente) al hacer click.
btn1.bind(on_press=hacer_algo)
En esta ocación se hace uso del lenguaje KV que posee kivy para establecer la ruta de la imagen, su posicion y tamaño. Además se declara una clase con el comportamiento de un botón y las propiedades de una imagen (hereda de ButtonBehavior e Image).
Nótese la relación entre el nombre de la clase en python y en el archivo KV. Cabe destacar que el archivo KV debe poseer como nombre el mismo nombre que tiene la clase de la aplicación en el archivo de python.
Los layouts son una forma de organizar los widgets.
Existen varios tipos de layouts, a continuación se detallan los principales:
GridLayout: Los widgets pertenecientes (hijos) de un gridlayout se organizan en columnas y filas. BoxLayout: Los widgets pertenecientes (hijos) de un boxlayout se organizan de manera vertical u horizontal.
BoxLayout(orientation='vertical') o BoxLayout(orientation='horizontal'). FloatLayout: Los widgets pertenecientes (hijos) de un floatlayout se organizan en posiciones relativas al widget
que los contiene, respetando el pos_hint (posicion relativa) y size_hint (tamaño relativo).
Agregando widgets a un layout:
Para agregar un widget a un layout se utiliza el método add_widget de la siguiente forma:
layout = BoxLayout(padding=10) #Creamos un layout
button = Button(text='My first button') #Creamos un botón
layout.add_widget(button) #Agregamos el botón al layout creado previamente
Luego, con el método remove_widget se lo puede eliminar:
layout.remove_widget(button)
Y con el método clear_widgets se eliminan todos los widgets hijos que posee el layout.
layout.clear_widgets()
Mediante el launcher interactivo que provee kivy es posible programar desde el intérprete de python viendo en vivo los cambios realizados sobre la aplicación. A continuación se detalla un ejemplo.
from kivy.app import App from kivy.interactive import InteractiveLauncher #Importa el launcher interactivo class TestApp(App): def build(self): return Widget() i = InteractiveLauncher(TestApp()) #Crea un launcher interactivo recibiendo la aplicación base como parámetro. i.run() #Se ejecuta.
Posteriormente todo lo que hagamos se verá reflejado en la aplicación que ya se encuentra corriendo. Por ejemplo, agregar un botón.
from kivy.uix.button import Button i.root.add_widget(Button(text="Hola mundo!", pos=(100,100)))
Permite crear el árbol de widgets de manera simple y enlazar properties y callbacks. Además es una manera ágil y rápida de aplicar cambios al diseño de la interfaz.
Existen dos maneras de cargar un archivo de kv:
- Mediante el mismo nombre que la aplicacion omitiendo la palabra "App" y en minúscula las letras, por ejemplo: MyApp -> my.kv
- De manera explícita mediante utilizando la siguiente sentencia: Builder.load_file('path/to/file.kv') e importando previamente el módulo correspondiente.
Conceptos básicos:
Para referenciar una clase de un widget existente se usa la siguiente sintaxis:
<MiWidget>:
Luego podemos instanciar nuevos widgets hijos:
<MiWidget>: BoxLayout: ... Button: ... Button: ...
Los módulos correspondientes a las clases utilizadas deben estar importadas desde el archivo ".py".