(→Otros:) |
(→Desarrollo de Aplicaciones con Kivy) |
||
(No se muestran 11 ediciones intermedias de 2 usuarios) | |||
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 /> | ||
Línea 25: | Línea 120: | ||
*GeoGebra: | *GeoGebra: | ||
:: Es una Aplicación muy intuitiva y fácil de usar, nos permite graficar en un plano puntos, gráficos y funciones, mostrándonos información de las figuras. Con licencia GPLv3. | :: Es una Aplicación muy intuitiva y fácil de usar, nos permite graficar en un plano puntos, gráficos y funciones, mostrándonos información de las figuras. Con licencia GPLv3. | ||
− | :: [http://www.geogebra.org/ | + | :: [http://www.geogebra.org/ Página del proyecto] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="GeoGebra"> | <gallery widths=200px heights=100px perrow=6 caption="GeoGebra"> | ||
Línea 112: | Línea 207: | ||
<br /> | <br /> | ||
<br /> | <br /> | ||
+ | |||
== Aplicaciones Educativas Gratis para Android == | == Aplicaciones Educativas Gratis para Android == | ||
<br /> | <br /> | ||
Línea 118: | Línea 214: | ||
*Mathematics: | *Mathematics: | ||
:: Es una aplicación que es similar a una calculadora, muy completa e intuitiva, con muchas opciones para gráficos, estadísticas, sistemas de numeración, unidades de medida y etc. | :: Es una aplicación que es similar a una calculadora, muy completa e intuitiva, con muchas opciones para gráficos, estadísticas, sistemas de numeración, unidades de medida y etc. | ||
− | :: [https://play.google.com/store/apps/details?id=de.daboapps.mathematics | + | :: [https://play.google.com/store/apps/details?id=de.daboapps.mathematics Página del proyecto en Google Play] |
− | :: [https://www.facebook.com/pages/Dabo-Apps/519499284775693 | + | :: [https://www.facebook.com/pages/Dabo-Apps/519499284775693 Página del proyecto en Facebook] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Mathematics"> | <gallery widths=200px heights=100px perrow=6 caption="Mathematics"> | ||
Línea 132: | Línea 228: | ||
*Tablas de Multiplicar: | *Tablas de Multiplicar: | ||
:: Es una aplicación sencilla que muestra las tablas y complementa con un cuestionario sobre esa tabla, lamentablemente no incluye un examen total, no muestra propagandas durante su uso. | :: Es una aplicación sencilla que muestra las tablas y complementa con un cuestionario sobre esa tabla, lamentablemente no incluye un examen total, no muestra propagandas durante su uso. | ||
− | :: [http://cgelozapps.blogspot.com.ar/2013/11/tablas-de-multiplicar.html | + | :: [http://cgelozapps.blogspot.com.ar/2013/11/tablas-de-multiplicar.html Página del proyecto] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Tablas de Multiplicar"> | <gallery widths=200px heights=100px perrow=6 caption="Tablas de Multiplicar"> | ||
Línea 144: | Línea 240: | ||
*Trucos de Matemáticas: | *Trucos de Matemáticas: | ||
:: Es una aplicación intuitiva y funcional para familiarizarse con la resolución de cuentas matemáticas ágilmente, y cuenta con una sección de juegos a modo de entrenamiento para facilitar y afianzar las técnicas aprendidas. También cuenta con una sección de dos jugadores en el mismo dispositivo, lo que lo hace mas entretenido. Lamentablemente cuenta con una pequeña propaganda. | :: Es una aplicación intuitiva y funcional para familiarizarse con la resolución de cuentas matemáticas ágilmente, y cuenta con una sección de juegos a modo de entrenamiento para facilitar y afianzar las técnicas aprendidas. También cuenta con una sección de dos jugadores en el mismo dispositivo, lo que lo hace mas entretenido. Lamentablemente cuenta con una pequeña propaganda. | ||
− | :: [https://play.google.com/store/apps/details?id=example.matharithmetics | + | :: [https://play.google.com/store/apps/details?id=example.matharithmetics Página del proyecto en Google Play] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Trucos de Matemáticas"> | <gallery widths=200px heights=100px perrow=6 caption="Trucos de Matemáticas"> | ||
Línea 162: | Línea 258: | ||
*Tabla Periódica Español: | *Tabla Periódica Español: | ||
:: Es una aplicación que muestra información de los elementos de la tabla, como número atómico, masa, densidad a 20°, punto de fusión, punto de ebullición, año de descubrimiento y descubridor. Lamentablemente tiene mucha propaganda. | :: Es una aplicación que muestra información de los elementos de la tabla, como número atómico, masa, densidad a 20°, punto de fusión, punto de ebullición, año de descubrimiento y descubridor. Lamentablemente tiene mucha propaganda. | ||
− | :: [https://play.google.com/store/apps/details?id=com.educationalapptube.android.tablaperiodicaspanish | + | :: [https://play.google.com/store/apps/details?id=com.educationalapptube.android.tablaperiodicaspanish Página del proyecto en Google Play] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Tabla Periódica Español"> | <gallery widths=200px heights=100px perrow=6 caption="Tabla Periódica Español"> | ||
Línea 179: | Línea 275: | ||
*Wlingua: | *Wlingua: | ||
:: Es una aplicación muy buena para aprender y practicar vocabulario en distintos idiomas, propone asociar sonidos con tarjetas de significados y al revés, muy entretenida, sin publicidad, cuenta con versiones para portugués, inglés, alemán, español e italiano. | :: Es una aplicación muy buena para aprender y practicar vocabulario en distintos idiomas, propone asociar sonidos con tarjetas de significados y al revés, muy entretenida, sin publicidad, cuenta con versiones para portugués, inglés, alemán, español e italiano. | ||
− | :: [http://www.wlingua.com/es/ | + | :: [http://www.wlingua.com/es/ Página del proyecto] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Wlingua"> | <gallery widths=200px heights=100px perrow=6 caption="Wlingua"> | ||
Línea 191: | Línea 287: | ||
*Duolingo: | *Duolingo: | ||
− | :: Es una aplicación muy buena con | + | :: Es una aplicación muy buena con una guía de lecciones ordenada por dificultad, intuitivo y fácil, muy completo, tiene grabaciones y traducciones desde y hacia el idioma a aprender, contemplando la pronunciación, muy recomendable. |
− | :: [https://play.google.com/store/apps/details?id=com.duolingo | + | :: [https://play.google.com/store/apps/details?id=com.duolingo Página del proyecto en Google Play] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Duolingo"> | <gallery widths=200px heights=100px perrow=6 caption="Duolingo"> | ||
Línea 209: | Línea 305: | ||
<br /> | <br /> | ||
*Nasa: | *Nasa: | ||
− | :: Es una | + | :: Es una aplicación que nos muestra imágenes, vídeos e información de las misiones de la nasa, sus centros, programas y novedades. |
− | :: [http://www.nasa.gov/centers/ames/iphone/index.html | + | :: [http://www.nasa.gov/centers/ames/iphone/index.html Página del proyecto] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Nasa"> | <gallery widths=200px heights=100px perrow=6 caption="Nasa"> | ||
Línea 222: | Línea 318: | ||
*Reglas de Ortografía: | *Reglas de Ortografía: | ||
− | :: Es una | + | :: Es una aplicación con un widget que tiene las reglas ortográficas y el widget va haciendo preguntas cada determinado tiempo. |
− | :: [http://www.lacalesa.es/apps/show/3 | + | :: [http://www.lacalesa.es/apps/show/3 Página del proyecto] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Reglas de Ortografía"> | <gallery widths=200px heights=100px perrow=6 caption="Reglas de Ortografía"> | ||
Línea 234: | Línea 330: | ||
*Juegos Dinosaurios para niños: | *Juegos Dinosaurios para niños: | ||
− | :: Es una | + | :: Es una aplicación entretenida para los mas chicos, un juego de puzzles con dinosaurios tiene una versión paga, sin publicidad, a pesar de tener publicidad es arriba muy chiquita y no molesta. |
− | :: [https://play.google.com/store/apps/details?id=com.batoki.kids.toddlers.puzzle.dinosaurs | + | :: [https://play.google.com/store/apps/details?id=com.batoki.kids.toddlers.puzzle.dinosaurs Página del proyecto en Google Play] |
− | :: [https://plus.google.com/u/0/114773628290963314029/posts | + | :: [https://plus.google.com/u/0/114773628290963314029/posts Página del proyecto en Google+] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Juegos Dinosaurios para niños"> | <gallery widths=200px heights=100px perrow=6 caption="Juegos Dinosaurios para niños"> | ||
Línea 248: | Línea 344: | ||
*Trivia Lex: | *Trivia Lex: | ||
− | :: Es una | + | :: Es una aplicación que presenta una trivia sobre leyes, lamentablemente no tiene mucha explicación de los contenidos mas que la trivia y la respuesta correcta. |
− | :: [https://play.google.com/store/apps/details?id=dpi.trivialex | + | :: [https://play.google.com/store/apps/details?id=dpi.trivialex Página del proyecto en Google Play] |
<center> | <center> | ||
<gallery widths=200px heights=100px perrow=6 caption="Trivia Lex"> | <gallery widths=200px heights=100px perrow=6 caption="Trivia Lex"> |
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".