Escolar Documentos
Profissional Documentos
Cultura Documentos
en bash:
exportar utilizar SDL_export2=1 USE_GSTREAMER=1
Estas variables deben ajustarse cada vez que recompile kivy.
6. Instalar las otras dependencias, as como sus versiones dev (puede saltarse gst
reamer y gstreamer_dev si no va a utilizar el vdeo/audio):
python -m pip instalar cython docutils pygments kivy pypiwin32.deps".sdl2 \ kivy
.deps".glew kivy.deps".gstreamer kivy.deps".glew_dev.kivy deps".sdl2_dev \ kivy.
deps".gstreamer_dev --extra-index-url Https://kivy.org/downloads/packages/simple
/
7. Si ha descargado o clonan kivy a una ubicacin alternativa y no desea instalar
en el sitio- los paquetes lea la prxima seccin.
8. Finalmente compilar e instalar instalar withpip kivy, wherefilename filename
puede ser una direccin URL como Https://github.com/kivy/kivy/archive/master.zip d
e kivy master, o la ruta de acceso completa a una copia local de kivy zip.
Instalacin de Kivy a una ubicacin alternativa
en el desarrollo Kivy suele instalarse en una ubicacin alternativa y, a continuac
in, instala con python -m pip install -e ubicacin, lo que le permite permanecer en
su ubicacin original mientras estn disponibles para python. En ese caso es necesa
rio retorcer extra. Debido a un issuewheel y pip, instale la depen- revisin de ta
ncia ruedas topython\Lib\site-packages\kivy. Por lo que se deben trasladar a su
actual instalacin de kivy site-packages.
Despus de instalar las dependencias kivy y descargando o clonacin kivy a su lugar
favorito, haga lo siguiente:
1. Mover el contenido ofpython\Lib\site-packages\kivy\deps" toyour-path\kivy\dep
s" whereyour-path es la ruta donde se encuentra tu kivy.
2. Quitar thepython\Lib\site-packages\directorio kivy totalmente.
3. A partir de python\Lib\site-packages mover todos los kivy.deps". .pth archivos
y todos kivy.deps". .dist-info' directorios a ''tu ruta tokivy justo al lado.
Ahora puede compilar en su ubicacin actual kivy withmake orpython -m pip install
-e ubicacin o justpython setup.py build_ext --inplace.
Si kivy deja de ser importada, usted probablemente no elimine todos los archivos
.pth y la kivy o kivy.deps" carpetas de site-packages.
Hacer Python disponibles en cualquier lugar
hay dos mtodos para el lanzamiento de python en tus archivos .py.
8
ede ejecutar su aplicacin haciendo clic derecho sobre el archivo .py -> "Envia
r a" -> "python <python-version>".
La actualizacin de una versin anterior de Kivy dist
para instalar las ruedas nuevas para una distribucin Kivy anterior todos los arch
ivos y carpetas, excepto la carpeta python debe ser eliminado de la distribucin.
Esta carpeta python entonces ser tratada como un sistema normal instalado Python
y todos los pasos descritos en el captulo de instalacin puede ser continuado.
1.1.2 Instalacin en OS X
con Kivy.app
Nota: Este mtodo slo se ha probado en Mac OS X 10.7 y superior (64 bits). Para las
versiones anteriores a la 10.7 o 10.7 de 32 bits, tienes que instalar los compo
nentes usted mismo. Sugerimos usar homebrew para ello.
Para OS X 10.7 y posteriores, proporcionamos una Kivy.app incluido con todas las
dependencias. Descargarlo desde nuestra pgina de descargas. Viene como un archiv
o .7z que contiene:
Kivy.app
para instalar Kivy, usted debe:
1. Descargue la ltima versin desde Http://kivy.org/#download Kivy2.7z est utilizand
o Python 2 (Sistema), Kivy3.7z Python (python 3)
2. Extrigalo mediante un archivo de programa como Keka.
3. Copie el Kivy2.app o Kivy3.app como Kivy.app a /Aplicaciones. Pegue la siguie
nte lnea en la terminal:
9
o/
No olvide reemplazar <Framework_name>Con su marco. Esta herramienta osxrelocator
esencialmente cambia la ruta para el libs en el marco de tal manera que estn en
relacin con el ejecutable dentro del archivo .app, haciendo el marco porttil con e
l .app.
10
python-devel \ python-pip
OpenSuse
$ sudo zypper install python-\ \ python distutils-extra-gstreamer-0_10 \ pythonenchant \ gstreamer-0_10-plugins-buena \ \ python-devel Mesa-devel \ python-pip
$ sudo zypper install -t patrn devel_C_C++
Instalacin
# Asegrese de Pip Virtualenv y Se actualizan Setuptools sudo pip install --upgrad
e setuptools virtualenv pip
# Crear un virtualenv virtualenv --no-site-packages kivyinstall
# Introduzca el virtualenv . kivyinstall/bin/activar
pip
pip numpy Cython instalar instalar==0,23
# Si desea instalar pygame backend en lugar de sdl2 # puede instalar pygame util
izando el comando siguiente y aplicar usando SDL_Uso # export2=0. Si la configur
acin de kivy no encuentra sdl2 libs es # establece automticamente este valor a 0 y
luego intentar construir usando pygame.
pip instalar hg+Http://bitbucket.org/pygame/pygame
# instalar la versin estable de Kivy en el pip virtualenv instalar kivy # Para la
versin de desarrollo de Kivy, use el siguiente comando # pip instalar git+Https:
//github.com/kivy/kivy.git@master
instalar otros paquetes Virtualenv
# instalar la versin de desarrollo de buildozer en el pip virtualenv instalar git
+Https://github.com/kivy/buildozer.git@master
# instalar la versin de desarrollo de Player en el pip virtualenv instalar git+Ht
tps://github.com/kivy/plyer.git@master
# Instalar un par de dependencias KivyCatalog pip install -U pygments docutils
16
en una tienda de Android, as como la capacidad para ejecutar tus aplicaciones Kiv
y sin un paso de compilacin utilizando nuestra pre-preparados Kivy Launcher app.
1.1.6 Instalacin en Raspberry Pi
puede instalar Kivy manualmente, o bien puede descargar y arrancar KivyPie en el
Raspberry Pi. Ambas opciones se describen a continuacin.
Manual de instalacin (en Raspbian Jessie)
1. Instalar las dependencias:
sudo apt-get update sudo apt-get install libsdl libsdl2-dev2-imagen-dev2 libsdlmezclador-dev2 libsdl-ttf-dev \ pkg-config libgl1-mesa-dev libgles2-mesa-dev pyt
hon-setuptools libgstreamer1.0 \-dev git-core \ gstreamer1.0-plugins-{mal,base,b
uena,feo} \ gstreamer1.0-{omx,alsa} python-dev cython
2. Instalar Kivy globalmente en el sistema:
sudo pip install git+Https://github.com/kivy/kivy.git@master
3. O construir y utilizar inplace kivy (mejor para el desarrollo):
git clone cd Https://github.com/kivy/kivy kivy
hacer echo "export PYTHONPATH=$(PWD):\$PYTHONPATH" >> ~/.profile source ~/
.profile
instalacin manual (en Raspbian sibilante)
1. Agregar Gstreamer para APT 1.0 en /etc/apt/sources.list:
deb Http://vontaene.de/raspbian-updates/ . principal
2. Agregar clave para vontaene APT.de:
gpg --recv-keys 0C667A3E gpg --export -a 0C667A3E | sudo apt-key add 3. Instalar las dependencias:
sudo apt-get update sudo apt-get install libsdl libsdl2-dev2-imagen-dev2 libsdlmezclador-dev2 libsdl-ttf-dev \ pkg-config libgl1-mesa-dev libgles2-mesa-dev pyt
hon-setuptools libgstreamer1.0 \-dev git-core \ gstreamer1.0-plugins-{mal,base,b
uena,feo} \ gstreamer1.0-{omx,alsa} python-dev
4. Instalar el pip de fuente:
wget Https://raw.github.com/pypa/pip/master/contrib/get-pip.py sudo python get-p
ip.py
5. Instalar Cython desde fuentes (paquete debian son obsoletos):
18
Donde ir ?
Hicimos algunos juegos utilizando GPIO / entrada fsica llegamos en Pycon 2013: un
botn y una inclinacin. El check-out el https://github.com/kivy/piki. Tendr que ada
ptar los pines GPIO en el cdigo.
Un video para ver lo que estbamos haciendo con l: http://www.youtube.com/watch?v=N
VM09gaX6pQ
1.1.7 Solucin en OS X
tiene problemas instalando Kivy en OS X? Esta pgina contiene los problemas
"No se puede encontrar ningn proveedor de ventana valiosa" Error
Si obtienes un error como este:
$ python main.py [INFO ] Kivy v1.8.0-dev [INFO ] [Logger ] Registro en /Users/au
dreyr/.kivy/logs/kivy_13-07-07_2.txt [INFO ] [Factory ] 143 smbolos cargados [DEB
UG ] [Cache ] Regstrese <kv.lang>Con limit=none, timeout=Nona [DEBUG ] [Cache ] R
egstrese <kv.image>Con limit=none, timeout=60s [DEBUG ] [Cache ] Regstrese <kv.atl
as>Con limit=none, timeout=Nona [INFO ] [Image ] proveedores: img_imageio, img_t
ex, img_dds, img_LIF, img_gif (img_pygame ignorado) [DEBUG ] [Cache ] Regstrese <
kv.texture>Con limit=1000, timeout=60s [DEBUG ] [Cache ] Regstrese <kv.shader>Con
limit=1000, timeout=3600s [DEBUG ] [App ] Cargando kv </pong.kv> [Debug]
[Ventana ] ignorados <egl_rpi>(error de importacin) [Debug] [Ventana ] ignorados
<pygame>(error de importacin) [WARNING] [WinPygame ] SDL wrapper error al importa
r!
[Debug] [Ventana ] ignorados <sdl>(error de importacin) [Debug] [Ventana ] ignora
dos <x11>(error de importacin) [Crtica] [Ventana ] No se puede encontrar ningn prov
eedor de ventana valiosa a todos!
[Crtica] [App] No se puede obtener una ventana, abortar.
A continuacin, lo ms probable es que no se puede importar Kivy PyGame por algn moti
ImportError: dlopen(/Library/Frameworks/python.framework/VERSIONES/2.7/lib/pytho
n2.7/site-packages/pygame/base.so, 2): no se ha encontrado el smbolo: _SDL_Enable
UNICODE referenciados desde: /Library/Frameworks/python.framework/VERSIONES/2.7/
lib/python2.7/site-packages/pygame/base.tan esperado en: espacio de nombres plan
o en /Library/Frameworks/python.framework/VERSIONES/2.7/lib/python2.7/site-packa
ges/pygame/base.so
97 desde pygame.version importar
96 desde pygame.constants im
portar /Library/Frameworks/python.framework/VERSIONES/2.7/lib/python2.7/site-pac
kages/pygame/__init__.py en <module>() #93 94 En primer lugar, los mdulos "requer
ido" ---> 95 desde pygame.base importar
y aqu est otro ejemplo de PyGame error:
ImportError Rastreo (llamada ms reciente en ltimo lugar) <ipython-input-1-4a415d16
fbed>En <module>() ----> 1 import pygame
ImportError: dlopen(/Library/Frameworks/python.framework/VERSIONES/2.7/lib/pytho
n2.7/site-packages/pygame/base.so, 2): no se ha encontrado la imagen adecuada. En
contrar: 97 desde pygame.version importar
96 desde pygame.constants importar /Li
brary/Frameworks/python.framework/VERSIONES/2.7/lib/python2.7/site-packages/pyga
me/__init__.py en <module>() #93 94 En primer lugar, los mdulos "requerido" ---&g
t; 95 desde pygame.base import
/Library/Frameworks/python.framework/VERSIONES/2.7/lib/python2.7/site-packages/p
ygame/base.Por lo tanto: no coincidentes en la envoltura de la arquitectura univ
ersal de
la forma ms sencilla de solucionar estos errores de importacin PyGame es:
1. Eliminar thepygame paquete. (Por ejemplo, si obtiene el error anterior, delet
e /Library/Frameworks/python.framework/VERSIONES/2.7/lib/python2.7/site-packages
/pygame/ y el acompaamiento de huevo.
2. Intente instalar un PyGame binario para su versin de OS X. descargar de http:/
/www.
pygame.org/download.shtml.
3. Repita este proceso y pruebe diferentes PyGame OS X binarios hasta encontrar
uno que funcione.
1.2 Versin de desarrollo
es el desarrollo de la versin para desarrolladores y probadores. Tenga en cuenta
que cuando se ejecuta una versin de desarrollo, se est ejecutando cdigo potencialme
nte rota a su propio riesgo. Para utilizar la versin en desarrollo, primero deber
instalar las dependencias. Posteriormente, necesitar configurar Kivy en el ordena
dor de un modo que permite el fcil desarrollo. Para eso, por favor, consulte nues
tro documento de contribuyentes.
1.2.1 Instalacin de dependencias
para instalar las dependencias de Kivy, siga la siguiente gua para su plataforma.
Ubuntu
para Ubuntu 12.04 y superiores (probado a 14.04), simplemente teclee el siguient
e comando que instalar todos los paquetes necesarios:
21
export PYTHONPATH=~/cdigo/kivy:$PYTHONPATH
kivy para comprobar si est instalado, escriba el siguiente comando en el terminal
:
python -c "import kivy"
debera darle una salida similar a la siguiente:
$ python -c "import" kivy [INFO ] [Logger ] Registro en /Users/quanon/.kivy/logs
/kivy_15-12-31_21.txt [INFO ] [Screen] aplicar la configuracin de pantalla para M
Captulo
2 la
filosofa
en caso de que usted se est preguntando qu es todo acerca de Kivy y qu lo diferenci
a de otras soluciones, este documento es para usted.
2.1 Por qu molestarse?
Por qu desea utilizar Kivy? Despus de todo, hay muchos juegos de herramientas (o ma
rcos o plataformas) disponibles ah fuera - de forma gratuita. Tienes Qt y Flash,
para nombrar slo dos buenas opciones para el desarrollo de aplicaciones. Muchas d
e estas numerosas soluciones de apoyo ya Multi-Touch, entonces, qu es lo que hace
especial Kivy y vale la pena usar?
2.1.1
Kivy fresco est hecho para hoy y para maana. Nuevos mtodos de entrada como Multi-To
uch ingly exis- se han convertido en importantes. Hemos creado desde cero Kivy,
especficamente para este tipo de interaccin. Esto significa que hemos sido capaces
de repensar muchas cosas en trminos de interaccin con el ordenador, mientras que
los mayores (por no decir "anticuado", ms "bien establecido") toolkits llevar su
legado, que es a menudo una carga. No vamos a intentar- ing en vigor este nuevo
enfoque utilizando un ordenador en el cors de los modelos existentes (digamos un
solo puntero ratn interaccin). Queremos dejar florecer y le permiten explorar las
posibilidades. Esto es lo que realmente establece Kivy aparte.
2.1.2
Kivy rpido es rpido. Esto se aplica tanto a la ejecucin de la aplicacin y desarrollo
de aplicaciones de velocidades. Hemos timized Kivy op- de muchas maneras. Imple
mentamos la funcionalidad de tiempo crtico en el nivel C para aprovechar la poten
cia de los compiladores. Lo que es ms importante, tambin utilizamos algoritmos int
eligentes para minimizar las costosas operaciones. Tambin utilizamos la GPU, dond
e tenga sentido en nuestro contexto. La potencia de clculo de las tarjetas grficas
de hoy supera al de hoy la CPU por mucho para algunas tareas y algoritmos, espe
cialmente el dibujo. Por eso, tratamos de que la GPU hacer tanto trabajo como se
a posible, aumentando as el rendimiento considerablemente.
2.1.3
Kivy flexible es flexible. Esto significa que se puede ejecutar en una amplia va
riedad de dispositivos, incluyendo Android powered smartphones y tablets. Apoyam
os todos los principales sistemas operativos (Windows, Linux, Mac OS X). Ser fle
xible tambin significa que Kivy el rpido ritmo de desarrollo permite adaptarse rpid
amente a las nuevas tecnologas. Ms de una vez hemos agregado soporte para software
y dispositivos externos nuevos protocolos, a veces incluso antes de que fueran
liberados. Por ltimo, Kivy es tambin flexible en el que es posible utilizarlo en c
ombinacin con un gran nmero de diferentes soluciones de terceros. Por ejemplo, en
Windows apoyamos WM_TOUCH, que
25
significa que cualquier dispositivo que tiene Windows 7 Pen & Touch controla
dores slo trabajan con Kivy. En OS X se puede utilizar dispositivos con capacidad
CAPTULO
TRES
CONTRIBUYENDO
Hay muchas maneras en que usted puede contribuir a Kivy. Las revisiones de cdigo
son slo una cosa entre otros que se puede enviar para ayudar al proyecto. Tambin c
elebramos la retroalimentacin, informes de errores, peticiones de caractersticas,
mejoras en la documentacin, publicidad & promoviendo, pruebas, grficos contrib
uciones y muchas otras ideas. Hable con nosotros si usted quiere ayudar, y le ay
udaremos a ayudarnos.
3.1 Comentarios
Esta es la forma ms fcil de contribuir con algo. Si ests utilizando Kivy para su pr
opio proyecto, no dudes en compartir. No tiene que ser una empresa de clase alta
app, obviamente. Es muy motivador saber que la gente usa las cosas se desarroll
an y lo que les permite hacer. Si tienes algo que te gustara decirnos, por favor
no dude en comunicarse con nosotros. Capturas de pantalla y vdeos tambin son muy b
ienvenidos! Tambin estamos interesados en los problemas que tena al empezar. Por f
avor, se sienten alentados a cualquier informe que encontr obstculos tales como la
falta de documentacin, indicaciones engaosas o similar.
Somos perfeccionistas, por lo que, incluso si es slo un error de tipeo, hganoslo s
aber.
3.2 Informar un problema
si usted encuentra algo malo, un accidente, segfault, falta de documentacin, la o
rtografa no vlido o simplemente ejemplos extraos, dedique 2 minutos para informar d
el problema.
1. Mueva el nivel de registro para depurar mediante la edicin <user_directory>/.k
ivy/config.ini:
[kivy] log_level =
2 de depuracin. Ejecutar el cdigo nuevo y copiar/pegar la salida completa para Htt
p://gist.github.com/, in- cluye el registro de Kivy y python backtrace.
3. Abra Https://github.com/kivy/kivy/issues/
4. Establecer el ttulo de la cuestin
5. Explicar exactamente qu hacer para reproducir el problema y pegar el enlace de
la salida posted on Http://gist.github.com/
6. Validar el problema y listo!
el Desarrollo).
5. Instale nuestro gancho pre-commit que garantiza que su cdigo no violan nuestra
s styleguide ejecutando hacer gancho desde el directorio raz de tu clon. Esto eje
cutar nuestro styleguide verificar siempre que se realice un commit, y si hay inf
racciones en las piezas que ha cambiado, el commit se aborta. Fix & Reintent
ar.
6. Agregar la repo kivy como un origen remoto:
git remote add kivy Https://github.com/kivy/kivy.git
ahora, cuando desee crear un parche, siga los siguientes pasos:
1. Vea si hay un billete en nuestro bug tracker para la revisin o caracterstica y
anunciar que va a trabajar en l, si todava no tiene un usuario asignado.
2. Crear una nueva rama, apropiadamente llamado en tu repositorio local para esa
funcin especfica o bugfix. (manteniendo una nueva rama por funcin asegura que pode
mos extraer fcilmente en sus cambios sin tirar cualquier otra cosa que se supone
no debe ser tirado.):
git checkout -b_nueva funcin
3. Modificar el cdigo para que haga lo que quiera (por ejemplo arreglarlo).
4. Probar el cdigo. Intente hacer esto incluso para pequeas correcciones. Nunca se
sabe si se ha introducido algn extrao error sin pruebas.
5. Realice uno o ms minimal, Atomic se compromete por arreglar o por funcin. Mnimo/
Atomic significa mantener limpio el commit. No cometer otras cosas que lgicamente
no pertenecen a esta correccin o caracterstica. No se trata de crear un commit po
r lnea cambiado. Use git add -p si es necesario.
6. Dar a cada cometer un apropiado al mensaje de confirmacin, para que otras pers
onas que no estn familiarizadas con el asunto de tener una buena idea de lo que h
a cambiado.
7. Una vez que est satisfecho con sus cambios, tirar de nuestro repositorio de up
stream y combinarlo con usted repositorio local. Podemos tirar tus cosas, pero y
a sabes exactamente qu ha cambiado, debe hacer la combinacin:
git pull kivy master
8. Empujar su sucursal local en el repositorio remoto en GitHub:
git push_nueva caracterstica de origen
9. Enviar una solicitud de extraccin con una descripcin de lo que ha cambiado a tr
avs del botn en el GitHub interface de su repositorio. (Esta es la razn por la que
inicialmente bifurcadas. El repositorio est vinculada en contra nuestra.)
ADVERTENCIA: Si cambia partes del cdigo base que requieren compilacin, usted tendr
que recompilar para que los cambios surtan efecto. Comando Themake har que para u
sted (vase el Makefile si quieres saber lo que hace). Si necesita limpiar su dire
ctorio actual de archivos compilados executemake limpio. Si desea deshacerse de
todos los archivos que no estn bajo el control de versiones, ejecutemake distclea
n (Precaucin: Si los cambios no estn bajo el control de versiones, este comando el
iminar!)
Ahora vamos a recibir su solicitud de extraccin. Vamos a comprobar si los cambios
son limpias y tienen sentido (si habl con nosotros antes de hacer todo esto nos
han dicho a usted si tiene sentido o no). Si es as, vamos a tirar de ellos y uste
d conseguir instant karma. Felicitaciones, eres un hroe!
29
3.4 Documentacin
Documentacin Contribuciones Las contribuciones siguen generalmente el mismo flujo
de trabajo como contribuciones de cdigo, pero son un poco ms laxo.
1. Siguiendo las instrucciones anteriores,
(a) un fork del repositorio.
(b) clonar la horquilla a tu ordenador.
(c) instalacin de repo kivy como una fuente remota.
2. Instalar python-esfinge. (Seedocs/README para obtener ayuda.)
3. Utilice ReStructuredText_markup para hacer cambios a la documentacin HTML en d
ocs/Fuentes.
Para enviar una actualizacin de documentacin, siga los siguientes pasos:
1. Crear una nueva rama, apropiadamente llamado en tu repositorio local:
git checkout -b my_docs_update
2. Modificar la documentacin con su correccin o mejora.
3. Volver a generar las pginas HTML, y la revisin de su actualizacin:
hacer html
4. Dar a cada cometer un apropiado al mensaje de confirmacin, para que otras pers
onas que no estn familiarizadas con el asunto de tener una buena idea de lo que h
a cambiado.
5. Mantener cada commit se concentr en un solo tema. No cometer otras cosas que n
o logi- mente pertenecen a esta actualizacin.
6. Empujar a su repositorio remoto en GitHub:
git push
7. Enviar una solicitud de extraccin con una descripcin de lo que ha cambiado a tr
avs del botn en el GitHub interface de su repositorio.
No pedimos que usted vaya a travs de todas las molestias para corregir un nico err
or de tipeo, pero de mayor complejidad contri- butions, siga el flujo de trabajo
sugerido.
3.4.1 Docstrings
cada mdulo/Clase/mtodo/funcin necesita un docstring, utilice las siguientes palabra
s clave pertinentes cuando:
versionadded ..:: para marcar la versin en la que se aadi la funcin.
versionchanged ..:: para marcar la versin en la que el comportamiento de la carac
terstica fue cambiado.
.. Nota: para agregar informacin adicional acerca de cmo utilizar la caracterstica
o funcin relacionada.
.. Advertencia: para indicar un problema potencial, el usuario puede ejecutar en
utilizando la funcin.
Ejemplos:
def mi_new_FEATURE(self, arg):
""" nueva caracterstica es impresionante
:doc: y :mod: son esencialmente las mismas, excepto por un ancla en la url que h
ace :doc:
url para el limpiador preferido.
Para construir su documentacin, ejecutar:
make html
si usted actualiz su kivy instalar y tener algn problema en la compilacin docs, eje
cutar:
make clean fuerza
los documentos html se generar en docs/build/html. Para obtener ms informacin sobre
el formato docstring, por favor refirase a la documentacin oficial de Sphinx.
3.5 Pruebas de unidad las contribuciones
para el equipo de pruebas, tenemos el documento que explica cmo pruebas unitarias
Pruebas unitarias Kivy trabajo y cmo puedes crear tus propios. Utilizar el mismo
enfoque que el cdigo del flujo de trabajo para presentar nuevas pruebas.
31
Nota: Actualmente, se realiza una comparacin de imgenes por pixel. Esto significa
que la imagen de referencia que se generan slo ser correcta para su GPU/controlado
r. Si alguien puede implementar comparacin de imagen con "delta" de apoyo, los pa
rches son bienvenidos :)
para ejecutar las pruebas unitarias GL, necesita crear un directorio:
mkdir kivy/tests/resultados Haga probar
los resultados directorio contendr todas las imgenes de referencia y las imgenes ge
neradas. Despus de la primera ejecucin, si los resultados directorio est vaco, no se
realizar la comparacin. Utilizar las imgenes generadas como referencia. Despus de la
segunda ejecucin, todas las imgenes sern comparados con las imgenes de referencia.
Un archivo html est disponible para mostrar la comparacin antes/despus de la prueba
, y un fragmento de la prueba de la unidad asociada. Ser generada en:
kivy/tests/build/index.html
Nota: El directorio build es limpiarse despus de cada llamada a hacer la prueba.
Si no lo quiere, simplemente use nosetests comando.
Escribir pruebas unitarias GL
La idea es crear un widget de raz, como lo haras inbuild(), o inkivy.base.runTouch
App().
Le dar esa raz widget para una funcin de representacin que captura la salida en X Ma
rcos.
Aqu est un ejemplo:
desde comunes de importacin
clase GraphicUnitTest VertexInstructionTestCase(GraphicUnitTest):
def test_elipse(self):
De kivy.uix.Widget Widget de importacin de kivy.Importacin de grficos de color de e
lipse, r = self.Render
# Crear una raz widget widget wid =()
# Ponga algunos grficos instrucciones sobre ella con wid.Canvas:
Color(1, 1, 1) auto.E = Elipse(pos=(100, 100), size=(200, 100))
# render, y capturar directamente r(wid)
# como alternativa, usted puede capturar en 2 fotogramas:
r(wid, 2)
# o en 10 fotogramas r(wid, 10) de
cada llamada a self.Render (o r en nuestro ejemplo) generar una imagen denominada
como sigue:
33.
3.6 GSOC
3.6.1 Google Summer of Code - 2016
Introduccin
Kivy es una cruz-plataforma, business friendly, acelerada en la GPU biblioteca P
ython de cdigo abierto para el rpido desarrollo de las aplicaciones que hacen uso
de interfaces de usuario innovadora, como multi-touch apps.
La Organizacin Kivy supervisa varios proyectos importantes:
La Biblioteca GUI Kivy
El Python-For-Herramienta de compilacin de Android.
La herramienta de compilacin de Kivy-iOS.
La biblioteca PyJNIus para interfaz con Java desde Python.
La biblioteca PyOBJus para interactuar con Objective-C de Python.
El Player de plataforma independiente wrapper for Python API dependiente de la p
lataforma.
Buildozer - Python genrico packager para Android, iOS y escritorio.
KivEnt - Un motor de juego 2d que proporciona mtodos optimizados de la manipulacin
de grandes cantidades de dy- namic datos visuales.
Kivy Designer: una interfaz grfica GUI Designer for Kivy construido en Kivy.
En total, estos proyectos permiten al usuario crear aplicaciones para todos los
sistemas operativos ms importantes que hacer uso de las API nativas presentes. Nu
estro objetivo es permitir el desarrollo de aplicaciones Python que se ejecutan
por doquier con la misma base de cdigo y hacer uso de las API de dependiente de l
a plataforma y las caractersticas que los usuarios de sistemas operativos especfic
os han llegado a esperar.
Dependiendo del proyecto que usted elige usted puede necesitar saber Cython, Ope
nGL ES2, Java, Objective-C o C adems de Python. Hacemos un uso intensivo de Cytho
n y OpenGL para rendimiento de grficos y computacionales donde importa, y los dems
idiomas suelen estar implicados en el acceso a la API de nivel so o proveedor.
Estamos deseando participar en Google Summer of Code 2016. Esta pgina presenta al
gunas ideas para proyectos y GSoC correspondientes orientaciones para estudiante
s contribuyendo al marco Kivy.
34
requisitos
se supone que el estudiante entrante cumple ciertos requisitos bsicos como destac
ado aqu:
Nivel Intermedio familiaridad con Python.
Cmodo con git y github (Kivy y su hermana se gestionan proyectos en Github) Si nu
nca has usado github antes de que usted podra estar interesado en este tutorial.
Cmodo con programacin dirigida por eventos.
Tiene las herramientas adecuadas para el medio ambiente/Kivy o el proyecto herma
no que va a trabajar. Para ex- amplias para poder trabajar sobre PyOBJus usted t
endr acceso a un dispositivo iOS, OS X con Xcode y una licencia de desarrollador,
para trabajar en PyJNIus necesitar un dispositivo Android, y trabajar en player
usted tendra acceso a hardware para ambas plataformas.
Habilidades deseadas adicionales pueden ser listados con proyectos especficos.
Familiarizarse con la gua de contribucin podemos ayudarle a llegar hasta la veloci
dad, sin embargo los estudiantes demostrar capacidad de antemano tendrn preferenc
ia.
Cmo empezar
Para Kivy, la forma ms fcil es seguir las instrucciones de instalacin para la versin
de desarrollo para su plataforma:
Http://kivy.org/docs/installation/installation.html#development-version especfico
para el resto es usualmente suficiente para instalar el correspondiente proyecto
de git y agregarla a su PYTHON- RUTA
. Por ej.:
git clone http://github.com/kivy/pyjnius PyJNIus export PYTHONPATH=/ruta/a/pyjni
us:$PYTHONPATH
Aqu estn algunas ideas de proyectos posibles ideas originado desde el equipo de de
sarrollo de Kivy, si ninguno de estos proyectos le interesan venir a hablar con
nosotros en #kivy-dev sobre una idea de un proyecto propio.
Principiante proyectos
estos proyectos debera ser adecuado para cualquier persona con un nivel de colegi
o familiaridad con Python y requieren muy poco conocimiento de la plataforma esp
ecficos.
Proyectos intermedios
estos proyectos pueden implicar el nivel superficial conocimiento de varios deta
lles a nivel de sistema operativo, algunas OpenGL de interac- cin, u otros temas
que pueden ser un poco fuera de la caseta de la media Pythonista.
Player:
Descripcin: Player es una plataforma independiente de la API de Python para usar
funciones comnmente encontrado en las plataformas mviles y de escritorio apoyado p
or Kivy. La idea es proporcionar un API estable para el usuario para acceder a l
as funciones de su equipo de sobremesa o dispositivo mvil.
El estudiante puede sustituir algunos archivos .java cdigo actualmente en el p4un
proyecto a ms ap- el lugar apropiado en el Player. Adems, el alumno trabajar en la
mejora del acceso a la
https://github.com/kivy/kivent Http://www.mapeditor.org/
Resultados esperados: un resultado exitoso implica un nuevo mdulo kivent_mosaico
siendo re- alquilados para la KivEnt motor de juego.
los mentores: Jacob Kovac, Gabriel Pettier
36
Hacer una contribucin! Kivy quisiera ver cmo se comprometa con el proceso de desar
rollo. Eche un vistazo al Issue tracker para un proyecto Kivy que te interesa y
enviar una solicitud de extraccin. Puede ser un simple error o un cambio de la do
cumentacin. Estamos buscando para tener una idea de cmo trabajar, no evaluar sus c
apacidades. No se preocupe de recoger algo para impresionar.
Elija una idea que te parezca interesante desde la lista de ideas o proponer su
propia idea.
Hacer una investigacin por s mismo. GSoC es acerca de dar y tomar, no slo una cara
de la interaccin. Se trata de usted tratando de alcanzar metas acordadas con nues
tro apoyo. La principal fuerza impulsora en este debe ser, obviamente, usted mis
mo. Muchos estudiantes pop up y preguntar qu es lo que deben hacer. Debe basar es
a decisin en sus intereses y sus habilidades. Nos muestran eres serio y tomar la
iniciativa.
Escribir un borrador de propuesta sobre lo que desea hacer. Incluya lo que usted
entiende el estado actual del proyecto, lo que te gustara mejorar, cmo, etc.
analizar esa propuesta con nosotros en una manera oportuna. Obtener retroaliment
acin.
Sea paciente! Especialmente en el IRC. Intentaremos conseguir si estamos disponi
bles. Si no es as, enve un mensaje de correo electrnico y slo esperar. La mayora de l
as preguntas que ya estn respondidas en la documentacin o en algn otro lugar y pued
e encontrarse con algunas investigaciones. Las preguntas deben reflejar que real
mente has pensado qu ests preguntando y hacer algunas investigaciones rudimentaria
s.
La mayora de todos no se olvide de divertirse e interactuar con la comunidad. La
comunidad es como una gran parte de fuente abierta como el propio cdigo.
Qu esperar si son elegidos
Todos los alumnos deben unirse al #kivy #kivy y los canales de IRC-dev diariamen
te, esta es la forma en que el equipo de desarrollo se comunica internamente y c
on los usuarios.
Usted y sus mentores semana coinciden en dos hitos para la duracin del verano.
Desarrollo ocurrir en la horquilla de la rama principal de Kivy, esperamos que us
ted enve al menos un PR de una semana a partir de su sucursal en una rama reserva
da para usted en la primaria repo. Este ser el foro para informar del progreso, a
s como de documentar cualquier lucha que pudiera haber encontrado.
Prdida de 2 o 2 PR semanal hitos tendr como resultado que su fracaso a menos que h
aya habido circunstancias atenuantes. Si algo pasa, por favor, informen a sus me
ntores, tan pronto como sea posible. Si un hito parece fuera del alcance trabaja
remos con usted para reevaluar los objetivos.
Los cambios se combinarn en el master, una vez que el proyecto se ha completado y
thor- oughly probados en cada plataforma que es relevante.
38
CAPTULO
CUATRO
PREGUNTAS MS FRECUENTES
existen una serie de preguntas que necesitan ser contestadas repetidamente. El s
iguiente documento trata de responder a algunas de ellas.
4.1 Preguntas tcnicas frecuentes
4.1.1 Fatal error: (Python pygame paracadas) fallo de segmentacin la
mayora del tiempo, este problema se debe a la utilizacin de los antiguos controlad
ores de grficos. Instale el controlador de grficos ms reciente disponible para su t
mismo artculo 40 del cdigo. En Kivy, por ejemplo, estas piezas son el envo de event
os de dibujo y grficos.
Ahora Python le permite hacer algo para hacer estas piezas mucho ms rpido.
Mediante Cython, puede compilar el cdigo hasta el nivel C, y a partir de ah su hab
itual c com- el elevador optimiza las cosas. Este es un proceso bastante libre d
el dolor y si agrega algunas sugerencias para el cdigo, el resultado es an ms rpido.
Estamos hablando de una velocidad en el rendimiento en un factor de nada entre
1x y hasta ms de 1000x (depende enormemente de su cdigo). En Kivy, hicimos esto pa
ra usted y aplicado las porciones de nuestro cdigo, donde la eficiencia es realme
nte crtico, en el C del nivel.
Para grficos de dibujo, tambin podemos aprovechar las GPU de hoy que, para algunas
tareas, tales como grficos raster- lizacin, mucho ms eficiente que una CPU. Kivy ta
nto como sea razonable sobre la GPU para maximizar el rendimiento. Si usted util
iza nuestro lienzo API para hacer el dibujo, incluso hay un compilador que hemos
inventado que optimiza el cdigo de dibujo automticamente. Si usted mantiene su di
bujo mayormente en la GPU, gran parte de la velocidad de ejecucin del programa no
est determinado por el lenguaje de programacin utilizado, sino por el hardware de
grficos puede lanzar en l.
Creemos que estos (y otros) optimizaciones que Kivy para usted ya que la mayora de
las aplicaciones lo suficientemente rpido. A menudo usted incluso quiere limitar
la velocidad de la aplicacin a fin de no desperdiciar recursos. Pero incluso si
esto no es suficiente, usted todava tiene la opcin de utilizar Cython para su prop
io cdigo para acelerar considerablemente.
Confe en nosotros cuando decimos que hemos dado a esta una reflexin muy cuidadosa.
Hemos realizado muchos distintos puntos de referencia y subir con algunas optim
izaciones inteligentes para hacer que la aplicacin se ejecute sin problemas.
4.3.2 No Kivy Python 3.x?
S! A partir de la versin 1.8.0 de Python Kivy admite tanto >= 2.7 y Python >=
3.3 con la misma base.
Python 3 ahora tambin es compatible con Python para Android.
Sin embargo, ser conscientes de que, si bien se ejecutar Kivy en Python 3.3+, nue
stras herramientas de generacin de iOS an requiere Python 2.7.
4.3.3 ya he comenzado con Python 3.x! Hay algo que puedo hacer?
Sea paciente. Estamos trabajando en ello. :)
Si no puede esperar, puede intentar utilizar el 3A2, la herramienta que conviert
e Python 3 sintaxis vlida para Python 2.
Sin embargo, ten en cuenta que esta herramienta no funciona para todos 3 cdigo Py
thon.
4.3.4 Cmo est relacionado con Kivy PyMT?
Nuestros desarrolladores son profesionales y son bastante duchos en su rea de esp
ecializacin. Sin embargo, antes de Kivy vinieron alrededor era (y sigue siendo) u
n proyecto denominado PyMT que fue dirigida por nuestros desarrolladores princip
ales. Hemos aprendido mucho de este proyecto durante el tiempo que hemos desarro
llado. En los ms de dos aos de investigacin y desarrollo, hemos encontrado muchas m
aneras interesantes para mejorar el diseo de nuestro marco. Hemos realizado numer
osas referencias y resulta que para lograr la gran velocidad y flexibilidad que
ha Kivy, hemos tenido que volver a escribir toda una gran porcin de la base, haci
endo de este un atrs incompatibles sino la decisin de futuro. Los ms notables son e
l aumento del rendimiento, que son simplemente increbles. Kivy arranca y funciona
mucho ms rpido, debido a estas pesadas las optimizaciones. Tambin tuvimos la oport
unidad de trabajar con empresas y asociaciones mediante PyMT. Pudimos probar nue
stros productos en una gran diversidad de configuraciones y hecho PyMT trabajar
sobre todos ellos. Escribir un sistema como Kivy o PyMT es una cosa. Hacerla fun
cionar bajo todas estas diferentes condiciones es otra. Tenemos un buen fondo aq
u, y trajo nuestro conocimiento de Kivy.
Adems, dado que algunos de nuestros desarrolladores principales decidi abandonar s
us puestos de trabajo de tiempo completo y de vuelta a este proyecto completamen
te, se decidi que una fundacin ms profesional tena que estar sentado. Kivy es esa fu
ndacin. Se supone que es un producto profesional y estable. Tcnicamente, Kivy no e
s realmente un sucesor para PyMT porque no existe ninguna ruta de migracin fcil en
tre ellos. Sin embargo, el objetivo es
Captulo
5
Pngase en contacto con nosotros
puedes ponerte en contacto con nosotros de varias maneras diferentes:
5.1 Issue Tracker
Si usted ha encontrado un problema con el cdigo o pedir una caracterstica, por fav
or vea nuestro Issue tracker. Si no hay ningn problema pero que coincide con su c
onsulta, sintase libre para crear uno nuevo. Por favor, asegrese de que recibe los
correos que github enva si queremos comentar el tema en caso de que necesitemos
ms informacin. Para errores, proporcione toda la informacin necesaria, como el sist
ema operativo que est utilizando, thefull o cualquier otro mensaje de error logs,
una descripcin de lo que hiciste para provocar el error y lo que el bug era real
, as como cualquier otra cosa que pueda ser de su inters. Obviamente, slo podemos a
yudar si usted decirnos exactamente cul es el problema real.
5.2
Para los usuarios de correo de nuestro marco, hay una lista de correo para apoya
r las investigaciones sobre el grupo de Google de kivy-usuarios.
Utilice esta lista si tiene problemas con su aplicacin basada en Kivy. Tambin tene
mos una lista de correo para los asuntos que tratan del desarrollo del actual ma
rco Kivy cdigo en el grupo de Google de kivy-dev.
5.3 IRC
en irc.freenode.net #Kivy
IRC es genial para la comunicacin en tiempo real, pero, por favor, asegrese de esp
erar despus de haber hecho su pregunta.
Si usted acaba de unirse, preguntar y salir no tenemos manera de saber quines son
y dnde se supone que enviar nuestra respuesta. Tambin tenga en mente que estamos
basados principalmente en Europa, con el fin de tener en cuenta cualquier zona h
oraria. Si no tienes suerte ms de una vez, intente la lista de correo.
Si no tienes un cliente de IRC de Freenode tambin se puede utilizar el chat en la
web, pero por favor, no cierre la ventana del navegador demasiado pronto. Simpl
emente introduzca#en el campo kivy canales.
Por favor, lea nuestras normas de la Comunidad antes de pedir ayuda en la lista
de correo o el canal IRC.
43
44
Parte II
: Gua de programacin
45
46
Captulo
Seis
KIVY BASICS
6.1 Instalacin del entorno Kivy
Kivy depende de muchas bibliotecas de Python como pygame, gstreamer, Pil, El Cai
ro, y ms. No todos son necesarios, pero dependiendo de la plataforma en la que es
t trabajando, que puede ser un dolor para instalar. Para Windows y MacOS X, propo
rcionamos un paquete porttil que puede descomprimir y usar.
Instalacin en Windows Instalacin en OS X Instalacin en Linux
si desea instalar todo usted mismo, asegrese de que tenga al menos Cython y Pygam
e. Una tpica instalacin pip tiene este aspecto:
pip pip cython instalar instalar hg+Http://bitbucket.org/pygame/pygame kivy pip
instalar
la versin de desarrollo puede ser instalado con git:
git clone Https://github.com/kivy/kivy hacer
6.2 Crear una aplicacin
Crear una aplicacin kivy es tan sencilla como:
de subclase clase theApp aplicacin itsbuild(), mtodo y, por lo tanto, devuelve aWi
dget instancia (la raz de su rbol de widget)
crear instancias de esta clase, y llamando itsrun() mtodo.
Aqu est un ejemplo de una aplicacin mnima:
importar kivy kivy.require('1.0.6') # sustituir con su actual versin kivy !
Desde kivy.app App importacin de kivy.uix.label etiqueta de importacin
clase MyApp(App):
47
def construir(self):
etiqueta de devolucin(text='Hola mundo')
si __name__ == "__main__':
MyApp().run()
puede guardar a un archivo de texto, main.py por ejemplo y ejecutarlo.
6.3 El ciclo de vida de una App Kivy
primero vamos a familiarizarnos con la app Kivy ciclo de vida.
Como se puede ver arriba, para todos los intentos y propsitos, nuestro punto de e
ntrada a nuestra aplicacin es el mtodo run(), y en nuestro caso que es "MyApp().ru
n()". Volveremos a ello, pero empecemos por la tercera lnea:
desde kivy.app App de importacin
es necesario que la clase base del App hereda de la clase de aplicacin. Est presen
te en el kivy_Installation_dir/kivy/app.py.
Nota: Siga adelante y abrir ese archivo si desea profundizar en lo que la clase
App Kivy hace.
Le animamos a que abra el cdigo y leer a travs de l. Kivy est basado en Python y uti
liza Sphinx para la documentacin, por lo que la documentacin de cada clase se encu
entra en el archivo real.
48
Asimismo en la lnea 2:
De kivy.uix.label etiqueta importar
una cosa importante a tener en cuenta aqu es la forma de paquetes/clases estn esta
blecidas. El mdulo uix es la seccin que contiene los elementos de la interfaz de u
suario como los diseos y los widgets.
Pasando a la lnea 5:
clase MyApp(App):
Aqu es donde estamos definiendo la clase base de nuestra Kivy App. Slo debe nunca
necesita cambiar el nombre de su aplicacin MyApp en esta lnea.
Ms a la lnea 7:
def construir(self):
Como pone de relieve la imagen de arriba, muestran la cubierta la Kivy App, cicl
o de vida, esta es la funcin que debe inicializar y devolver su Widget de raz. Est
o es lo que hacemos en la lnea 8:
etiqueta de devolucin(text='Hola mundo')
Aqu inicializamos una etiqueta con el texto "Hello World" y volver a su instancia
. Esta etiqueta ser la raz de este Widget App.
Nota: Python utiliza sangras para denotar bloques de cdigo, por lo tanto tome nota
de que en el cdigo anterior, en la lnea 9 de la clase y la definicin de la funcin t
ermina.
Ahora a la parte que har que nuestra aplicacin se ejecute en la lnea 11 y 12:
Si __name__ == "__main__':
MyApp().run()
aqu la clase MyApp es inicializado y su mtodo run() llamado. Esto inicializa y com
ienza nuestra aplicacin Kivy.
6.4 Ejecucin de la aplicacin
a ejecutar la aplicacin, siga las instrucciones para su sistema operativo:
Linux siga las instrucciones para ejecutar una aplicacin Kivy en Linux:
$ python main.py
Windows Siga las instrucciones para ejecutar una aplicacin en Windows Kivy:
$ python main.py # o C:\appdir>kivy.bat main.py
Mac OS X siga las instrucciones para ejecutar una aplicacin Kivy en OS X:
$ kivy main.py
Android su aplicacin necesita algunos ficheros complementarios para poder ejecuta
r en Android.
Consulte Crear un paquete para Android para futura referencia.
49
debera abrirse una ventana mostrando una sola etiqueta (con el texto "Hello World
") que cubre toda el rea de la ventana. Esto es todo lo que hay.
6.5 Personalizar la aplicacin
permite ampliar esta aplicacin un poco, digamos un simple nombre de usuario/contr
asea Pgina.
Desde kivy.app App importacin de kivy.uix.gridlayout GridLayout importacin de kivy
.uix.label etiqueta de importacin de kivy.uix.importar
clase TextInput LoginScreen textinput(GridLayout):
kwargs):
def __init__(self,
super(LoginScreen, auto).__init__( kwargs) self.cols = 2 self.add_widget(Label(text
='Nombre de Usuario') self.username =(TextInput multiline=false) self.add_widget
(self.username) self.add_widget(Label(text='password') self.Password = TextInput
(password=True, multiline=false) self.add_widget(self.contrasea)
clase MyApp(App):
def construir(self):
retorno LoginScreen()
50
Si __name__ == "__main__':
MyApp().run()
en la lnea 2 que importamos aGridlayout:
de kivy.uix.gridlayout GridLayout importar
esta clase se utiliza como base para nuestra raz Widget (LoginScreen) definidos e
n la lnea 9:
clase LoginScreen(GridLayout):
CAPTULO
7
CONTROL DEL MEDIO AMBIENTE
muchas variables de entorno estn disponibles para controlar la inicializacin y el
comportamiento de Kivy.
Por ejemplo, para limitar la representacin de texto al pil aplicacin:
$ KIVY_TEXT=pil python main.py
se debe establecer las variables de entorno antes de importar:
importar kivy os os.environ['KIVY_TEXT'] = 'pil' importar kivy
7.1 Control de recorrido de
nuevo en la versin 1.0.7.
Puede controlar los directorios predeterminados donde los archivos de configurac
in, mdulos, extensiones y kivy datos son lo- localizado.
KIVY_DATA_DIR Ubicacin del Kivy, por omisin de datos <kivy path>/data_DIR_EXTS KIV
Y Ubicacin de las extensiones de Kivy, por omisin <kivy path>/extensions
KIVY_MODULES_DIR Ubicacin de los mdulos de Kivy, por omisin <kivy path>/modules
_KIVY Kivy ubicacin principal de la casa. Este directorio se utiliza para la conf
iguracin local, y debe estar en una ubicacin de escritura.
Valores predeterminados para:
Escritorio: <user home>/.kivy Android: <android app path>/.kivy
iOS: <user home>/Documents/.kivy
nuevo en la versin 1.9.0.
7.2 Configuration
_USE_DEFAULTCONFIG KIVY Si este nombre se encuentra en environ, Kivy no leer el a
rchivo de configuracin de usuario.
KIVY_NO_CONFIG si se establece, no hay ningn archivo de configuracin ser ledo o escr
ito. Esto tambin se aplica al directorio de configuracin del usuario.
KIVY_NO_filelog si se establece, los registros no ser imprimir a un archivo
KIVY_NO_CONSOLELOG registros si se establece, ser no se imprima en la consola
KIVY_NO_ARGS Si se establece, el argumento que se pasa en la lnea de comandos no
ser interpretada y utilizada por Kivy.
Es decir, se puede hacer un script o una aplicacin con sus propios argumentos sin
requerir el delimitador: importar os os.environ["KIVY_NO_ARGS"] = "1" importar kivy
nuevo en la versin 1.9.0.
7.3 Restringir el ncleo de ejecucin especficas
kivy.core intenta seleccionar la mejor aplicacin disponible para su plataforma. P
ara probar o instalacin personalizada, es posible que desee restringir el selecto
r para una aplicacin especfica.
KIVY_WINDOW Aplicacin a utilizar para crear la ventana
Valores: SDL2, pygame, x11, EGL_rpi
KIVY_TEXT la aplicacin que se va a usar para representar
los valores de texto: SDL2, pil, pygame, sdlttf
KIVY_Aplicacin de vdeo que se va a usar para representar
los valores de vdeo: pygst, gstplayer, pyglet,
KIVY ffpyplayer null_AUDIO Aplicacin use para reproducir los
valores de audio: SDL2, gstplayer, pygst, ffpyplayer, pygame
KIVY_IMAGE aplicacin utilizar para leer
los valores de imagen: SDL2, pil, pygame, imageio, tex, DDS, gif
KIVY_CAMERA aplicacin utilizar para leer
valores de cmara: videocapture, avfoundation, pygst, opencv
KIVY_Ortografa Aplicacin para utilizar
valores de ortografa: encantar, osxappkit
KIVY_Portapapeles Aplicacin para utilizar el portapapeles para
valores de gestin: SDL2, pygame, dummy, Android
7.4 Metrics
KIVY_DPI si se establece, el valor se utilizar forMetrics.dip.
54
56
Captulo
8 y
configurar
el archivo de configuracin de KIVY kivy es llamado config.ini y cumple con el estn
dar de formato INI.
8.1 Localizar el archivo de configuracin de
la ubicacin del archivo de configuracin es controlado por la variable de entorno K
IVY_HOME:
<KIVY_HOME>/config.ini
en el escritorio, este predeterminadas son:
<HOME_DIRECTORY>/.kivy/config.ini
, por lo tanto, si el usuario es llamado "Tito", el archivo estar aqu:
Windows: C:\Users\tito\.kivy\config.ini
OS X:/Users/tito/.kivy/config.ini Linux: /home/tito/.kivy/config.ini
en Android, este predeterminadas son:
<ANDROID_APP_PATH>/.kivy/config.ini
si su aplicacin es denominado "org.kivy.Launcher", el archivo estar aqu:
/data/data/org.kivy.launcher/files/.kivy/config.ini
en iOS, esta omisin:
<HOME_DIRECTORY>/Documents/.kivy/config.ini
8.2 comprensin config tokens
todos los tokens de configuracin se explican en el mdulo thekivy.config.
57
58
CAPTULO
9
INTRODUCCIN A LA ARQUITECTURA
Nos gustara tomar un momento para explicar cmo hemos diseado Kivy desde un punto de
vista de ingeniera de software. Esto es clave para entender cmo funciona todo jun
to. Si usted acaba de mirar el cdigo, las ocasiones son usted conseguir una idea a
proximada ya, pero dado que este enfoque es ciertamente una tarea abrumadora par
a la mayora de los usuarios, esta seccin explica las ideas bsicas de la aplicacin en
ms detalle. Puede omitir esta seccin y consultar ms adelante, pero sugerimos al me
nos rozando por una visin general.
Kivy consta de varios bloques de construccin que explicaremos en breve. Aqu est un
resumen grfico de la arquitectura:
59
propiedades no son las propiedades normales que sepis de python. Son nuestros pro
pios bienes clases que vincular su cdigo de widget con la descripcin de la interfa
z de usuario.
9.4 UIX (Widgets & Diseos)
El mdulo UIX contiene comnmente utilizada widgets y diseos que puede reutilizar par
a crear rpidamente una interfaz de usuario.
Widgets Los Widgets son los elementos de la interfaz de usuario que agregue a su
programa para proporcionar algn tipo de funcionalidad. Pueden o no ser visibles.
Ejemplos de ello seran un explorador de archivos, botones, deslizadores, listas
y as sucesivamente. Recibir MotionEvents Widgets.
Diseos que utilizan diseos para organizar los widgets. Por supuesto, es posible ca
lcular su wid- obtiene las posiciones de s mismo, pero a menudo es ms conveniente
utilizar uno de nuestros diseos preparada. Ejemplos de ello seran los diseos de cua
drcula o caja de diseos. Tambin puede anidar layouts.
9.5 Mdulos
Si has utilizado alguna vez un navegador web moderno y personalizado con algunos
complementos, ya sabe la idea bsica detrs de nuestro mdulo de clases. Los mdulos se
pueden utilizar para inyectar en la funcionalidad de los programas de Kivy, inc
luso si el autor original no lo incluyen.
Un ejemplo sera un mdulo que siempre muestra el FPS de la aplicacin actual y algn grf
ico con el FPS a lo largo del tiempo.
Tambin puede escribir sus propios mdulos.
9.6 Los eventos de entrada (toca)
Kivy resmenes diferentes tipos y fuentes de entrada como toques, ratones, TUIO o
similar. Lo que todos estos tipos de entrada tienen en comn es que se puede asoci
ar una posicin en pantalla 2D con cualquier evento de entrada individual. (Hay ot
ros dispositivos de entrada como acelermetros, donde usted puede encontrar fcilmen
te una posicin en 2D (por ejemplo, una inclinacin de su dispositivo. Este tipo de
entrada se manejan por separado. A continuacin vamos a describir los dos primeros
tipos.)
Todos estos tipos de entrada estn representadas por instancias de la clase Touch(
). (Tenga en cuenta que esto no slo se refiere al dedo toca, pero todos los dems t
ipos de entrada. Estamos llamados simplemente toque en aras de la simplicidad. P
ensar de algo que toca la interfaz de usuario o la pantalla tctil.) Un ejemplo, u
objeto, puede estar en uno de tres estados. Cuando un toque entra en uno de est
os estados, el programa es informado de que se ha producido el evento. Los tres
estados un toque puede ser:
Un toque es por una sola vez, en el mismo momento en que aparece por primera vez
.
Mover un contacto puede estar en este estado durante un tiempo potencialmente il
imitada. Un toque no tiene que estar en este estado durante toda su vida til. Un
'Mover' ocurre cuando la posicin 2D de un toque cambios.
Un toque sube al menos una vez o nunca. En la prctica casi siempre se recibe un e
vento porque nadie va a mantener un dedo sobre la pantalla para toda la eternida
d, pero no est garantizada. Si conoce las fuentes de entrada de sus usuarios util
izarn, sabr si puede o no confiar en este estado ingresada.
61
Captulo
Diez
propiedades y eventos
Los eventos son una parte importante de la programacin Kivy. Que no puede sorpren
der a aquellos con experiencia en el desarrollo de GUI, pero es un concepto impo
rtante para los recin llegados. Una vez que entienda cmo los eventos funcionan y cm
o unirse a ellas, se vern en todas partes Kivy. Hacen que sea fcil crear cualquier
comportamiento que desea en Kivy.
La siguiente ilustracin muestra cmo se controlan los eventos en el marco de Kivy.
10.1 Introduccin a la Event Dispatcher
uno de los ms importantes de las clases base del marco es la clase EventDispatche
r. Esta clase permite registrar tipos de eventos, y enviarlos a las partes inter
esadas (generalmente otro evento dis- patchers). Clases andClock TheWidget,anima
desea programar una llamada antes de que el siguiente fotograma est sucediendo.
Un segundo mtodo para repetir una llamada de funcin es primero programar una llama
da una vez con Schedule_once(), y una segunda llamada a esta funcin dentro de la
propia devolucin de llamada:
def mi_callback(dt):
imprimir 'My devolucin de llamada !' Clock.Schedule_once(mi_callback, 1) Clock.Sc
hedule_once(mi_callback, 1),
mientras que el bucle principal intentar mantener el programa tal como se ha soli
citado, existe cierta incertidumbre en cuanto a cundo exactamente una retrollamad
a programada ser llamado. A veces otra devolucin de llamada o alguna otra tarea en
la aplicacin tardar ms de lo previsto y, por lo tanto, el intervalo de tiempo pued
e estar un poco fuera.
En la ltima solucin para el problema de la devolucin de llamada repetitiva, la sigu
iente iteracin ser convocada al menos un segundo despus de la ltima iteracin termina.
Intervalo_Withschedule() sin embargo, la devolucin de llamada se llama cada segu
ndo.
10.2.3 Activar eventos
si desea programar una funcin que se llama slo una vez para la siguiente trama, co
mo un desencadenador, puede verse tentado a lograr que as:
Reloj.desprogramar(mi_callback) Clock.Schedule_once(mi_callback, 0)
Esta forma de programar un desencadenador es costoso, ya que te llame siempre a
desprogramar, o si no has programado an. Adems, desprogramar necesita iterar la li
sta weakref del reloj para encontrar la devolucin de llamada y retirarlo. Utiliza
r un desencadenador en lugar:
Disparo = reloj.create_trigger(mi_callback) # posteriormente desencadenar()
cada vez que se llama trigger(), se programar una sola llamada de su devolucin. Si
ya estaba programado, no ser reprogramado.
10.3 eventos Widget
un widget tiene 2 tipos de eventos predeterminado:
evento de propiedad: si su widget cambia su posicin o tamao, se desencadena un eve
nto.
eventos definidos por el Widget: p.ej. un evento ser despedido por un botn cuando
se pulsa o se suelta.
Para una discusin sobre cmo widget eventos tctiles administrados y artificialmente,
por favor refirase a la seccin de eventos tctiles Widget burbujeante.
65
de argumentos.
Ejemplo:
def mi_callback(valor, args):
print "Hola, tengo un caso!", args
ev = MyEventDispatcher() ev.bind(on_test=mi_callback) ev.do_algo('prueba')
quiera consultar la kivy.event.EventDispatcher.mtodo bind() documentacin para ms ex
- muestras sobre cmo asociar callbacks.
10.6 Introduccin a las propiedades
Las propiedades son una manera increble para definir eventos y unirse a ellas. Es
encialmente, se producen acontecimientos tales que cuando un atributo del objeto
cambia, todas las propiedades que hacen referencia a dicho atributo se auto- ma
tically actualizado.
Hay diferentes tipos de propiedades para describir el tipo de datos que desea ge
stionar.
NumericProperty StringProperty ObjectProperty BoundedNumericProperty
66
En la Lnea 5:
42 TestApp().run()
ejecuta el cdigo anterior le dar la salida siguiente:
Nuestro CustomBtn no tiene representacin visual y as aparece en negro. Puede tocar
/haga clic sobre el rea negra para ver la salida de la consola.
10.9
Cuando se definen propiedades anAliasProperty compuesto, normalmente tiene que d
efinir una funcin getter y setter una usted mismo. Aqu, se cae a usted para defini
r cundo el getter y setter funciones se denominan utilizando el argumento de bind
.
Considere el siguiente cdigo.
1 cursor_pos = AliasProperty(_get_cursor_pos, Ninguno, bind=(
2 'cursor', 'padding', 'pos', 'Tamao', 'focus',
'Desplazamiento 3_x', 'Desplazamiento'_y))
4 '''La posicin actual del cursor, en (x, y).
5 6 :attr:'cursor_pos' es un :clase:'~kivy.properties.AliasProperty', de slo lect
ura.
7 '''
Aqu cursor_pos es un AliasProperty que utiliza el getter _get_cursor_pos con el e
stablecedor parte establecida en Ninguno, lo que implica esta es una propiedad d
e slo lectura.
El argumento de bind al final define que el_cursor_pos evento se distribuye cuan
do cualquiera de las propiedades que se utilizan en el bind= argumento cambia.
70
CAPTULO
11
Gestin de entrada
11.1 Entrada
Kivy arquitectura es capaz de manejar la mayora de tipos de entrada: Ratn, pantall
a tctil, acelermetro, giroscopio, etc. maneja los protocolos multitouch nativo en
las siguientes plataformas: Tuio, WM_Touch, MacMultitouchSupport, MT Protocolo/B
y Android.
La arquitectura mundial pueden ser vistos como
proveedores de entrada: evento de movimiento -> -> -> Envo de procesamie
nto posterior a la ventana de
la clase de todos los eventos de entrada es theMotionEvent. Genera dos tipos de
eventos:
Toque eventos: un evento de movimiento que contiene al menos una posicin X e Y. T
odos los eventos tctiles son enviadas a travs del rbol de widget.
No-touch eventos: todo el resto. Por ejemplo, el acelermetro es un suceso continu
o, sin posicin. Nunca se inicia o detiene. Estos eventos no son enviadas a travs d
el rbol de widget.
Se genera un evento de movimiento por un proveedor de entrada. Un proveedor de e
ntrada es responsable de leer el evento de entrada del sistema operativo, de la
red o incluso desde otra aplicacin. Existen varios proveedores de insumos, tales
como:
TuioMotionEventProvider: crear un servidor UDP y escuchar mensajes TUIO/OSC.
WM_MotionEventProvider: utilizar la API de Windows para la lectura de informacin
multitouch y envindolo a Kivy.
ProbeSysfsHardwareProbe: En Linux, iterar sobre todos los componentes de hardwar
e conectados al ordenador, y adjunta un proveedor de entrada multitouch multitou
ch para cada dispositivo encontrado.
y mucho ms!
Cuando se escribe una aplicacin, no necesita crear un proveedor de entrada. Kivy
Automation- mente intenta detectar el hardware disponible. Sin embargo, si usted
desea apoyar el hardware personalizado, necesitar configurar kivy para hacer que
funcione.
Antes del evento de movimiento recin creado se pasa al usuario, Kivy aplica el po
st-procesamiento de la put. Cada evento de movimiento es analizada para detectar
y corregir la entrada defectuosa, as como hacer interpretaciones significativas
como:
Doble/triple punteo de deteccin, de acuerdo a un umbral de tiempo y distancia
Realizar eventos ms exacta cuando el hardware no es exacta
Reducir la cantidad de eventos generados por el hardware tctil si el nativo est en
viando eventos con casi la misma posicin
despus del procesamiento, el evento de movimiento es enviado a la ventana. Como s
e ha explicado anteriormente, no todos los eventos se envan a todo el rbol de widg
et: la ventana Filtros. Para un determinado evento:
71
Esto puede ser sinsentido si tiene experiencia con otros kits de herramientas de
GUI. Estas suelen dividir la pantalla en reas geomtricas y despacho slo toque o ev
entos de ratn al widget si la coordenada se encuentra dentro del rea de widgets.
Este requisito es muy restrictivo cuando se trabaja con entrada tctil. Golpes, es
trangulaciones y prensas largas pueden originarse desde fuera del widget que qui
ere saber acerca de ellos y reaccionar a ellas.
A fin de proporcionar la mxima flexibilidad, Kivy distribuye los eventos a todos
los widgets y les permite decidir cmo reaccionar ante ellas. Si slo desea responde
r a eventos tctiles dentro del widget, basta con comprobar:
def sobre_TOUCH_down(self, tctil):
Si self.colisionan_point( touch.pos):
# El contacto se ha producido dentro del rea de widgets. Hacer cosas!
Pasar
coordenadas 11.3.2
Usted debe tomar cuidado de transformacin de matriz en tu toque tan pronto como u
sted usar un widget con matriz de transformacin. Algunos widgets como dispersin ti
enen su propia transformacin de matriz, es decir, el contacto debe ser multiplica
do por la matriz de dispersin para poder enviar correctamente toque posiciones a
la dispersin de los nios.
Consiga coordinar desde el principal espacio al espacio local:a_local() Consiga
coordinar desde el espacio local al espacio principal:a_parent() Consiga coordin
ar desde el espacio local a la ventana espacio:a_window() Consiga coordinar desd
e la ventana espacio al espacio local:a_widget()
debe utilizar uno de ellos para escalar correctamente las coordenadas del contex
to. Veamos la apli- cacin de dispersin:
def sobre_TOUCH_down(self, tctil):
# empujar las coordenadas actuales, para poder restaurarlo posteriormente toque.
push()
# transformar el toque coordinar al espacio local toque.apply_transform_2d(self.
a_local)
# Envo del toque como de costumbre a los nios # La coordenada en el touch est ahora
en el espacio local ret = super(..., auto).en_TOUCH_down(touch)
# cualquiera que sea el resultado, no se olvide de pop tu transformacin # despus d
e la llamada, por lo que la coordenada volver a tocar el espacio primario.pop()
# devolver el resultado (segn lo desee.) volver ret
11.3.3 Toque formas
si el touch tiene una forma, sta se reflejar en el 'shape' propiedad. Por ahora, sl
o aShapeRect puede estar expuesto:
de kivy.input.forma
de importar ShapeRect def_TOUCH_move(self, tctil):
73
si isinstance(toque.forma ShapeRect):
print('Mi touch tiene una forma rectangular de tamao", (touch.shape.width, toque.
shape.height)) # ...
11.3.4 doble toque
un doble toque es la accin de tocar dos veces en un tiempo y una distancia. Es ca
lculado por el mdulo de postproceso doubletap. Puede probar si el toque actual es
uno de un doble toque o no:
def sobre_TOUCH_down(self, tctil):
si toca.is_DOUBLE_tap:
print('Touch es un doble toque !") print(' - intervalo', toque.double_toca_time)
print(' - Distancia entre anterior es', toque.double_toca_distance) # ...
11.3.5 triple punteo
un triple toque es la accin de tocar tres veces dentro de un tiempo y una distanc
ia. Es calculado por el mdulo de postproceso tripletap. Puede probar si el toque
actual es una de triple punteo o no:
def sobre_TOUCH_down(self, tctil):
si toca.es_triple_tap:
print('Touch es una triple punteo !") print(' - intervalo', toque.triple_toca_ti
me) print(' - Distancia entre anterior es', toque.triple_toca_distance) # ...
11.3.6 agarrando eventos tctiles
es posible para el padre widget para enviar un evento tctil a un nio desde el widg
et_TOUCH_down, pero no de mover o_TOUCH_on_TOUCH_up. Esto puede ocurrir en ciert
os sce- narios, como cuando un movimiento tctil est fuera del cuadro delimitador d
el primario, por lo que el padre decide no notificar a sus nios del movimiento.
Pero es posible que desee hacer algo en_TOUCH_up. Digamos que empez algo en el ev
ento_down_touch, como reproducir un sonido, y a usted le gustara finalizar las co
sas sobre el_TOUCH_up evento. Agarrar es lo que necesitas.
Cuando usted agarra un toque, siempre recibir el mover y evento. Pero hay algunas
limitaciones a la captura de:
recibir el evento al menos dos veces: una vez de su padre (el caso normal), y una
vez desde la ventana (GRAB).
Usted puede recibir un evento con un toque agarraron, pero no de usted: puede se
r debido a que el Padre ha enviado el toque a sus hijos mientras se encuentre en
el estado agarr.
El toque coordinar no est traducido a su espacio widget porque el toque viene dir
ectamente desde la ventana. Es su trabajo para convertir las coordenadas en el e
spacio local.
Aqu est un ejemplo de cmo usar el acaparamiento:
def sobre_TOUCH_down(self, tctil):
Si self.colisionan_point( touch.pos):
74
76
Captulo
12
12.1 Introduccin a widget Widgets
AWidget es la base de los bloques de construccin de interfaces grficas de usuario
(GUI) de Kivy. Proporciona aCanvas que puede ser usado para dibujar en la pantal
la. Recibe eventos y reacciona a ellos. Para una explicacin detallada acerca de l
a clase theWidget, mire la documentacin del mdulo.
12.2 Manipulacin del rbol widget
Widgets en Kivy estn organizadas en los rboles. Su aplicacin tiene aroot widget, qu
e generalmente que puede havechildren haschildren propia. Hijos de un widget se
representan como atributo de ellos nios, un KivyListProperty.
El widget de rbol puede ser manipulada con los mtodos siguientes:
add_widget(): aadir un widget como un nio Retire_widget(): quitar un widget de la
lista de los nios widgets_clear(): retirar a todos los nios de un widget,
por ejemplo, si desea agregar un botn dentro de un BoxLayout, puede hacer:
diseo BoxLayout(relleno ==10) botn botn =(text='Mi primer botn') layout.add_widget(B
utton)
El botn se agrega al diseo: la propiedad Parent del botn se pondr a disposicin; el di
seo tendr el botn aadido a su lista de nios. Para quitar el botn del diseo:
diseo.remove_widget(Button)
con la extraccin, la propiedad Parent del botn se establece en Ninguno, y el diseo
se han eliminado el botn Lista de sus hijos.
Si desea borrar todos los nios dentro de un widget, useclear_widgets() Mtodo:
diseo.clear_widgets()
ADVERTENCIA: Nunca manipular la lista de nios usted mismo, a menos que realmente
sepa lo que hacer- ing. El widget tree est asociado a un grfico de rbol. Por ejempl
o, si agrega un widget en la lista de nios sin aadir su lienzo al rbol de grficos, e
l widget ser un nio, s, pero noth- ing se dibuja en la pantalla. Por otra parte, us
ted podra tener problemas en llamadas posteriores de add_widget widget y remove_c
lear_widgets.
77
79
80
GridLayout: Organiza los widgets en una cuadrcula. Debe especificar al menos una
de las dimensiones de la cuadrcula, de modo kivy puede calcular el tamao de los el
ementos y cmo organizarlos.
StackLayout: Organiza los widgets uno al lado del otro, pero con un tamao en una
de las dimensiones, sin intentar que quepan dentro de todo el espacio. Esto es ti
l para mostrar nios del mismo tamao predefinido.
AnchorLayout: un diseo simple slo preocuparse por los nios posiciones. Permite pone
r a los nios en una posicin relativa a la frontera del diseo. size_hint no es honra
do.
FloatLayout: Permite la colocacin de nios con ubicaciones arbitrarias y tamao, ya s
ea en trminos absolutos o relativos en comparacin con el tamao del diseo. Tamao prede
terminado_HINT (1, 1) har que cada nio del mismo tamao que todo el diseo, por lo que
probablemente desee cambiar este valor si tiene ms de un hijo. Puede establecer
el tamao_HINT (Ninguno, Ninguno) para usar tamao absoluto con el tamao. Este widget
honores pos_hint tambin, que como un ajuste dict posicin relativa a posicin de dis
eo.
RelativeLayout: se comporta como FloatLayout, excepto los nios posiciones son rel
ativas a la posicin de diseo, no en la pantalla.
Examinar la documentacin de los distintos diseos para una comprensin ms profunda.
tamao_hint andpos_HINT:
boxlayout gridlayout floatlayout anchorlayout stacklayout relativelayout size_hi
nt es un ReferenceListProperty de tamao_HINT_x y tamao_HINT_y. Acepta valores de 0
a 1 o Ninguno y predeterminados a (1, 1). Esto significa que si el widget est en
una presentacin, el diseo va mucho lugar asignarlo como posible en ambas direccio
nes (en relacin con los diseos del tamao).
81
Settingsize_HINT (0.5, 0.8), por ejemplo, har que el widget del 50% de la anchura
y la altura del 80% de tamao disponible para theWidget alayout interior.
Considere el siguiente ejemplo:
BoxLayout:
Botn:
texto: "Botn 1" #_hint tamao predeterminado es 1, 1, no es necesario especificarlo
explcitamente # sin embargo es proporcionada aqu para dejar las cosas claras size
_HINT: 1, 1
carga kivy catlogo:
cd $KIVYDIR/examples/demo/kivycatalog python main.py
sustituya $KIVYDIR con el directorio de la instalacin de Kivy. Haga clic en el bo
tn Diseo de cuadro de la izquierda. Ahora pegar el cdigo anterior en el panel de la
derecha del editor.
Como se puede ver en la imagen de arriba, el botn tiene el 100% de la layoutsize.
Cambiar el tamao_HINT_x/size_HINT_y a .5 har que el Widget toman el 50% de la anch
ura/altura de diseo.
82
Aqu puede ver que, aunque podemos especificar tamao_HINT_x y tamao_HINT_y ambos se
.5, slo el tamao_HINT_x parece ser honrada. Eso es porque boxlayout controla el ta
mao_HINT_y cuando la orientacin es vertical y tamao_HINT_x cuando la orientacin es '
horizontal'. La di- mension controlado el tamao se calcula dependiendo del nmero t
otal de nios en el boxlayout. En este ejemplo, un nio hassize_HINT_y controlada (.
5/.5 = 1). As, el widget aprovecha el 100% de la altura del Diseo principal.
Agreguemos a thelayout anotherButton y ver qu sucede.
83
como con tamao_HINT, debe experimentar con pos_hint para comprender el efecto que
tiene sobre el widget de posiciones.
12.6 Aadir un fondo a una presentacin a
una de las preguntas ms frecuentes sobre los diseos es:
"Cmo agregar una imagen de fondo/color/video/... a un diseo
diseos" por su naturaleza no tienen ninguna representacin visual: no tienen instru
cciones de lienzo de forma predeterminada.
No obstante, puede agregar instrucciones de lienzo a una instancia de diseo fcilme
nte, con respecto a la adicin de un color de fondo:
En Python:
de kivy.Importacin de grficos, un rectngulo de color
con diseo_instance.Canvas.antes:
Color(0, 1, 0, 1) # verde; los colores varan de 0-1 en lugar de 0,255 self.rect =
rectngulo(size=layout_ejemplo.tamao, pos=layout_ejemplo.pos)
Lamentablemente, esto slo servir para dibujar un rectngulo en la posicin inicial del
diseo y el tamao. Para asegurarse de que el rect es dibujada dentro del diseo, cua
ndo el tamao del diseo/pos cambia, necesitamos escuchar a los cambios y actualizar
el tamao de los rectngulos y pos. Podemos hacerlo de la siguiente manera:
con diseo_instance.Canvas.antes:
Color(0, 1, 0, 1) # verde; los colores varan de 0-1 en lugar de 0,255 self.rect =
rectngulo(size=layout_ejemplo.tamao, pos=layout_ejemplo.pos)
86
Si __name__ == "__main__':
MainApp().run()
utilizando el kv Idioma:
de kivy.app App importacin de kivy.lang importar Builder
= root Builder.load_string(''' FloatLayout:
canvas.antes:
Color:
rgba: 0, 1, 0, 1 Rectngulo:
# auto aqu se refiere al widget i.e FloatLayout pos: self.pos tamao: self.tamao botn
:
texto: 'Hello World!' size_HINT: .5, .5 pos_HINT: {'centro_x':.5, 'centro ''')
clase MainApp(App):
def construir(self):
volver root
si __name__ == "__main__':
MainApp().run()
tanto de las aplicaciones deben tener un aspecto similar a este:
_y': .5}
88
self.bind(size=Auto._update_rect, pos=Auto._update_rect)
def _update_rect(self, instancia valor):
self.rect.pos = instancia.pos self.rect.Tamao = instancia.size
clase MainApp(App):
def construir(self):
root = RootWidget() c =() CustomLayout root.add_widget(c) c.add_widget( AsyncIma
ge( origen="http://www.everythingzoomer.com/wp-content/uploads/2013/01/Monday-jo
ke-289x277.jpg", size_HINT= (1, .5), pos_HINT={'centro_x':.5, 'centro_y':.5}) ro
ot.add_widget(AsyncImage(fuente='http://www.stuffistumbledupon.com/wp-content/up
loads/2012/05/Have-you-seen-this-dog-because-its-awesome-meme-puppy-doggy.jpg'))
CustomLayout c =() c.add_widget( AsyncImage( origen="http://www.stuffistumbledu
pon.com/wp-content/uploads/2012/04/Get-a-Girlfriend-Meme-empty-wallet.jpg", size
_HINT= (1, .5), pos_HINT={'centro_x':.5, 'centro_y':.5}) root.add_widget(c) Volv
er root
si __name__ == "__main__':
MainApp().run()
utilizando el kv Idioma:
de kivy.app importar App de kivy.uix.floatlayout FloatLayout importacin de kivy.u
ix.boxlayout BoxLayout importacin de kivy.lang importar Builder
Builder.load_string(''' <CustomLayout>Canvas.antes:
Color:
rgba: 0, 1, 0, 1 Rectngulo:
pos: self.pos tamao: self.Tamao
<RootWidget>:
AsyncImage CustomLayout:
Fuente: "http://www.everythingzoomer.com/wp-content/uploads/2013/01/Monday-joke289x277.jpg' size_HINT: 1, .5 pos_HINT: {'centro_x':.5, 'centro_y': .5} AsyncIma
ge:
Fuente: "http://www.stuffistumbledupon.com/wp-content/uploads/2012/05/Have-you-s
een-this-dog-because-its-awesome-meme-puppy-doggy.jpg' AsyncImage CustomLayout:
Fuente: "http://www.stuffistumbledupon.com/wp-content/uploads/2012/04/Get-a-Girl
friend-Meme-empty-wallet.jpg'
90
clase RootWidget(BoxLayout):
pase la
clase(FloatLayout CustomLayout):
pase la
clase MainApp(App):
def construir(self):
retorno RootWidget()
si __name__ == "__main__':
MainApp().run()
tanto de las aplicaciones deben tener un aspecto similar a este:
Definicin del fondo en la clase de diseo personalizado, asegura que se utilizar en
cada instancia de CustomLayout.
Ahora, para agregar una imagen o un color para el fondo de un built-in diseo Kivy
,a nivel mundial, necesitamos anular la regla kv para la disposicin en cuestin. Co
nsiderar GridLayout:
<GridLayout>Canvas.antes:
Color:
rgba: 0, 1, 0, 1 BorderImage:
91
como se estn anulando la regla de la clase GridLayout, cualquier uso de esta clas
e en nuestro app se Mostrar esa imagen.
Cmo sobre un fondo animado?
Puede establecer las instrucciones de dibujo como rectngulo/BorderImage/Ellipse/.
<RootWidget>
Tamao: CustomLayout_HINT: .9, .9 pos_HINT: {'centro_x': .5, 'center_y': .5} filas
:1 Etiqueta:
texto: "Yo no sufren de locura, disfruto cada minuto" text_size: self.width-20,
auto.height-20 valign: 'top' etiqueta:
texto: "Cuando yo nac yo estaba tan sorprendido; yo no hablar durante un ao y medi
o". text_size: self.width-20, auto.height-20 valign: 'central' halign: 'centro'
etiqueta:
texto: "Un consultor es alguien que toma un objeto usted entiende y hace sonar c
onfusa" text_size: self.width-20, auto.height-20 valign: 'inferior' halign: 'jus
tificar' ''')
clase(CustomLayout GridLayout):
background_image = ObjectProperty( Imagen( origen='../examples/widgets/Sequenced
_images/data/images/button_white_animated.zip", anim_delay=.1)
clase(FloatLayout RootWidget):
pase la
clase MainApp(App):
def construir(self):
retorno RootWidget()
si __name__ == "__main__':
MainApp().run()
para tratar de entender lo que est sucediendo aqu, comenzar a partir de la lnea 13:
textura: self.background_image.textura
Esto especifica que la textura. Propiedad de BorderImage ser actualizada cada vez
que la textura de la propiedad background_actualizaciones de imgenes. Definimos
la propiedad background_image en la lnea 40:
background_image = ObjectProperty(...
De este modo se configura como imagen background_anObjectProperty en que aadimos
anImage widget. Una imagen widget tiene una textura propiedad; donde se ve self.
background_image.textura, esto establece una referencia, textura, a esta propied
ad. Imagen widget soporta animacin: la textura de la imagen se actualiza cada vez
que cambia la animacin y la textura de la instruccin BorderImage se actualiza en
el proceso.
Tambin puede simplemente blit datos personalizados a la textura. Para obtener ms i
nformacin, mire la documentacin ofTexture.
94
y las posiciones son expresados por defecto. Puede expresarse en otras unidades,
lo cual es til para lograr una mejor consistencia en todos los dispositivos (que
se convierten en el tamao en pxeles automticamente).
Unidades disponibles arept, mm, cm, pulgadas, dp y sp. Usted puede aprender acer
ca de su uso en themetrics documentacin.
Tambin puede experimentar con lapantalla del uso para simular varias pantallas de
aparatos para su aplica- cin.
12.9 Pantalla con pantalla de separacin Manager
si su aplicacin se compone de varias pantallas, probablemente desee una forma fcil
para desplazarse de una pantalla a otra. Afortunadamente, hay theScreenManager
class, que permite definir las pantallas por separado, y para establecer theTran
sitionBase de uno a otro.
95
96
Captulo
Trece
grficos
13.1 Introduccin a Canvas
Widgets representacin grfica se realiza mediante un lienzo, que se puede ver tanto
como un ilimitado dibujar- ing junta, as como un conjunto de instrucciones de di
bujo. Hay muchos tipos diferentes de instrucciones que se pueden aplicar (agrega
r) en el lienzo, pero existen dos tipos principales de ellos:
El contexto vrtice instrucciones INSTRUCCIONES
Instrucciones de contexto no dibujar nada, pero cambian los resultados de las in
strucciones de vrtice.
Lienzos puede contener dos subconjuntos de instrucciones. Ellos son el canvas.an
tes y el lienzo.Despus de grupos de instrucciones. Las instrucciones de estos gru
pos sern ejecutadas antes y af- ter el lienzo group respectivamente. Esto signifi
ca que aparecer bajo (antes de ser ejecutado) y superiores (se ejecuta despus). Es
os grupos no se crean hasta que el usuario acceda a ellos.
Para agregar una instruccin de lienzo a un widget, puede utilizar el contexto de
lona:
clase miwidget(Widget):
def __init__(self,
kwargs):
super(Miwidget, auto).__init__( kwargs) con auto.Canvas:
# Aadir su instruccin para lienzo principal aqu
con self.Canvas.antes:
# puede utilizar esto para agregar instrucciones dictadas antes
con self.Canvas.Despus:
# puede utilizar esto para agregar instrucciones prestados despus de
13.2 Contexto
contexto instrucciones instrucciones manipular el contexto de opengl. Puede rota
r, traducir, y escalar su lienzo.
Tambin puede adjuntar una textura o cambiar el color de dibujo. Es uno de los ms c
omnmente utilizados, pero otros son realmente tiles:
con self.Canvas.antes:
Color(1, 0, .4, mode='RGB')
97
Captulo
14
KV IDIOMA
14.1 concepto detrs del lenguaje
como su aplicacin cada vez ms complejos, es comn que la construccin del widget de rbo
les y la declaracin explcita de consolidaciones, se convierte en verbose y difcil d
e mantener. El KV idioma es un intento de superar estas deficiencias.
El KV idioma (a veces llamado kivy kvlang o idioma), le permite crear su rbol de
widget en una forma declarativa y enlazar las propiedades de widget de uno a otr
o o a las devoluciones de llamada de una manera natural.
Permite realizar prototipos muy rpido y gil, cambios en la interfaz de usuario. Ta
mbin facilita una buena separacin entre la lgica de la aplicacin y la interfaz de us
uario.
14.2 Cmo cargar KV
Hay dos maneras de cargar cdigo Kv en su aplicacin:
Por nombre convencin:
Kivy busca un Kv archivo con el mismo nombre que su clase App en minsculas, menos
"app" si se termina con 'app'. E.g:
-> mi MyApp.kv.
Si este archivo define un widget de raz ser conectado a la aplicacin de la raz y se
utiliza como atributo de la base de la aplicacin widget tree.
Builder: Usted puede decir Kivy para cargar directamente de una cadena o de un a
rchivo. Si esta cadena o archivo define un widget de raz, ser devuelto por el mtodo
:
Constructor.load_file('ruta/al/archivo.kv')
o:
Constructor.load_string(kv_string) el
contexto de la Regla 14.3
Kv constituye una fuente de reglas, que se utilizan para describir el contenido
de un widget, puede tener una raz regla y cualquier nmero de clase o reglas de pla
ntilla.
La regla de la raz es declarado por declarar la clase raz de tu widget, sin sangra,
seguido de : y se establecer como atributo de la raz de la aplicacin. Ejemplo:
99
Widget:
una regla de clase, declarada por el nombre de un widget clase entre < > y
seguida por : define cmo una instancia de esa clase se representan grficamente:
<MyWidget>:
Reglas usar sangra de delimitacin, como Python, la sangra debera ser de cuatro espac
ios por nivel, como python recomendaciones de buenas prcticas.
Hay tres palabras clave especficas para Kv idioma:
app: siempre hace referencia a la instancia de la aplicacin.
raz: se refiere a la base widget/plantilla en la actual norma Auto : consultar si
empre el widget actual
14.4 sintaxis especiales
Existen dos sintaxis especial para definir valores para todo el contexto de Kv:
acceso a mdulos de Python y clases de kv,
#:Nombre de importacin x.y.z #:importar isdir os.path.isdir #:importar np numpy
es equivalente a:
de x.y importar z como nombre de os.path isdir numpy importar importar como np
en python.
Para establecer un valor global,
#:establecer valor nombre
es equivalente a:
nombre = valor
en python.
14.5 Crear instancias de nios
a declarar el widget widget tiene un hijo, la instancia de alguna clase, acaba d
e declarar a este nio en el interior de la regla:
MyRootWidget:
BoxLayout:
Botn:
Botn:
el ejemplo anterior define que nuestra raz widget, una instancia de MyRootWidget,
que tiene un hijo que es una instancia de la BoxLayout. Que BoxLayout tambin tie
ne dos hijos, los casos de elbotn clase.
Python equivalente de este cdigo podra ser:
100
irectamente en la regla:
GridLayout:
cols: 3
El valor es evaluado como una expresin de python, y todas las propiedades que se
utilizan en la expresin que se va a observar, eso significa que si haba algo como
esto en python (esto suponga auto es un widget con un dataListProperty):
rejilla = GridLayout(cols=len(self.data) self.bind(data=grid.setter('cols")
a su pantalla actualizado cuando los datos cambian, ahora usted puede tener simp
lemente:
GridLayout:
cols: Len(root.datos)
Nota: los nombres de Widget debera comenzar con letras maysculas, mientras que los
nombres de propiedad debera comenzar con minscula. Siguiendo las convenciones de
nomenclatura de PEP8 es alentado.
14.6 Los enlaces de eventos
puede enlazar a los eventos en Kv utilizando la sintaxis ":", es decir, asociand
o una devolucin de llamada a un evento:
Widget:
on_size: MI_callback()
puede pasar los valores enviados por la seal usando la palabra clave: args
: TextInput
en_text: app.bsqueda(args[1])
ms complejos se pueden utilizar expresiones como:
pos: self.centro_x - self.textura_size[0] / 2., auto.center_y - self.textura_siz
e[1] / 2.
Esta expresin se detecta un cambio en el centro_x, centro_y_tamao y textura. Si un
o de ellos cambia, la expresin ser re-evaluado para actualizar thepos campo.
Tambin puede handleon_ eventos dentro de tu kv idioma. Por ejemplo, la clase Text
Input ha afocus propiedad cuyo auto-generatedon_evento Focus se puede acceder de
ntro del kv as: Idioma
: TextInput
en_foco: print(args)
101
texto: s_pero.state
Anid est limitada en su alcance a la norma es declarada, por lo que en el cdigo ab
oves_pero no pueden ser accedidos fuera del <MySecondWidget>Regla.
Un id es un weakref al widget y no el widget en s. Como consecuencia, almacenar e
l id no es suficiente para mantener el widget de ser recolectados. Demostrar:
<MyWidget>:
: etiqueta label_widget_widget Botn:
texto: 'Agregar botn" en_press: root.add_widget(label_widget) Botn:
texto: 'Eliminar Botn" en_press: root.remove_widget(label_widget) etiqueta:
id: etiqueta_widget de texto: 'widget'
aunque una referencia tolabel_widget se almacena en miwidget, no es suficiente p
ara mantener vivo el objeto una vez que se han eliminado otras referencias, porq
ue slo es un weakref. Por lo tanto, despus de la re- mover botn est pulsado (que eli
mina cualquier referencia directa al widget) y se cambia el tamao de la ventana (
que llama al recolector de basura provocando la eliminacin oflabel_widget), cuand
o se hace clic en el botn Agregar para aadir el widget, aReferenceError: dbilmenteobjeto al que se hace referencia ya no existe sern lanzados.
102
103
class Marvel(BoxLayout):
def_hulk smash(self):
self.ids.hulk.Text = "Hulk: enclenque Dios!" self.ids["loki"].Text = "Loki: >
_<!!!" # alternative syntax
When your kv file is parsed, kivy collects all the widgets tagged with ids and p
laces them in this self.ids dictionary type property. That means you can also it
erate over these widgets and access them dictionary style:
for key, val in self.ids.items():
print("key={0}, val={1}".format(key, val))
Note: Although the self.ids method is very concise, it is generally regarded as
best practise to use the ObjectProperty. This creates a direct reference, provide
s faster access and is more explicit.
14.10 Dynamic Classes
Consider the code below:
<MyWidget>:
Botn:
texto: "Hello world, ver este texto dentro del botn" text_size: self.size font_si
ze: 25sp marcado: botn True:
texto: "Incluso absoluta es relativa a s mismo" text_size: self.size font_size:
25sp marcado: botn True:
texto: "repetir lo mismo una y otra vez en un comp = fail" text_size: self.size
font_size: 25sp marcado: botn True:
En lugar de tener que repetir los mismos valores para cada botn, slo podemos utili
zar una plantilla en lugar de, por ejemplo:
<MyBigButt@Button>:
text_size: self.size font_size: 25sp marcado: True
<MyWidget>:
MyBigButt:
texto: "Hello world, ver este texto dentro del botn MyBigButt":
texto: "Incluso absoluta es relativa a s mismo" MyBigButt:
texto: "repetir lo mismo una y otra vez en un comp MyBigButt = fail":
esta clase, creado por la declaracin de esta regla, hereda de la clase Button y n
os permite cambiar los valores predeterminados y crear enlaces para todas sus in
stancias sin agregar ningn cdigo nuevo en el
Escribir = StringProperty( )
def text(self, val):
self.escribir = val
porque ambas clases comparten el mismo .KV Style, este diseo puede simplificarse
si reutilizamos el estilo tanto para los widgets. Usted puede hacer esto en .kv
como sigue. En mi.kv:
<MyFirstWidget,MySecondWidget>:
Botn:
on_pulse: self.text(txt_inpt.text):
id: TextInput txt_inpt
separando los nombres de clase con una coma, todas las clases enumeradas en la d
eclaracin tendr las mismas propiedades de kv.
14.12 disear con la lengua Kivy
uno de los objetivos de la lengua Kivy es separar las preocupaciones de la prese
ntacin y la lgica. La presentacin (diseo) de lado es abordado por su archivo de kv y
la lgica de su py.
14.12.1 El cdigo va en archivos py
empecemos con un pequeo ejemplo. Primero, el archivo Python denominado main.py:
importar kivy kivy.require( 1.0.5 )
105
13 14 Etiqueta:
15 id: MI_custom_label
16 Texto: Mi etiqueta antes de presionar el botn
106
una etiqueta y un botn en un BoxLayout vertical. Parece muy simple. Hay 3 cosas d
e aqu:
1. Usando datos desde el controlador. Tan pronto como la propiedad info es cambi
ado en el controlador, el controlador expressiontext: Mi info:
+ root.info au
tomticamente ser re-evaluada, cambiando el texto en elbotn.
2. Dando datos al controlador. La expresin id: MI_custom_label es asignar la etiq
ueta creada el id de mi_custom_etiqueta. Entonces, usando mi_custom_label en la
ex-pression label_wid: MI_custom_label da la instancia de esa etiqueta widget a
tu controlador.
3. Crear una devolucin de llamada personalizadas en elbotn empleando elcontrolador
son_pulse mtodo.
andself raz son palabras clave reservadas, utilizables en cualquier lugar.la raz r
epresenta el comienzo de widget en la regla andself representa la actual widget.
Puede utilizar cualquier ID declarados en la regla de la misma como usuarioroot
andself. Por ejemplo, usted podra hacer esto en elen_press():
Botn:
on_pulse: root.do_action(); my_custom_label.font_size = 18
. Ahora cuando ejecutamos main.py, controlador.kv ser cargado para que elbotn andL
abel aparecer y responder a nuestros eventos tctiles.
107
108
Captulo
15 la
integracin con otros marcos de trabajo
nuevo en la versin 1.0.8.
15.1 Usando Twisted inside Kivy
Nota: Puede utilizar el kivy.support.install_twisted_reactor funcin para instalar
un reactor trenzado que se ejecutan dentro del bucle de eventos de kivy.
Ningn argumento o argumentos pasados a esta funcin se transferirn a las threadedselect reactores funcin intercalados. Estos son los argumentos que uno normalmente
pasa a la torcida reac- tor.startRunning
Advertencia: a diferencia del trenzado predeterminado del reactor, el reactor in
stalado no controlar las seales, a menos que defina la palabra clave installSigna
lHandlers argumento a 1 explcitamente. Esto se hace para permitir kivy para mane
jar las seales como de costumbre, a menos que especficamente quiere el reactor tre
nzado para manejar las seales (ej. SIGINT).
Los ejemplos incluyen kivy un pequeo ejemplo de un servidor y cliente de trenzado
. La aplicacin del servidor tiene un trenzado simple servidor que ejecuta y regis
tra todos los mensajes. La aplicacin cliente puede enviar mensajes al servidor y
se imprimir el mensaje y la respuesta que tengo. Los ejemplos se basan principalm
ente en el simple ejemplo Echo desde el trenzado docs, que puede encontrar aqu:
Http://twistedmatrix.com/documents/current/_downloads/simpleclient.py http://twi
stedmatrix.com/documents/current/_downloads/simpleserv.py
para probar el ejemplo, ejecutar echo_server_app.py primero y, a continuacin, lan
clase.ClientFactory EchoFactory(protocol):
Protocolo = EchoClient
def __init__(self, app):
self.app = app
def clientConnectionLost(self, Conn, razn):
self.app.print_message("connection lost")
def clientConnectionFailed(self, Conn, razn):
self.app.print_message("Connection failed")
de kivy.app App importacin de kivy.uix.label etiqueta de importacin de kivy.uix.te
xtinput TextInput importacin de kivy.uix.boxlayout BoxLayout importacin
# un simple kivy App, con un textbox para introducir mensajes, y # una gran etiq
ueta para mostrar todos los mensajes recibidos desde el servidor # TwistedClient
App clase(App):
conexin = Ninguno
def construir(self):
root = self.setup_gui() self.connect_para_server() devuelven root
def setup_gui(self):
Auto.textbox = TextInput(size_HINT_y=.1, multiline=false) auto.textbox.bind(text
o_de_validate=auto.send_message) self.label = etiqueta(text= conectando...\n ) s
elf.diseo BoxLayout(orientacin ==vertical ) self.layout.add_widget(self.label) Sel
f.layout.add_widget(self.textbox) volver self.
def diseo connect_para_server(self):
reactor.connectTCP( localhost , 8000 EchoFactory(self)
def sobre_connection(self, conexin):
Auto.print_message("conectado correctamente!") self.
def = conexin conexin send_message(self, args):
msg = self.textbox.text si msg y self.Conexin:
self.connection.write(str(self.textbox.text) self.textbox.Text = ""
def print_message(self, msg):
self.Label.text += msg + "\n"
Si __name__ == "__main__ :
TwistedClientApp().run()
111
112
114
Captulo
diecisiete
grficos avanzados
116
Captulo
18 EL
EMPAQUETADO DE LA APLICACIN
18.1 Crear un paquete para Windows
Nota: Este documento se aplica slo para kivy1.9.1 y superior.
El empaquetado de la aplicacin para la plataforma Windows slo puede realizarse den
tro del sistema operativo Windows. El proceso siguiente ha sido probado en Windo
ws con la instalacin de ruedas de Kivy, consulte a finales alternativos para las
instalaciones.
El paquete ser de 32 64 bits segn la versin de Python que se ejecut.
18.1.1 Requisitos
ltimas Kivy (instalado como se describe en la instalacin en Windows).
PyInstaller 3.1+ (pip install --upgrade pyinstaller).
18.2 PyInstaller gancho predeterminado
esta seccin se aplica a PyInstaller (>= 3.1) que incluye los ganchos kivy. Par
a sobrescribir el gancho predeterminados los ejemplos siguientes deben ser liger
amente modificado. Ver sobrescribiendo el gancho predeterminados.
18.2.1 empaquetar una aplicacin sencilla
para este ejemplo, vamos a empaquetar el proyecto de ejemplo touchtracer e incru
star un icono personalizado. La loca- cin de la kivy ejemplos es, cuando se usan
las ruedas, instalado topython\\\share\kivy-ejemplos y cuando se utiliza el cdigo
fuente de github instalado como kivy\\Ejemplos. Vamos a hacer referencia a la r
uta completa que conduce a los ejemplos como ejemplos-path. El ejemplo est en tou
chtracer ejemplos-ruta\\demo\\touchtracer y el archivo principal es namedmain.py
.
1. Abra el shell de lnea de comandos python y asegrese de que est en el camino (es
decir, obras de python).
2. Crear una carpeta en la que se crear la aplicacin empaquetada. Por ejemplo, cre
ar una carpeta TouchApp y cambiar a ese directorio con cd TouchApp p.ej. A conti
nuacin, escriba:
python -m PyInstaller touchtracer ejemplos --nombre-ruta\demo\touchtracer\main.p
y
tambin puede agregar un icono.ico en la carpeta de la aplicacin a fin de crear un
icono para el archivo exe- capaz de cortarse. Si no tienes un archivo .ico dispo
nibles, puede convertir su archivo icon.png a ico con la aplicacin web ConvertICO
. Guardar el icono.ico en el directorio touchtracer y escriba:
117
n.
El suplente hookspath() gancho no incluye ninguno de los proveedores de kivy. Pa
ra agregar, ellos tienen que ser aadidos con get_deps"_minimal() o get_deps"_all(
). Consulte su documentacin y pyinstaller_ganchos para ms detalles. Pero esencialm
ente,get_deps"_all() agrega todos los proveedores como por defecto en el hook_wh
ileget deps"_minimal() agrega nicamente aquellos que se cargan cuando la aplicacin
se ejecute.
Cada mtodo proporciona una lista de las importaciones kivy ocultos y excluidas la
s importaciones que puede transmitirse a los anlisis.
Uno tambin puede generar un gancho alternativo que literalmente listas cada mdulo
proveedor kivy y aquellos no requeridos pueden ser comentada. Seepyinstaller_gan
chos.
Para utilizar los ganchos alternativo con los ejemplos anteriores modificar lo s
iguiente para agregar los ganchos con hookspath() y runtime_ganchos (si es neces
ario) y
get_deps"_minimal() o
get_deps"_all() para especificar los proveedores.
Por ejemplo, agregue la instruccin import de kivy.tools.packaging.pyinstaller gan
chos_get_import_minimal deps", get_deps"_all_runtime hookspath, ganchos y entonc
es mod- ifyAnalysis como sigue:
un anlisis =([ ejemplos-ruta\\demo\\touchtracer\\main.py ], ...
hookspath=hookspath(), runtime_ganchos=runtime_ganchos(), ...
get_deps"_all()
para incluir todo como predeterminado el gancho. O:
119
18.4.1 Buildozer
Buildozer es una herramienta que automatiza todo el proceso de compilacin. Descar
ga y configura todos los prequisites para python para Android, incluyendo el And
roid SDK y NDK, genera un apk que puede ser Automation- camente insertado en el
dispositivo.
Actualmente Buildozer slo funciona en Linux, y es una versin alpha, pero ya funcio
na bien y puede simplificar significativamente la apk construir.
Usted puede conseguir en Https://github.com/kivy/buildozer: buildozer
git Clone CD sudo buildozer Https://github.com/kivy/buildozer.git python2.7 setu
p.py install
18.4.5 Focalizacin
Kivy Android est diseado para funcionar idnticamente a travs de plataformas y, como
consecuencia, hace algunas claras de diseo- cisions. Incluye su propio conjunto d
e widgets y por defecto, construye un APK con todas las dependencias bsicas neces
arias y bibliotecas.
Es posible que Android caractersticas especficas, tanto directamente como en un (l
igeramente) forma de plataforma cruzada.
Consulte la seccin de api con Android en Android Kivy la documentacin para ms detal
les.
18.5 La Mquina Virtual Android Kivy
18.5.1 Introduccin
En la actualidad, las aplicaciones de Android Kivy solamente puede ser construid
o en un entorno de Linux configurados con Python para Android, el SDK de Android
y el Android NDK. En este entorno no slo difcil sino imposible la instalacin en Wi
ndows o OS X sistemas operativos, nos proporcionan una imagen de disco de Virtua
lBox totalmente configurado para facilitar su construccin de infortunios.
Si no est familiarizado con la virtualizacin, le animamos a leer la pgina de Virtua
lizacin de Wikipedia.
18.5.2 Introduccin
1. Descargar la imagen de disco desde aqu, en la seccin de la mquina virtual. La de
scarga es >2GB (6GB despus de la extraccin). Extraiga el archivo y recuerde la
ubicacin del archivo extrado de VDI.
2. Descargar la versin de VirtualBox para su mquina desde el rea de descarga de Vir
tualBox e instalarlo.
3. Iniciar VirtualBox, haga clic en "Nuevo" en la parte superior izquierda. A co
ntinuacin, seleccione "linux" y "Ubuntu 64-bit".
4. Bajo "Disco duro", elija la opcin "Usar un disco duro virtual existente archiv
o". Busque su archivo de VDI y seleccionarlo.
5. Vaya a la opcin "Settings" para su mquina virtual. En la pantalla "Display ->
Por defecto, usted no ser capaz de compartir elementos del portapapeles entre el
host y la mquina invitada. Puede lograr esto mediante la habilitacin de la "bi-dir
eccional" opcin portapapeles compartido en "Ajustes -> General -> Opciones
avanzadas".
3. Instantneas
si est trabajando en la rama de desarrollo de Kivy, tirando la ltima versin puede a
lgunas veces romper cosas (tanto como intentamos no). Usted puede protegerse con
tra esta tomando una instantnea antes de tirar. Esto le permite restaurar fcilment
e el equipo a su estado anterior si usted tiene la necesidad.
4. Memoria insuficiente
asignacin de la mquina virtual memoria insuficiente puede resultar en falla al com
pilar con errores crpticos, tales como:
brazo-linux-androideabi-gcc: error interno: muertos (Programa cc1)
Si ocurre esto, compruebe la cantidad de memoria libre en el Kivy VM y aumentar
la cantidad de RAM asignada a ella si es necesario.
18.6 Kivy en Android
puede ejecutar aplicaciones en Android Kivy, en (ms o menos) cualquier dispositiv
o con OpenGL ES 2.0 (Android 2.2 como mnimo). Esto es estndar en los dispositivos
modernos; Google informa que el requisito se cumple por el 99,9% de los disposit
ivos.
Kivy APKs son normales aplicaciones Android que puede distribuir como cualquier
otra, incluso en tiendas como Play store. Se comportan adecuadamente cuando se d
etiene o se reinicia, puede utilizar los servicios de Android y tener acceso a l
a mayora de las API de java normal, tal como se describe a continuacin.
Siga las instrucciones a continuacin para aprender cmo empaquetar la aplicacin para
Android, depurar el cdigo en el dispositivo y utilizar Android API como para la
vibracin y la lectura de los sensores.
18.6.1 Paquete para Android
el proyecto Kivy proporciona todas las herramientas necesarias para empaquetar l
a aplicacin en Android, incluyendo la construccin de su propia APK independiente q
ue puede ser distribuido en un mercado como el Play store. Esto est cubierto plen
amente en la creacin de un paquete para Android documentacin.
18.6.2 La depuracin de la aplicacin en la plataforma Android
puede ver la salida normal de su cdigo (stdout, stderr), as como la normal de Kivy
registros logcat Android, a travs de la secuencia. A esta opcin se accede a travs
126
Este cdigo directamente Sigue las funciones API de java para llamar el vibrador,
con trans- automticamente Pyjnius relativos la API para python code y nuestras ll
amadas de vuelta a el equivalente java. Es mucho ms detallado y parecido a Java,
la versin de player para ninguna ventaja en este caso, aunque Player no envuelva
cada API disponible para Pyjnius.
Pyjnius tambin tiene potentes capacidades para implementar interfaces de Java, lo
cual es importante para envolver algunas API, pero estos no estn documentados aq
u - puedes ver Pyjnius propia documentacin.
Mdulo de Android
Python para Android incluye un mdulo python (en realidad cython envoltura java) p
ara tener acceso a un conjunto limitado de Android API. Esto ha sido en gran par
te reemplazado por el ms flexible y Pyjnius Player como en el anterior, pero toda
va puede ser ocasionalmente til. Las funciones disponibles son dados en python par
a Android documen- tacin.
Esto incluye el cdigo de facturacin/IAP y creacin/acceso a los servicios de Android
, que an no est disponible en el resto de las herramientas anteriores.
18.6.4 El estado del proyecto y dispositivos probados
estas secciones descritas anteriormente la existencia de Kivy Android herramient
as de compilacin, con sus limitaciones y algunos dispositivos que se sabe que fun
ciona.
Las herramientas de Android ahora son bastante estables, y debera funcionar con p
rcticamente cualquier dispositivo; nuestros requisitos mnimos son OpenGL ES 2.0 y
Android 2.2. Estas son muy comunes ahora - Kivy incluso ha sido ejecutado en un
Android smartwatch!
Una limitacin tcnica actual es que las herramientas de generacin de Android compila
r slo el brazo APKs, que no funcionar en dispositivos Android con procesadores x86
(en la actualidad son raras). Esto se debe aadir pronto.
Como Kivy funciona bien en la mayora de los dispositivos, la lista de telfonos com
patibles/comprimidos ha sido retirado - todos los dispositivos Android tienen pr
obabilidades de funcionar si se cumplen las condiciones anteriores.
18.7 Crear paquetes para OS X
Nota: Los envases Kivy aplicaciones con los mtodos siguientes deben realizarse de
ntro de OS X, plataformas de 32 bits ya no son compatibles.
18.7.1 Usando Buildozer
pip instalar git+Http://github.com/kivy/buildozer cd /a/donde/I/desea/a/paquete
buil- bulldozer
editar el buildozer init.spec y agregue los detalles de su aplicacin. Las depende
ncias pueden aadirse a las exigen- cias= seccin.
Por defecto la versin kivy especificado en los requisitos es ignorado.
Si usted tiene un Kivy.app en /Aplicaciones/Kivy.app luego que se utiliza, para
el embalaje. De lo contrario, la ltima generacin de Kivy kivy.org utilizando maste
r ser descargado y utilizado.
Si desea empaquetar para python 3.x.x simplemente descargar el paquete denominad
o Kivy3.7z desde abajo- seccin de carga y extraerlo a kivy.org Kivy.app en /Aplic
aciones y, a continuacin, ejecute:
127
l .app.
Reduciendo el tamao de la app
La app tiene un tamao considerable, sin embargo, ahora las partes innecesarias pu
eden extraerse del
paquete.
Por ejemplo, si usted no usa GStreamer, simplemente squelo de YourApp.app/Content
s/Marcos. Asimismo puede quitar la carpeta Ejemplos de /ap- plications/Kivy.app/
Contents/Resources/kivy/examples/ o kivy/herramientas/docs kivy, etc. De
esta manera el paquete puede incluir slo las piezas que son necesarias para su ap
licacin.
Ajustar la configuracin de
iconos y otras opciones de configuracin de la aplicacin se puede cambiar editando
YourApp/Contents/Info.plist para satisfacer sus necesidades.
Crear un DMG
a hacer un DMG de su aplicacin, use el siguiente comando:
129
...
...
coll = recoger(exe, rbol( ../kivy/examples/demo/touchtracer/ ) y,
a continuacin, ejecute el siguiente comando:
pyinstaller/pyinstaller.py.spec
touchtracer touchtracer sustituir con su aplicacin cuando proceda. Esto le dar un
<yourapp>.app en el dist/ carpeta.
18.7.4 Usando PyInstaller y Homebrew
Nota: Actualmente, los paquetes para iOS slo pueden ser generados con Python 2.7.
Python 3.3+ support est en camino.
132
El proceso general para crear un paquete para IOS puede explicarse en 4 pasos:
1. Compilar los mdulos Python + para IOS
2. Crear un proyecto de Xcode y vincular su cdigo fuente
3. Personalizar
18.8.1 Requisitos
necesita instalar algunas dependencias, como cython, autotools, etc. Le recomend
amos utilizar Homebrew para instalar las dependencias:
brew install autoconf automake libtool pkg-config brew link libtool sudo easy_in
stall sudo pip pip instalar cython==0,23
para ms detalle, vase Ios requisitos previos. Slo hay que asegurarse de que todo es
correcto antes de empezar el segundo paso!
18.8.2 Compilar la distribucin
Abrir un terminal y escribir:
$ git clone git://Github.com/kivy/kivy-ios $ cd-ios kivy $ ./toolchain.py build
kivy
la mayora de la distribucin python es empaquetado en python27.zip. Si usted experi
menta cualquier problema, por favor, dirjase a nuestro grupo de usuarios o la pgin
a de proyecto de kivy-ios.
18.8.3 Crear un proyecto Xcode
antes de continuar con el siguiente paso, asegrese de que su aplicacin punto de en
trada es un archivo llamado main.py.
Proporcionamos un script que crea un proyecto Xcode inicial para empezar. En la
lnea de comandos siguiente, sustituir prueba con el nombre de su proyecto. Debe s
er un nombre sin espacios o caracteres no vlidos:
$ # ./toolchain.py crear <title><app_directory>$ ./toolchain.py crear Touchtrace
r ~/cdigo/kivy/examples/demo/touchtracer
Nota: debe utilizar una ruta de acceso completa al directorio de la aplicacin.
Un directorio llamado <title>-ios ser creada, con un proyecto de Xcode. Puede abr
ir el proyecto Xcode:
$ abrir touchtracer-ios/touchtracer.xcodeproj
, a continuacin, haga clic en jugar y disfrutar.
Nota: Cada vez que pulse Play, el directorio de la aplicacin se sincronizar con el
<title>-ios/YourApp directorio. No haga cambios en el directorio -ios directame
nte.
133
PARTE III
TUTORIALES
137
138
Captulo
19
PONG TUTORIAL
19.1 Introduccin
Bienvenido al Pong tutorial
Este tutorial te ensear cmo escribir utilizando Kivy pong. Comenzaremos con una apl
icacin bsica como la descrita en la creacin de una aplicacin y convertirlo en un jue
go de pong jugable, describiendo cada paso del camino.
Aqu est una lista de verificacin antes de comenzar este tutorial:
Usted tiene un trabajo de instalacin Kivy. Consulte la seccin de instalacin para de
scripciones detalladas
Usted sabe cmo ejecutar una aplicacin Kivy bsica. Vea Crear una aplicacin si usted n
o lo hace.
139
10 font_size: 70
11 centro_x: root.width / 4
12 top: root.top - 50
13 texto: "0"
14 15 Etiqueta:
16 font_size: 70
3 / 4
17 centro_x: root.width
18 top: root.top - 50
19 texto: "0."
Nota: error comn: el nombre del archivo, por ejemplo, kv pong.KV, debe coincidir
con el nombre de la aplicacin, por ejemplo
PongApp (la parte antes del App ENDING).
Si ejecuta la aplicacin ahora, usted debe ver una barra vertical en el medio y do
s ceros donde el jugador puntajes sern mostrados.
19.3.1 Explicar la sintaxis del archivo Kv
antes de pasar al siguiente paso, quizs desee echar un vistazo al contenido del a
rchivo kv que acabamos de crear y descubrir lo que est sucediendo. Si usted entie
nde lo que est sucediendo, probablemente usted puede saltar al siguiente paso.
En la primera lnea tenemos:
#:kivy 1.0.9
Esta primera lnea es necesaria en cada archivo de kv. Debera comenzar con #:kivy s
eguido de un espacio y la versin Kivy es destinada a (modo Kivy puede asegurarse
de que usted tiene al menos la versin requerida, o manejar la compatibilidad ms ad
elante).
Despus de eso, hemos de comenzar a definir las reglas que se aplican a casos allP
ongGame:
<PongGame>:
...
Como Python, kv archivos usan sangra para definir bloques anidados. Un bloque def
inido con un nombre de clase dentro de
los caracteres < y > Widget es una regla. Se aplicar a cualquier instancia
de la clase con nombre. Si replacedPongGame withWidget en nuestro ejemplo, todas
las instancias de Widget tendra la lnea vertical y la etiqueta dos widgets dentro
de ellos porque sera definir estas reglas para todos los casos de widget.
Regla dentro de una seccin, puede agregar varios bloques para definir el estilo y
el contenido de los widgets sern aplicados. Usted puede:
establecer valores de propiedad, agregar widgets infantil
definir un lienzo la seccin en la que puede agregar instrucciones grficas que defi
nen cmo se procesa el widget.
El primer bloque dentro de la <PongGame>Regla que tenemos es un lienzo bloque:
<PongGame>:
canvas:
rectngulo:
pos: self.centro_x - 5, 0 Tamao: 10, auto.height
141
para este lienzo el bloque dice que el widget PongGame sealar algunas primitivas
de grficos. En este caso, podemos aadir un rectngulo en el lienzo. Nos hemos fijado
el pos del rectngulo a 5 pxeles a la izquierda de la lnea central horizontal del w
idget y 0 por ao. El tamao del rectngulo es de 10 pxeles de ancho y la altura del wi
dget en la altura. La cosa buena acerca de la definicin de los grficos como este,
que es el rectngulo prestados se actualizar automticamente cuando las propiedades d
e los widgets usados en la expresin de valor de cambio.
Nota: Intente cambiar el tamao de la ventana de la aplicacin y observe lo que suce
de. Es cierto, toda la interfaz de usuario cambia de tamao automticamente. El comp
ortamiento estndar de la ventana es para cambiar el tamao de un elemento basado en
su propiedad size_HINT. El valor predeterminado el tamao del widget_hint es (1,1
), lo que significa que se estira 100% tanto en direccin x como y y, por lo tanto
, llenar el espacio disponible. Desde el tpv y el tamao del rectngulo y centro_x y
la parte superior de la partitura de etiquetas definidas dentro del contexto de
la clase thePongGame, estas propiedades se actualiza automticamente cuando cambi
an las propiedades del widget correspondiente. Utilizando el idioma te da Kv pro
piedad automtica vinculantes. :) en
las dos ltimas secciones aadimos parecen bastante similares. Cada uno de ellos aade
una etiqueta como un nio widget widget widget thePongGame. Por ahora, el texto d
e ambos es simplemente ajustado a "0". Vamos a gancho que hasta la calificacin re
al una vez que tenemos la lgica aplicada, pero las etiquetas que ya busque buena
ya que establecemos una mayor font_size y coloca relativamente al widget de raz.
Palabra clave raz puede ser utilizado dentro del bloque infantil volver a consult
ar al padre/root widget se aplica la regla (PongGame en este caso):
<PongGame>:
# ...
Etiqueta:
font_size: 70 centro_x: root.width / 4 top: root.top 50 - texto: "0" de la
etiqueta:
3 / 4 top: root.top 50 - texto: "0"
font_size: 70 centro_x: root.width
19.4 Aadir el baln
Agregar la bola
Ok, entonces tenemos un pong bsico arena para jugar, pero todava necesitamos a los
jugadores y una bola para golpear a su alrededor. Empecemos con el baln. Aadiremo
s una nueva clase PongBall para crear un widget que ser nuestra pelota y hacer qu
e rebote.
19.4.1 PongBall clase
aqu es el cdigo Python para la clase PongBall:
1 clase PongBall(Widget):
2 3 # velocidad de la bola en el eje x e y
4 velocity_x = NumericProperty(0)
5_velocity y = NumericProperty(0)
6 7 # referencelist propiedad de tal manera que podemos utilizar la bola.velocid
ad como
8 # una abreviatura, como por ejemplo w.pos de
142 w.y w.x y
10 <PongGame>:
11
12 canvas: rectngulo:
13 pos: self.centro_x-5, 0
14 Tamao: 10,
15 y 16 de altura self.Etiqueta:
17 font_size: 70
18 centro_x: root.width / 4
19 top: root.top - 50
20 texto: "0"
21 22 Etiqueta:
23 font_size: 70
3 / 4
24 centro_x: root.width
25 top: root.top - 50
26 texto: "0"
27 28 PongBall:
29 centro: self.parent.center
30
Tenga en cuenta que no slo una <PongBall>Se ha agregado la regla de widget, sino
tambin un nio PongBall widget en la <PongGame>Regla de widget.
19.5 Aadir animacin bola
haciendo que la bola pasar
fro, as que ahora tenemos una bola, e incluso tiene funcin amove... pero no se muev
e todava. Vamos a arreglar esto.
19.5.1 Funciones de programacin del reloj
necesitamos themove Mtodo de nuestra bola para ser llamado regularmente. Afortuna
damente, Kivy hace este bastante fcil ya que nos permite programar cualquier func
in que queremos utilizar theClock y especificar el intervalo:
Reloj.Schedule_interval(Game.Update, 1.0/60.0)
Esta lnea, por ejemplo, causara theupdate funcin del juego objeto se llama una vez
cada 60 de segundo (60 veces por segundo).
19.5.2 Propiedades de objeto/Referencias
tenemos otro problema, aunque. Nos gustara para asegurarse de que la funcin itsmov
e PongBall ha llamado regularmente, pero en nuestro cdigo no tenemos ninguna refe
rencia a la bola objeto ya que acabamos de aadir a travs del archivo dentro del kv
kv regla para thePongGame clase. La nica referencia a nuestro juego es el volvem
os en el mtodo de compilacin de aplicaciones.
Dado que vamos a tener que hacer algo ms que mover la pelota (por ejemplo el rebo
te fuera de las paredes y luego los jugadores raqueta), nos debers ourPongGame an
update mtodo de clase de todos modos. Adems, dado que tenemos una referencia al ob
jeto del juego, ya que podemos programar fcilmente su mtodo newupdate cuando la ap
licacin obtiene construido:
1 clase PongGame(Widget):
2 3 def update(self, DT):
144
ate bola dentro de la propiedad e incluso hacer que rebotan en los bordes:
1 clase PongGame(Widget):
2 bolas = ObjectProperty(Ninguno)
3 4 def update(self, DT):
5 auto.ball.move()
6 7 # rebotan en la parte superior e inferior
8 si (self.ball.y < 0) o (self.ball.top > auto.height):
-1 = 9 self.ball.velocity_y
10 11 # rebotan de izquierda y derecha
12 Si (self.ball.x < 0) o (self.ball.derecha > auto.width):
-1 = 13 self.ball.velocity_x
no olvides conectarlo en el kv archivo, dando al nio un widget id y ajuste del ba
ln PongGame ObjectProperty a ese id:
<PongGame>:
: bolas_ball pong
# ... (lienzo y etiquetas)
PongBall:
id: pong_ball Center: centro de auto.parent.
Nota: En este punto, todo est enganchado a la bola de rebote. Si codifica como va
mos, quizs se pregunte por qu la bola no se est moviendo en cualquier lugar. La vel
ocidad de la bola se establece a 0 en x e y. En el listado de cdigo siguiente, as
erve_ball mtodo se agrega a la clase thePongGame y llamado en la app smtodo build.
Se establece un random x e y la velocidad de la pelota, y tambin restablece la p
osicin, as que podemos usar posteriormente para restablecer la pelota cuando un ju
gador ha conseguido un punto.
Aqu est todo el cdigo de este paso:
main.py:
1 de kivy.app importacin
de kivy App 2.uix.widget widget importacin
3 de importacin, ReferenceListProperty kivy.properties NumericProperty,\
4
5 de kivy ObjectProperty.vector Vector de importacin
6 de kivy.reloj reloj de importacin
7 aleatorio de importar las instrucciones randint
145
8
9 10 clase PongBall(Widget):
11 velocidad_x = NumericProperty(0)
12_velocity y = NumericProperty(0)
13 Velocidad = ReferenceListProperty(velocidad, velocidad_x_y)
14 15 def mover(self):
16 self.pos = Vector( self.Velocidad) + auto.pos
17 18 19 clase PongGame(Widget):
20 ball = ObjectProperty(Ninguno)
21 22 def servir_ball(self):
23 self.ball.centro = self.center
24 self.ball.velocidad = Vector(4, 0).rotate(las instrucciones randint(0, 360)
25 26 def update(self, DT):
27 self.ball.move()
28 29 #rebotan en la parte superior e inferior de
30 si (self.ball.y < 0) o (self.ball.top > auto.height):
-1 = 31 Self.ball.velocity_y
32 33 #rebotan de izquierda y derecha
34 Si (self.ball.x < 0) o (self.ball.derecha > auto.width):
-1 = 35 self.ball.velocity_x
36 37 38 clase PongApp(App):
39 def construir(self):
40 juego = PongGame()
41 game.servir_ball()
42 Reloj.Schedule_interval(Game.Update 1.0 / 60.0)
43
44 45 46 partido de vuelta si __name__ == "__main__ :
47 PongApp().run()
pong.kv:
1 #:kivy 1.0.9
2 3 <PongBall>:
4 Tamao: 50, 50
5
6 canvas: elipse:
7 pos: self.pos
8 Tamao: self.size
9 10 <PongGame>:
11 bola: pong_ball
12 13
14 canvas: rectngulo:
15 pos: self.centro_x-5, 0
16 Tamao: 10, auto.height
17
146
18
19. Etiqueta: font_size: 70
20 centro_x: root.width / 4
21 top: root.top - 50
22 texto: "0"
23 24:
25 etiquetas font_size: 70
3 / 4
26 centro_x: root.width
27 top: root.top - 50
28 texto: "0"
29 30 PongBall:
31 id: pong_ball
32 Centro: self.parent.center
33
19.6 Conectar eventos de entrada
agregando los jugadores y reaccionar a la entrada tctil
dulce, nuestra pelota rebota a su alrededor. Lo nico que falta ahora son el repro
ductor mvil raquetas y mantener un seguimiento de la partitura. No entraremos en
los detalles de la creacin de la clase y kv normas nuevamente, ya que esos concep
tos estaban ya cubiertos en los pasos anteriores. En su lugar, vamos a centrarno
s en cmo mover al jugador widgets en respuesta a la entrada del usuario. Usted pu
ede obtener todo el cdigo y normas de clase thePongPaddle kv al final de esta sec
cin.
En Kivy, un widget puede reaccionar a la entrada mediante la aplicacin elen_TOUCH
_down, elen_TOUCH_MOVE y elen_TOUCH_up mtodos. De forma predeterminada, el Widget
de clase implementa estos mtodos simplemente llama al mtodo correspondiente a tod
os sus nios widgets para pasar sobre el caso hasta que uno de los nios devuelve Tr
ue.
Pong es bastante simple. Las raquetas slo necesita mover hacia arriba y hacia aba
jo. De hecho, es tan simple, no es realmente necesario tener el jugador widgets
manejar los eventos mismos. Lo que haremos es aplicar la funcin move_TOUCH_para t
hePongGame clase y tienen definida la posicin de la derecha o izquierda en funcin
de si el jugador toque ocurrieron en el lado izquierdo o derecho de la pantalla.
6 si self.colisionan_widget(bola):
7 speedup = 1.1
Vector(0, bola.centro-self_y_y).center
8 desviacin = 0,02
(offset - Bola.Velocidad)
9 ball.velocidad = speedup
Nota: Este algoritmo para la bola que rebota es muy simple, pero tienen un compo
rtamiento extrao si la pelota golpea la paleta desde el lateral o la parte inferi
or...esto es algo que usted podra intentar solucionar usted mismo si lo desea.
Y aqu est en contexto. Casi listo:
main.py:
1 de kivy.app importacin
de kivy App 2.uix.widget widget importacin
3 de importacin, ReferenceListProperty kivy.properties NumericProperty,\
4
5 de kivy ObjectProperty.vector Vector de importacin
6 de kivy.reloj reloj de importacin
7 8 9 clase PongPaddle(Widget):
10 puntaje = NumericProperty(0)
11 12 def_ball bounce(self, bola):
13 si self.colisionan_widget(bola):
14 vx, vy = ball.velocity
15 Desviacin = (ball.center_y - auto.center_y) / (self.altura / 2)
vx, vy) 16 rebotaron = Vector(-1
1.1 17 vel = rebot
18 ball.velocidad = vel.x, vel.y + desplazamiento
19 20 21 clase PongBall(Widget):
22 velocity_x = NumericProperty(0)
23_velocity y = NumericProperty(0)
24 Velocidad = ReferenceListProperty(velocidad, velocidad_x_y)
25 26 def mover(self):
27 self.pos = Vector( self.Velocidad) + auto.pos
28 29 30 clase PongGame(Widget):
31 ball = ObjectProperty(Ninguno)
32 player1 = ObjectProperty(Ninguno)
33 player2 = ObjectProperty(Ninguno)
34 35 def servir_ball(self, vel=(4, 0):
36 self.ball.centro = self.
37 Centro de self.ball.velocidad = vel
30 top: root.top - 50
31 Texto: Str(root.player1.score)
32 33 Etiqueta:
34 font_size: 70
3 / 4
35 centro_x: root.width
36 top: root.top - 50
37 Texto: Str(root.player2.score)
38 39 PongBall:
40 id: pong_ball
41 Centro: self.parent.center
42 43 PongPaddle:
44 id: player_left
45 x: root.x
46 centro_y: root.center_y
47 48 PongPaddle:
49 id: player_right
50 x: root.width-self.width
51 centro_y: root.center_y
52
19.7 Dnde ir ahora?
Divertirse
bien, el pong es bastante completo. Si usted ha entendido todas las cosas que se
tratan en este tutorial, dse una palmadita en la espalda y pensar acerca de cmo s
e podra mejorar el juego. Aqu estn algunas ideas de cosas que usted puede hacer:
Agregar unos mejores grficos y las imgenes. (Sugerencia: compruebe la propiedad so
urce en los grficos en- structions likecircle orRectangle, para establecer una im
agen como textura.)
Hacer el juego final despus de una determinada puntuacin. Quizs una vez que el juga
dor tiene 10 puntos, puede mostrar un gran "PLAYER 1 gana" de la etiqueta y/o ag
regar un men principal para iniciar, pausar y reiniciar el juego.
(Sugerencia: check out elbotn andLabel clases y averiguar cmo usar su_add y remove
_widget widget funciones para agregar o quitar widgets dinmicamente.
Hacer un 4 jugador Pong. La mayora de las tabletas tienen compatibilidad Con Mult
i-Touch, as no sera estupendo tener un jugador en cada lado y cuatro personas juga
r al mismo tiempo?
Fije el control de colisin simplista para golpear la bola con un extremo de la pa
leta provoca un rebote ms realista.
Nota: Usted puede encontrar todo el cdigo fuente y los archivos de cdigo fuente pa
ra cada paso en el directorio Ejemplos Kivy bajo tutorials/pong/
150
Captulo
20
una simple aplicacin de pintura
en el siguiente tutorial, se le guiar a travs de la creacin de su primer widget. Es
to proporciona una potente y un conocimiento importante al programar aplicacione
s Kivy, ya que permite crear com- pleto nuevas interfaces de usuario con element
os personalizados para su propsito especfico.
20.1 Consideraciones bsicas
Al crear una aplicacin, tendr que preguntarse a usted mismo tres preguntas importa
ntes:
Qu datos de mi solicitud?
Cmo puedo representar esos datos?
Cmo puede el usuario interactuar con esos datos?
Si desea escribir una lnea muy sencilla aplicacin de dibujo, por ejemplo, lo ms pro
bable es que desee el usuario que acaba de dibujar en la pantalla con sus dedos.
Esa es la manera en que el usuario interacta con la aplicacin.
Mientras lo hace, su aplicacin sera memorizar las posiciones donde el dedo del usu
ario, de modo que posteriormente se puede dibujar lneas entre esas posiciones. As
los puntos donde los dedos seran sus datos y las lneas que se dibujan entre ellos
sera la representacin visual.
En Kivy, una interfaz de usuario de la aplicacin se compone de Widgets. Todo lo q
ue ves en la pantalla es de alguna manera dibujado por un widget. A menudo le gu
stara poder reutilizar el cdigo que ya escribi en un contexto diferente, razn por la
cual los widgets suelen representar una instancia especfica que responde a las t
res preguntas anteriores. Un widget encapsula los datos, define la interaccin del
usuario con los datos y saca su representacin visual. Puede crear cualquier cosa
, desde sencillas a complejas interfaces de usuario mediante la anidacin de los w
idgets. Hay muchos widgets incorporados, tales como botones, deslizadores y otra
s cosas comunes. En muchos casos, sin embargo, necesitas un widget personalizado
que est ms all del alcance de lo que se despacha con Kivy (por ejemplo,
un widget de visualizacin mdica).
Para mantener estas tres preguntas en mente cuando disee sus widgets. Intenta esc
ribir en una forma reutilizable y mnima (es decir, un widget, que hace exactament
e lo que su supone que debe hacer y nada ms. Si necesita ms, escribe ms widgets o r
edactar otros widgets de pequeos widgets. Tratamos de adherirse al principio de r
esponsabilidad nica).
20.2 La Pintura Widget
Estamos seguro de que uno de sus sueos de la infancia ha sido siempre la creacin d
e su propio programa de pintura multitouch.
Nos permite ayudarle a lograrlo. En las secciones siguientes se sucesivamente ap
render a escribir un programa similar que utiliza Kivy. Asegrese de que ha ledo y
understoodCreate una aplicacin. Tiene usted? Genial! Comencemos!
151
20.2.1Estructura inicial
Empecemos por escribir la estructura de cdigo muy bsico que necesitamos. Por el ca
mino, las diferentes piezas de cdigo que se utilizan en esta seccin estn disponible
s tambin en theexamples/guide/firstwidget directorio que viene con Kivy, as no tie
nes que copiar y pegar todo el tiempo. Aqu est el esqueleto de cdigo bsico que neces
itaremos:
1 de kivy.app importacin
de kivy App 2.uix.Widget Widget de importacin
3 4 5 clase MyPaintWidget(Widget):
6 pass
7 8 9 clase MyPaintApp(App):
10 def construir(self):
11 volver MyPaintWidget()
12 13 14 si __name__ == "__main__ :
15 MyPaintApp().run()
Esto es realmente sencillo. Gurdelo como paint.py. Si lo ejecuta, slo debera ver un
a pantalla en negro. Como puede ver, en lugar de utilizar un widget incorporado
como un botn (vea Crear una aplicacin), vamos a escribir nuestro propio widget par
a hacer el dibujo. Lo hacemos creando una clase que herede fromWidget (lneas 5-6)
y a pesar de esa clase no hace nada, sin embargo, todava podemos tratarlo como u
n widget Kivy normal (lnea 11).
Elsi es __name__ ... construir (lnea 14) es un mecanismo de Python que le impide
la ejecucin de cdigo en el caso de exposicin al importar desde el archivo, es decir
, si la pintura writeimport, no hacer algo inesperado, pero bien proporcionan la
s clases definidas en el archivo.
Mientras ms corto, esto tendra la desventaja de contaminar su espacio de nombres y
15 Si __name__ == "__main__ :
16 MyPaintApp().run()
Esto es slo para mostrar lo fcil que es para reaccionar a la entrada del usuario.
Cuando aMotionEvent (es decir, un contacto, haga clic en, etc.) ocurre, simpleme
nte tenemos que imprimir la informacin acerca de los objetos tctiles en la consola
. No ver nada en la pantalla, pero si se observa la lnea de comandos desde la que
se est ejecutando el programa, aparecer un mensaje para cada contacto. Esto tambin
demuestra que un widget no tienen una representacin visual.
Ahora que no es realmente una gran experiencia de usuario. Vamos a aadir algo de
cdigo que realmente dibuja algo en nuestra ventana:
1 de kivy.app importacin
de kivy App 2.uix.Widget Widget
de kivy IMPORTACIN 3.Importacin de grficos de color, Elipse
4 5 6 clase MyPaintWidget(Widget):
7 8 def sobre_TOUCH_down(self, tctil):
9 con auto.Canvas:
10 Color(1, 1, 0)
11 d = 30.
12 Elipse(pos=(toque.x - d / 2, tocar.y - D/2), size=(d, d)
13 14 15 clase MyPaintApp(App):
16 17 def construir(self):
18 volver MyPaintWidget()
19 20 21 si __name__ == "__main__ :
22 MyPaintApp().run()
si ejecuta su cdigo con estas modificaciones, ver que cada vez que se toque, habr u
n pequeo crculo amarillo dibujada donde ha tocado. Cmo funciona?
Lnea 9: Usamos Python scon instruccin con el widget sobjeto Canvas. Esto es como u
na zona en la que el widget puede dibujar cosas para representar en la pantalla.
Mediante elcon declaracin
153
con ella, todos los comandos de dibujo sucesivas que estn correctamente indentado
s modificar este lienzo. La declaracin tambin asegura que despus de nuestro dibujo,
estado interno puede ser limpiado correctamente.
Lnea 10: habr adivinado ya: ajusta el color para las sucesivas operaciones de dibu
7 clase MyPaintWidget(Widget):
8 9 def sobre_TOUCH_down(self, tctil):
10 color = (random(), random(), random()
11 con auto.Canvas:
12 Color( color)
13 d = 30.
14 Elipse(pos=(toque.x - d / 2, tocar.y - D/2), size=(d, d)
15 touch.ud[ Lnea ] = lnea(puntos=(toque.x.y), tocar)
16 17 def sobre_TOUCH_move(self, tctil):
18 touch.ud[ Lnea ].puntos += [touch.x, toque.s]
19 20 21 clase MyPaintApp(App):
22 23 def construir(self):
24 volver MyPaintWidget()
25 26 27 si __name__ == "__main__ :
28 MyPaintApp().run()
Aqu estn los cambios:
Lnea 1: importamos Python s random(), funcin que nos dar valores aleatorios en el i
ntervalo [0, 1.).
Lnea 10: En este caso, simplemente tenemos que crear una nueva tupla de 3 valores
de flotacin aleatorio que representar un color RGB aleatorio. Desde que hacemos e
sto inon_TOUCH_down, cada nuevo toque obtendr su propio color.
No se confunden con el uso de tuplas. Slo estamos enlazando la tupla tocolor para
utilizar como acceso directo dentro de este mtodo porque somos perezosos.
Lnea 12: Como antes, podemos establecer el color del lienzo. Slo que esta vez util
izamos los valores aleatorios generados y pasarlos a la clase color usando Pytho
n tupla del desembalaje de sintaxis (desde la clase Color espera tres componente
s de color individuales en lugar de slo 1. Si tuviramos que pasar la tupla directa
mente, que seran slo 1 valor que se pase, independientemente del hecho de que la t
upla contiene 3 valores).
156
Esto parece mucho ms agradable ya! Con mucha habilidad y paciencia, usted podra in
cluso ser capaz de crear un pequeo dibujo!
Nota: Puesto que por defecto el color instrucciones asumen el modo RGB y estamos
alimentando una tupla con tres valores de flotacin al azar, puede muy bien suced
er que terminemos con un montn de colores oscuros o incluso negros si tenemos sue
rte. Que sera malo porque por defecto el color de fondo es oscuro, as que no sera p
osible (fcilmente) ver las lneas que dibuje. Hay un buen truco para evitar esto: e
n lugar de crear una tupla con tres valores aleatorios, crear una tupla como est
e:(random(), 1., 1.). Entonces, cuando se pasa a la instruccin de color, ajuste e
l modo de espacio de color HSV: Color( color mode= HSV ).
De esta manera, usted tendr un menor nmero de colores posibles, pero los colores q
ue usted obtenga siempre ser igualmente brillante: slo los cambios de tono.
20.2.3 Puntos de Bonificacin
en este punto, podramos decir que estamos haciendo. El widget qu se supone que debe
hacer: huellas de los toques y dibuja lneas. Incluso dibuja crculos en las posici
ones en una lnea comienza.
Pero, qu ocurre si el usuario desea iniciar un nuevo dibujo? Con el actual cdigo, l
a nica forma de borrar la ventana sera reiniciar la aplicacin entera. Afortunadamen
te, podemos hacerlo mejor. Aadamos aClear botn que borra todas las lneas y crculos q
ue se han elaborado hasta la fecha. Ahora hay dos opciones:
podramos crear el botn como hijo de nuestro widget. Eso implicara que si crea ms de
un widget, cada widget tiene su propio botn. Si no eres cuidadoso, esto tambin per
mitir a los usuarios dibujar en la parte superior del botn, que puede no ser lo qu
e usted desee.
o hemos creado el botn slo una vez, en un principio, nuestra aplicacin de clase y c
uando se pulsa nos borrar el widget.
Para nuestro ejemplo simple, realmente no importa mucho. Para aplicaciones de ma
yor tamao debe reflexionar sobre quin hace qu en su aplicacin. Iremos con la segunda
opcin aqu para que usted vea cmo usted puede construir su aplicacin widget del rbol
en su app class sbuild() mtodo. Tambin vamos a cambiar el espacio de color HSV (ve
r nota anterior):
1 aleatorio de importacin
2 de kivy aleatorio.app importar App
3 de kivy.uix.Widget Widget
de kivy IMPORTACIN 4.uix.Button Botn importar
5 de kivy.Importacin de grficos de color, Elipse, Lnea
6 7 8 clase MyPaintWidget(Widget):
9 10 def sobre_TOUCH_down(self, tctil):
11 color = (random(), 1, 1)
12 con self.Canvas:
13 Color( color mode= HSV )
14 d = 30.
15 Elipse(pos=(toque.x - d / 2, tocar.y - D/2), size=(d, d)
16 touch.ud[ Lnea ] = lnea(puntos=(toque.x, toque.y)
17 18 def sobre_TOUCH_move(self, tctil):
19 touch.ud[ Lnea ].puntos += [touch.x, toque.s]
20 21 22 clase MyPaintApp(App):
23 24 def construir(self):
157
25
26
27
28
29
30
31
32
34
35
Parent = Widget()
self.pintor =
clearbtn MyPaintWidget() = Botn(text= Borrar )
clearbtn.bind(on_release=self.clear_Canvas)
parent.add_widget(self.pintor)
parent.add_widget(clearbtn)
33 padres de retorno def clear_canvas(self, obj):
self.pintor.Canvas.clear()
36 37 si __name__ == "__main__ :
38 MyPaintApp().run()
aqu es lo que sucede:
Lnea 4: Hemos aadido una sentencia import para poder utilizar elbotn clase.
Lnea 25: creamos un objeto dummyWidget() como un padre para nuestra pintura widge
t y el botn que vamos a agregar. Esto es slo una mala la actitud del hombre hacia
la configuracin de una jerarqua de rbol de widget.
Podemos tambin utilizar un diseo o hacer algunas otras cosas de fantasa. Nuevo: est
e widget no hace absolutamente nada excepto sujetando las dos widgets Ahora aadir
emos a ella como hijos.
Lnea 26: Creamos ourMyPaintWidget(), como de costumbre, slo que esta vez no nos de
volverlo directamente pero enlazarlo a un nombre de variable.
Lnea 27: Podemos crear un widget de botn. Tendr una etiqueta que muestra el texto
clear .
Lnea 28: a continuacin, nos enlazamos el botn de on_evento release (que se activa c
uando se pulsa el botn y luego liberado) a la funcin callback_canvas claramente de
finidos a continuacin en las lneas 33 y 34.
Lnea 29 & 30: Hemos creado el widget jerarqua haciendo tanto el pintor y los n
ios clearbtn del maniqu widget de padres. Esto significa que el pintor y clearbtn
ahora son hermanos en el rbol de la ciencia del equipo habitual de la terminologa.
Lnea 33 & 34: Hasta ahora, el botn no hace nada. Fue all, visible y puede presi
onar, pero no pasara nada. Tenemos que cambiar aqu: creamos una pequea y tirar la f
uncin que va a ser nuestra funcin de devolucin de llamada cuando se pulsa el botn. L
a funcin simplemente borra el lienzo del pintor contenidos, convirtindolo en negr
o.
158
Nota: La clase Widget Kivy, por diseo, es simple. No hay propiedades generales co
mo color de fondo y el color del borde. En su lugar, la documentacin y los ejempl
os ilustran cmo manejar fcilmente esas cosas simples que usted, como lo hemos hech
o aqu, ajuste el color del lienzo y dibujar la forma. Desde un simple, se puede m
over a la personalizacin ms elaboradas. Nivel superior construido en wid- obtiene,
derivada del widget, tales como botones, tienen propiedades de conveniencia com
o background_color, pero estas varan dependiendo del widget. Utilizar la API DOCS
para ver lo que es ofrecido por un widget, y subclase si necesita agregar ms fun
cionalidad.
Enhorabuena! Has escrito tu primer Kivy widget. Obviamente, esto era slo una rpida
introduccin.
Hay mucho ms por descubrir. Le sugerimos tomar un breve descanso para que lo que
acaba de aprender en el fregadero.
Quizs sacar algunas fotos lindas para relajarse? Si usted siente que ha comprendi
do todo y estn preparados para ms, le animamos a leer.
159
160
PARTE IV
La API API Reference Referencia lexicogrfica es una lista de las diferentes clase
s, mtodos y funciones que ofrece Kivy.
161
162
CAPTULO
TWENTYONE
KIVY
Kivy marco es una biblioteca de cdigo abierto para desarrollar aplicaciones multi
-toque. Es multiplataforma (Linux/OSX/Windows/Android/iOS) y liberado bajo los tr
minos de la licencia MIT.
Viene con soporte nativo para muchos dispositivos de entrada multi-touch, una cr
eciente biblioteca de multi-toque consciente de widgets y dibujo OpenGL acelerad
as por hardware. Kivy est diseado para permitirle concentrarse en construir- cin de
aplicaciones altamente interactivas y personalizadas tan rpida y fcilmente como s
ea posible.
Con Kivy, puede aprovechar plenamente la naturaleza dinmica de Python. Hay miles
de alta calidad, acceso gratuito a las bibliotecas que pueden ser integrados en
la aplicacin. Al mismo tiempo, piezas de rendimiento crtico estn implementadas usan
do Cython.
Consulte para obtener ms informacin. Http://kivy.org
kivy.requieren(versin) requieren que se puede utilizar para verificar la versin mni
ma requerida para ejecutar una aplicacin Kivy. Por ejem- plo, puede iniciar su ap
licacin un cdigo como este:
importar kivy kivy.require( 1.0.1 )
si un usuario intenta ejecutar la aplicacin con una versin de Kivy que es ms antigu
a que la versin especificada, se produce una excepcin.
La cadena de versin Kivy est construido como este:
X.Y.Z-tag[[-tagrevision]]
X es la versin principal y es la versin menor bugfixes Z es la revisin de
la etiqueta es opcional, pero puede ser uno de los dev", "alfa" o "beta". La ta
grevision es la revisin de la etiqueta.
Advertencia: no debe pedir una versin con una etiqueta, excepto -dev. Pidiendo un
dev ser la versin que acaba de advertir al usuario si la actual no es una versin
de Kivy -dev, pero nunca permitir que se genere una excepcin.
Usted no debe pedir una versin con un tagrevision.
kivy.kivy_configure() llamada post-configuracin de Kivy. Esta funcin debe ser llam
ada si crea la ventana usted mismo.
kivy.kivy_register_post_configuration (callback) registra una funcin que se llama
r cuando kivy_configure() es llamado.
Advertencia: slo para uso interno.
163
21.1.3 animacin
animaciones secuenciales para unir secuencialmente, use el operador "+". En el s
iguiente ejemplo se animar a x=50 durante 1 segundo, despus animar el tamao a (80,
80) en los prximos dos segundos:
anim = Animacin(x=50) + Animacin(size=(80, 80), duracin=2). anim.start(widget)
21.1.4 animacin paralela
a unirse a animaciones en paralelo, utilice el operador & . En el siguiente
ejemplo se anime la posicin a (80, 10) durante 1 segundo, mientras que en parale
lo animando el tamao a (800, 800):
Animacin anim =(pos=(80, 10) anim animacin &=(size=(800, 800), la duracin=2). a
nim.start(widget)
Tenga en cuenta que crear animaciones superpuestas en la misma propiedad puede t
ener resultados inesperados.
Si desea aplicar varias animaciones para la misma propiedad, usted debe programa
r ellos se- quentially (mediante el operador + o usando el callback_complete)
o cancelar animaciones anterior utilizando el botn Cancelar_todo el mtodo.
21.1.5 Animacin repetitiva
nuevo en la versin 1.8.0.
Nota: Esto slo est actualmente implementado para animaciones Secuencia .
Para definir una animacin para que se repita, simplemente establezca lasecuencia.
Repita la propiedad en True:
animacin ANIM =(...)(...) + animacin ANIM.Repita = True anim.start(widget)
para el control de flujo de animaciones como detener y anular, utilice los mtodos
ya establecidos en el mdulo de animacin.
Coleccin de funciones de animacin para ser utilizado con el objeto de animacin. Fun
ciones de aceleracin portado a Kivy del desorden proyecto ClutterAlpha http://www
.clutter-project.org/docs/clutter/stable/.html
el parmetro de progreso en cada funcin de animacin est en el rango de 0-1.
staticin_back(curso)
staticin_bounce(curso)
staticin_circ(curso)
staticin_Cubic(curso)
staticin_elastic(curso)
167
_staticin expo(curso)
staticin_OUT_back(curso)
staticin_OUT_bounce(curso)
staticin_OUT_circ(curso)
168
staticin_OUT_Cubic(curso)
staticin_OUT_elastic(curso)
staticin_OUT_expo(curso)
staticin_OUT_quad(curso)
169
staticin_OUT_quart(curso)
staticin_OUT_quint(curso)
staticin_OUT_sine(curso)
staticin_quad(curso)
170
_staticin quart(curso)
staticin_quint(curso)
staticin_sine(curso)
staticlinear(curso)
171
staticout_back(curso)
staticout_bounce(curso)
staticout_circ(curso)
staticout_Cubic(curso)
172
_staticout elastic(curso)
staticout_expo(curso)
staticout_quad(curso)
staticout_quart(curso)
173
_staticout quint(curso)
staticout_sine(curso)
21.2 Aplicacin
TheApp clase es la base para crear aplicaciones de Kivy. Piense en ello como su
principal punto de entrada en el bucle de ejecucin Kivy. En la mayora de los casos
, esta clase y subclase hacer su propia aplicacin. Se crea una instancia de la cl
ase app especfico y, a continuacin, cuando est listo para iniciar el ciclo de vida
de la aplicacin, llame a su instancia sApp.mtodo run().
21.2.1 Crear una aplicacin
utilizando el mtodo build()
para inicializar su anulacin app con un widget tree, invalidar thebuild() mtodo en
la clase app y devolver el widget tree ha construido.
Aqu est un ejemplo de una aplicacin muy simple que muestra slo un botn:
ejemplo de aplicacin usando build() + Retorno ===============================
==============
174
si __name__ == "__main__ :
TestApp().run()
Seekivy/examples/aplicacin/app_con_kv.py.
La relacin entre el principal.py y test.kv se explica inApp_kv.load().
21.2.2 Configuracin de aplicacin
utilice el archivo de configuracin de
su aplicacin pueden contar con su propio archivo de configuracin. TheApp clase con
trola automticamente los archivos "ini" si agrega la seccin par clave-valor para t
heApp.build_config() mtodo mediante el parmetro de configuracin (una instancia ofCo
nfigParser):
clase TestApp(App):
def build_config(self, config):
config.setdefaults( seccin1 , { key1 : value1 , key2 : 42 })
tan pronto como se agregue una seccin para la configuracin, se crea un archivo en
el disco (vea get_application_config para su ubicacin) y denominado basa su nombr
e de clase. "TestApp" dar un archivo llamado "config.ini" de prueba con el conten
ido:
[seccin1] key1 = valor1 key2 = 42
el "test.ini" ser cargado automticamente en tiempo de ejecucin y puede acceder a la
configuracin en el archivo App.build() Mtodo:
clase TestApp(App):
def build_config(self, config):
config.setdefaults( seccin1 , { key1 : value1 , key2 : 42 })
def construir(self):
( config.get( seccin1 , key1 ), config.getint( seccin1 , key2"))) % y key2 es %d
s% config = self.config etiqueta de devolucin(text= key1 es
crear un panel de configuracin de
la aplicacin puede tener un panel de ajustes para dejar que el usuario configure
algunos de sus tokens config. Aqu est un ejemplo realizado en el ejemplo KinectVie
wer (disponible en el directorio ejemplos):
176
Usted puede agregar sus propios paneles de ajustes mediante la ampliacin theApp.b
uild_settings() mtodo. Verificar theSettings acerca de cmo crear un panel, porque
necesita un archivo JSON / datos en primer lugar.
Tomemos como ejemplo el fragmento anterior de TestApp con configuracin personaliz
ada. Podramos crear un JSON como este:
[ { "tipo": "ttulo", "ttulo": "Aplicacin de prueba" },
{ "tipo": "opciones", "ttulo": "Mi primera clave", "Desc": "Descripcin de mi prime
ra clave", "seccin": "SECCIN 1", "clave": "key1", "Opciones": ["Valor1", "Valor2",
"otro valor"] },
{ "tipo": "Numrico", "ttulo": "Mi segunda clave", "Desc": "Descripcin de mi segunda
clave", "seccin": "SECCIN 1", "clave": "key2" } ]
Entonces, podemos crear un grupo utilizando este formato JSON para crear automtic
amente todas las opciones y vincularlos a nuestra instancia ConfigParser App.con
fig:
clase TestApp(App):
# ...
def build_settings(self, configuracin):
jsondata = """... poner los datos json aqu ..." settings.add_JSON_panel( aplicacin
de prueba , self.config, data=jsondata)
Eso es todo! Ahora puede presionar F1 (por defecto) de pulsaciones de teclas par
a alternar el panel de ajustes o pulsar la tecla de "Ajustes" en su dispositivo
quiz desee saber cuando un valor de configuracin ha sido cambiada por el usuario a
fin de adaptar o volver a cargar la interfaz de usuario. A continuacin, puede so
brecargar elen_config_change() Mtodo:
clase TestApp(App):
# ...
def sobre_config_change(self, config, seccin, clave, valor):
si se auto config.config:
token = (seccin, clave) si token == ( seccin1 , key1 ):
print( Nuestra key1 han sido cambiados para , valor) elif token == ( seccin1 , k
ey2 ):
print( Nuestra key2 han sido cambiados para , valor)
El panel de configuracin de Kivy se agrega de forma predeterminada a la instancia
de la configuracin. Si no desea este panel, puede declarar su aplicacin como sigu
e:
clase TestApp(App):
use_kivy_Settings = False # ...
Esto slo quita el panel de Kivy pero no detiene la instancia de configuracin de co
mparecer. Si desea evitar la instancia de configuracin aparezca por completo, pue
de hacerlo:
clase TestApp(App):
def open_settings(self, largs):
paso de
nuevo en la versin 1.0.7.
27.2.4 con perfiles en_start_stop y
a menudo es til para clasificar el cdigo Python para descubrir lugares para optimi
zar. El estndar li- brary perfiladoras (Http://docs.python.org/2/library/profile.
html) ofrece mltiples opciones para profil- ing cdigo. Para crear perfiles de todo
el programa, los enfoques naturales de uso de perfil como un mdulo o mtodo run de
l perfil no funciona con Kivy. Sin embargo, es posible useApp.en_start() y App.o
n_stop() Mtodos:
importar cProfile
clase MyApp(App):
def sobre_start(self):
self.profile = cProfile.Profile()
def en self.profile.enable()_stop(self):
self.profile.disable() Self.profile.dump_stats( myapp.profile )
esto crear un archivo llamado myapp.profile cuando salga de la aplicacin.
21.2.4 personalizando el diseo
puede elegir ajustes diferentes diseos de widget settingApp.settings_Cls. Por def
ecto, esta es una clase de configuracin que proporciona la foto sidebar diseo, per
o puede configurar cualquiera de los otros diseos proporcionados en kivy.uix.ajus
tes o crear los suyos propios. Consulte la documentacin del mdulo de kivy.uix.Conf
iguracin para ms informacin.
Puede personalizar cmo se muestra el panel de ajustes por overridingApp_settings.
display(), el cual es llamado antes de mostrar el panel de configuracin de la pan
talla. Por defecto, simplemente dibuja el
178
panel en la parte superior de la ventana, pero puede modificarlo para (por ejemp
lo) muestran los ajustes de aPopup o agregarla a su app s ScreenManager si est us
ando uno. Al hacerlo, usted tambin debe modificar el archivo App.close_settings()
para salir del panel de forma adecuada. Por ejemplo, para tener el panel de con
figuracin aparecer en una ventana emergente, puede hacer lo siguiente:
mostrar def_settings(self, configuracin):
pruebe:
p = self.settings_popup excepto AttributeError:
self.settings_popup = Popup(content=configuracin, title= Settings , tamao_HINT=(0.
8, 0.8)) p = self.settings_popup si p.contenido no es ajustes:
Ajustes de p.contenido = p.open()
def close_settings(self, args):
intentar:
p = self.settings_popup p.descartar() excepto AttributeError:
pass # emergente Configuracin no existe
Finalmente, si desea reemplazar la configuracin actual del widget del panel, pued
e quitar la referencia interna procedido mediante App.destruir_settings(). Si ha
modificado el archivo App._settings display(), se debe tener cuidado para detec
tar si la configuracin de instrumentos ha sido sustituido.
21.2.5 Modo Pausa de
nuevo en la versin 1.1.0.
En tabletas y telfonos, el usuario puede cambiar en cualquier momento a otra apli
cacin. Por defecto, la aplicacin se cerrar y theApp.en_stop() evento ser despedido.
Si admite el modo de pausa, cuando se cambia a otra aplicacin, la aplicacin espera
r indef- initely hasta que el usuario vuelve a su aplicacin. Hay un problema con O
penGL en dispositivos Android: no est garantizado que el contexto de OpenGL ES se
restaurar cuando su aplicacin se reanuda. El mecanismo para restaurar todos los d
atos OpenGL no est implementada todava en Kivy.
Actualmente implementado el mecanismo de pausa es:
1. Kivy comprueba cada bastidor si est activado el modo de pausa por el sistema o
perativo debido a que el usuario cambia a otra aplicacin, un telfono apagado o cua
lquier otro motivo.
2. App.on_pause() se llama:
3. Si se devuelve False (predeterminado), thenApp.en_stop() es llamado.
4. De lo contrario, la aplicacin va a dormir hasta que el sistema operativo se re
anuda nuestra aplicacin
5. Cuando la aplicacin se reanud,App.on_resume() es llamado.
6. Si nuestra memoria app ha sido reclamado por el SO, entonces nada ser llamado.
He aqu un ejemplo sencillo de cmo on_pause() debe utilizarse:
clase TestApp(App):
def sobre_Pause(self):
# Aqu puede guardar datos, si fuera necesario devolver True
179
def on_reanudar(self):
# Aqu puede comprobar si alguno de los datos debe sustituirse (suele pasar nada)
ADVERTENCIA: Tanto en_pause y ON_parada debe guardar datos importantes porque de
spus de_pause se llama, en_reanudar no se pueden llamar a todos.
classkivy.app.app( kwargs) Bases: kivy.event.EventDispatcher,
clase de aplicacin, consulte la documentacin del mdulo para obtener ms informacin.
Eventos
en_start:dispararon cuando la aplicacin se inicia (antes llamada therunTouchApp()
.
on_stop:dispararon cuando la aplicacin se detiene.
En_pause:dispararon cuando la aplicacin est en pausa por el SO.
on_reanudar:dispararon cuando la aplicacin se reanuda desde la pausa por el SO. C
uidado:
Usted no tiene ninguna garanta de que este evento ser despedido tras el_pause even
to ha sido llamado.
Ha cambiado en la versin 1.7.0: Parmetro kv_archivo agregado.
Ha cambiado en la versin 1.8.0: Parmetros kv_file_directory kv y ahora son propied
ades de App.
build() inicializa la aplicacin; se llama slo una vez. Si este mtodo devuelve un wi
dget (rbol), ser usado como raz widget y agregado a la ventana.
RootWidget ReturnsNone o una instancia si no existe auto.root.
build_config(config) nuevo en la versin 1.0.7.
Este mtodo es llamado antes de que la aplicacin se inicializa para construir yourC
onfigParser objeto. Aqu es donde usted puede poner cualquier seccin default / clav
e / valor para tu configuracin.
Si nada se establece, la configuracin se guarda automticamente en el archivo devue
lto por Get_application_config().
Parmetros: ConfigParserUse config para aadir esta seccin default / clave / Elemento
s de valor
build_settings(configuracin) nuevo en la versin 1.0.7.
Este mtodo es llamado cuando el usuario (o usted) quiere mostrar la configuracin d
e la aplicacin. Se llama cuando el panel de ajustes se abre por primera vez, desp
us de lo cual el grupo se almacena en cach. Puede que se llame de nuevo si el pane
l de configuracin de cach es eliminado bydestroy_settings().
Puede utilizar este mtodo para agregar paneles de ajustes y configuraciones para
personalizar el widget, por ejemplo, cambiando el ancho de la barra lateral. Con
sulte la documentacin del mdulo para ms detalles.
Ajustes de parmetros: SettingsSettings instancia para aadir paneles
close_settings( largs) Cerrar el panel de configuracin previamente abierta.
ReturnsTrue si la configuracin se ha cerrado.
180
rado. Aqu es donde puede reconstruir algunos de su estado de OpenGL por ejemplo F
BO contenido.
on_start() en el controlador de eventos para el evento start_que se dispar despus
de la inicializacin (despus build() ha sido llamado) pero antes de que la aplicacin
se ponga en marcha.
En_stop() en el controlador de eventos para el evento_stop que se dispara cuando
ha finalizado la ejecucin de la aplicacin (es decir, la ventana est a punto de ser
cerrada).
open_settings( largs) Abrir el panel de configuracin de la aplicacin. Se crear la pri
mera vez, o recreado anteriormente en cach si el grupo ha sido eliminado por dest
ruir_settings(). El panel de configuracin se mostrar con el display_settings(), mto
do que, por defecto, agrega el panel de configuracin de la ventana adjunta a su s
olicitud. Debe reemplazar este mtodo si desea mostrar el panel de configuracin dif
erente.
ReturnsTrue si la configuracin se ha abierto.
opciones = None Opciones pasadas al __init__ de la App
= ninguno de raz la raz widget devuelto por el mtodo build() o por el kv_load(), mto
do si el kv archivo contiene un widget. root
root_ventana nueva en la versin 1.9.0.
Devuelve la ventana raz instancia utilizada byrun().
run() inicia la app en modo autnomo.
settings_Cls nuevo en la versin 1.8.0.
La clase utilizada para construir el panel de ajustes y la instancia pasada tobu
ild_config().
Debe usar la configuracin ni una de las subclases con diferentes- outs (SettingsW
ithSidebar laicos, SettingsWithSpinner,SettingsWithTabbedPanel, SettingsWithNoMe
nu). Tambin puede crear sus propios ajustes de subclase. Consulte la documentacin
para obtener ms informacin. ofSettings
settings_cls es un ObjectProperty y predeterminados a SettingsWithSpinner que mu
estra paneles de ajustes con un spinner para alternar entre ellas. Si establece
un valor de tipo string, la fbrica ser utilizada para resolver la clase.
stop( largs) detener la aplicacin.
Si utiliza este mtodo, toda la aplicacin se detendr emitiendo una llamada tostopTou
chApp().
Ttulo Ttulo de la aplicacin. Puede establecer esto como sigue:
184
clase MyApp(App):
def construir(self):
self.title = "Hello world"
nuevo en la versin 1.0.5.
Ha cambiado en la versin 1.8.0: El ttulo es ahora aStringProperty. No se establece
en el ttulo de la clase, como ya he indicado en la documentacin.
Nota: Para Kivy < 1.8.0, puede establecer esto como sigue:
clase MyApp(App):
Ttulo = ttulo Personalizado
si desea cambiar dinmicamente el ttulo, puede hacer:
desde kivy.base importar EventLoop EventLoop.window.title = "Nuevo ttulo"
use_kivy_Settings = True nuevo en la versin 1.0.7.
Si es True, la configuracin de la aplicacin tambin incluir la configuracin Kivy. Si n
o desea que el usuario cambie cualquier configuracin kivy desde su interfaz de us
uario de configuracin, cambiar a false.
user_data_dir de nuevo en la versin 1.7.0.
Devuelve la ruta de acceso al directorio en el sistema de archivos a los usuario
s que la aplicacin puede utilizar para almacenar datos adicionales.
Plataformas diferentes tienen diferentes convenciones con respecto a donde el us
uario puede almacenar datos como, por ejemplo, las preferencias, los juegos guar
GPU en cada fotograma. Si va a cargar muchas imgenes pequeas, puede aumentar fcilme
nte este pa- rameter a 10 o ms. Si va a cargar varias imgenes Full HD, el tiempo d
e carga puede tener consecuencias y bloquear la aplicacin. Si desea una experienc
ia suave, utilice el valor predeterminado.
De hecho, una imagen RGB Full-HD tendr ~6MB en memoria, por lo que puede tomar ti
empo. Si usted tiene activado mipmap=True tambin, entonces la GPU debe calcular e
l mipmap de estas imgenes demasiado grandes, en tiempo real. A continuacin, puede
ser mejor para reducir themax_upload_per_frame a 1 o 2. Si desea deshacerse de e
se (o reducir mucho), eche un vistazo al formato DDS.
Nuevo en la versin 1.6.0.
num_trabajadores nmero de trabajadores a emplear durante la carga (slo se usa si e
l cargador la aplicacin lo soporta). Este ajuste afecta el cargador slo en la inic
ializacin. Una vez que el cargador se inici, el ajuste no tiene impacto:
de kivy.loader Cargador Cargador de importacin.num_workers = 4
El valor por defecto es 2 para ofrecer una experiencia de usuario ms fluida. Uste
d podra aumentar el nmero de trabajadores, a continuacin, todas las imgenes se carga
n ms rpido, pero el usuario no ha sido capaz de utilizar la aplicacin mientras se c
arga. Antes de 1.6.0, el nmero por defecto es 20, y la carga de muchas imgenes ful
l-HD fue completamente el bloqueo de la aplicacin.
Nuevo en la versin 1.6.0.
Pause Pause() el cargador, puede ser til durante las interacciones.
Nuevo en la versin 1.6.0.
resume() reanudar el cargador, despus apause().
Nuevo en la versin 1.6.0.
Ejecutar( largs) bucle principal para el cargador.
start() inicia el proceso de rosca/cargador.
stop() detiene el thread del cargador/proceso.
classkivy.loader.ProxyImage(arg,
kwargs) Bases: kivy.core.image.Imagen
devuelta por el cargador.image().
Propiedades: bool cargado, por omisin FalseThis valor puede ser True si la imagen
ya est en cach.
Eventos
en_loadFired cuando se carga la imagen o cambiado.
21.4 Atlas
nuevo en la versin 1.1.0.
187
gestiona Atlas Atlas de textura: Empaque de mltiples texturas en uno solo. Con el
lo, se reduce el nmero de imgenes cargadas y aceleracin en la carga de aplicaciones
. Este mdulo contiene la clase Atlas y procesar la lnea de comandos para la creacin
de un atlas a partir de un conjunto de archivos PNG individuales. La seccin de l
a lnea de comandos requiere la almohada biblioteca o la extinta Python Imaging Li
brary (PIL), para ser instalado.
Un Atlas se compone de 2 o ms archivos:
un archivo json (.atlas) que contiene el archivo de imagen los nombres y ubicaci
ones de textura del atlas.
Uno o varios archivos de imagen que contienen texturas referenciado por el archi
vo .atlas.
21.4.1 Definicin de archivos .atlas
un archivo con <basename>.atlas es un archivo con formato JSON como este:
{ " <basename>- <index>.png": { "id1": [ <x>, <y>, <width>, <height>], "id2": [
<x>, <y>, <width>, <height>] # ...
} # ...
}
formacin.
(outname staticcreate, nombres de archivo, el tamao, el relleno=2, use_path=false
) Este mtodo se puede utilizar para crear un atlas manualmente desde un conjunto
de imgenes.
Parmetros: strBasename outname utilizar para.atlas creacin y- <idx>.png imgenes aso
ciadas.
Los nombres de archivo: Listalista de nombres de archivos para poner en el atlas
.
tamao: int o lista (anchura, altura)Tamao del atlas imagen.
Acolchado: int, por defecto 2Relleno para poner alrededor de cada imagen.
Sea cuidadoso. Si ests utilizando un relleno < 2, usted podra tener problemas c
on los bordes de las imgenes. Porque de la linearizacin de OpenGL, puede utilizar
los pxeles de la imagen contigua.
Si ests utilizando un relleno >= 2, vamos a generar automticamente una "fronter
a" de 1px alrededor de su imagen. Si usted mira el resultado, no te asustes si l
a imagen interior no es exactamente el mismo que el suyo :).
use_path: bool, por omisin FalseIf True, la ruta relativa del archivo PNG origen
nombres se incluirn en el atlas ids en lugar de que slo en los nombres de archivo.
Plomo- ing puntos y barras ser excluido y todos los otros cortes en la ruta sern
reemplazados con caracteres de subrayado. Por ejemplo, si USE_path es False (pre
determinado) y el nombre del archivo es ../data/ttulos/green_hierba.png, el id_ve
rde hierba. Si use_path es True, se bedata_azulejos_Green_hierba.
Ha cambiado en la versin 1.8.0: El parmetro USE_path aadida
Filename el nombre del atlas actual.
filename es anAliasProperty y predeterminados a Ninguno.
Original_lista de texturas texturas atlas original (que contienen thetextures).
Original_texturas es aListProperty y predeterminados a [].
Nuevo en la versin 1.9.1.
Lista de texturas texturas disponibles dentro del atlas.
texturas es aDictProperty y predeterminados a {}.
21.5 Cache manager
el administrador de cach se pueden utilizar para almacenar objetos python adjunta
a una clave nica. La cach puede controlarse de dos formas: con un objeto o un lmit
e de tiempo de espera.
Por ejemplo, podemos crear un nuevo cach con un lmite de 10 objetos y un tiempo de
espera de 5 segundos:
# Registrar un nuevo Cache Cache.register( mycache , limit=10, timeout=5)
# crear un objeto + ID
190
get_rfp() obtiene la actual FPS "real" calculado por el reloj. Este contador ref
leja la verdadera tasa de fotogramas mostrados en la pantalla.
En contraste con get_fps(), esta funcin devuelve un contador del nmero de marcos,
no el promedio de cuadros por segundo.
195
Por favor, tenga en cuenta que este mtodo devolver directamente y sin resultado pu
ede ser devuelto:
@mainthread def callback(self, args):
print( la solicitud succedded! , Esta devolucin de llamada en el subproceso prin
cipal. )
para obtener informacin sobre cmo configurar yourApp, consulte la seccin de configu
racin de la aplicacin.
Ha cambiado en la versin 1.7.1: El ConfigParser deberan funcionar correctamente co
n UTF-8. Los valores se convierten de ASCII a Unicode slo cuando sea necesario. E
l mtodo get() devuelve cadenas UTF-8.
21.8.3 Configuracin disponible tokens
kivy
desktop: int, 0 o 1 Esta opcin controla el sistema operativo de escritorio de car
actersticas especficas, tales como la habilitacin de arrastrar la barra de desplaza
miento puede desplazarse en opiniones, desactivacin de burbujas en el TextInput,
etc. 0 est dis- abled, 1 est habilitada.
exit_en_escape: int, 0 o 1 permite salir kivy cuando se presiona Escape. 0 est de
sactivado, 1 est habilitada.
pause_on_MINIMIZE: int, 0 o 1 si se establece en 1, el bucle principal se detien
e y el_pause evento se distribuye cuando la ventana se minimiza. Esta opcin est pe
nsada para el uso en el escritorio. Por defecto es 0.
disposicin_teclado: Identificador de cadena del diseo para utilizar.
keyboard_mode: string Especifica el modo de teclado para usar. Si puede ser uno
de los FOL- Bramido:
.
"ystemandmulti - anlogos.
log_dir: cadena de ruta de directorio log.
log_enable: int, 0 o 1 activan el registro en archivo. 0 est desactivado, 1 est ha
bilitada.
log_level: cadena, uno de los debug , info , aviso , error o crtica establ
ece el mini- mum nivel de registro a utilizar.
log_name: cadena cadena de formato que se utiliza para el nombre de archivo del
archivo de registro.
window_icon: string Ruta del icono de la ventana. Utilice esta opcin si desea ree
mplazar el icono predeterminado de pygame.
posprocesamiento
doble_toca_distance: distancia mxima flotacin permitida para un doble toque, norma
lizado dentro del rango de 0 a 1000.
doble toque_int_time: el tiempo permitido para la deteccin de doble toque en mili
segundos.
Ignorar: lista de tuplas Lista de regiones donde toques nuevos son ignoradas. Es
to configura- cin el token puede utilizarse para resolver problemas de hotspot co
n DIY. El formato de la lista debe ser:
Ignore = [(xmin, xmax, ymin, ymax), ...]
Todos los valores deben estar dentro del rango de 0 - 1. El
jitter_distancia: int distancia mxima de deteccin de jitter, normalizado dentro de
l rango de 0 a 1000.
198
e procesamiento.
Nota: Esta caracterstica est limitada por el hardware del dispositivo de apoyo y n
o tendr ningn efecto en los dispositivos que no soportan el nivel de MSAA requerid
o.
Posicin: cadena, uno de auto o custom la posicin de la ventana en la pantalla.
Si el auto es usado, usted no tiene ningn control de la posicin inicial: superior
e izquierda son ignorados.
show_cursor: int, uno de 0 o 1 juego si o no se muestra el cursor en la ventana.
top: int posicin superior de loskits.
Redimensionable: int, uno de 0 o 1 si es 0, la ventana tendr un tamao fijo. Si 1,
ser la ventana redimensionable.
Rotacin: int, uno de 0, 90, 180 o 270 Rotacin de loskits.
Anchura: int ancho de ventana, pantalla completa no se utiliza si est establecido
en auto.
minimum_width: int anchura mnima para restringir la ventana. (sdl2 solamente): in
t_altura mnima altura mnima para restringir la ventana. (sdl2 solamente)
199
ha cambiado en la versin 1.8.0: parmetro de valor aadido, puede utilizarse para est
ablecer el valor predeterminado de la propiedad. Adems, el tipo de valor se utili
za para especializarse en la propiedad creada.
Ha cambiado en la versin 1.9.0: En el pasado, si el valor es de tipo bool, un Num
ericProperty sera creado, ahora un BooleanProperty es creado.
Adems, ahora y argumentos posicionales y se pasan a la propiedad cuando se crea.
Advertencia: Esta funcin est diseada para el idioma Kivy, no la utilice en su cdigo.
Usted debe declarar la propiedad en su clase en lugar de usar este mtodo.
Parmetros: Nombre stringName del valor de la propiedad: objeto, optionalDefault v
alor de la propiedad. Tipo se utiliza tambin para creat- cin de los tipos de propi
edad ms adecuada. El valor predeterminado es Ninguna.
::
>>> miwidget = Widget()
>>> miwidget.create_property( custom ) >>> miwidget.custom = T
rue >>> print(miwidget.custom) Verdadero
dispatch() envo un evento en todos los controladores/fbind aadido en bind(). Tan p
ronto como un manejador devuelve True, el envo se detiene.
La funcin posicional y recopila todos los argumentos y los pasa a los controlador
es.
Nota: Los controladores son llamados en el orden inverso en que fueron registrad
as withbind().
Parmetros
basestringthe event_type: nombre del evento que se va a despachar.
Ha cambiado en la versin 1.9.0: Palabra clave coleccin de argumentos y expedicin fu
e agregado. Antes, slo los argumentos posicionales sera recogida y transmitida.
eventos() devuelven todos los eventos de la clase. Puede ser usado para la intro
speccin.
Nuevo en la versin 1.8.0.
fbind() Mtodo para avanzados, y normalmente ms rpido vinculantes. Este mtodo es dife
rente thanbind() y est pensado para los usuarios ms avanzados y de uso interno. Pu
ede utilizarse siempre que los siguientes puntos son escuchadas.
1.En contraposicin a bind(), no comprueba que esta funcin y largs/kwargs antes no
se ha vinculado a este nombre. Para enlazar el mismo callback varias veces ser si
mplemente aadiendo.
2.Aunque bind() crea un WeakMethod la devolucin de llamada cuando se enlaza a un
evento o una propiedad, este mtodo se almacena directamente la devolucin de llamad
a, a menos que una palabra clave argumentref con valor verdadero es provisto y l
uego aWeakMethod es guardado. Esto es til cuando no hay riesgo de fuga de memoria
almacenando la devolucin de llamada directamente.
205
3.Este mtodo devuelve un nico nmero positivo si el nombre fue encontrado y obligado
s, y 0, de lo contrario. No plantea una excepcin, likebind() si el nombre de la p
ropiedad no se encuentra.
Si no es cero, devuelve el UID es nico de este nombre y la devolucin de llamada y
puede utilizarse con uid_unbind() para desatarlo.
Al enlazar un callback con largs y/o kwargs,funbind() debe ser usada para desata
rlo.
Si no se proporcionan largs y kwargs,unbind() puede ser usada como bien. uid_unb
ind() puede ser usada en cualquier caso.
Este mtodo pasa en cualquier atrapados posicionales y/o argumentos para la devolu
cin de llamada, eliminando la necesidad de llamar a parcial. Cuando se llama a la
funcin callback el gastado largs se pasan en seguida por ejemplo/valor (slo ejemp
lo para kwargs) seguido por gastados kwargs.
A continuacin se muestra un ejemplo de uso similar a la del ejemplo inbind():
clase DemoBox(BoxLayout):
def __init__(self, ):
super(DemoBox
kwargs auto).__init__( kwargs) self.orientacin = "vertical"
= botn btn(text="Normal enlace al evento") btn.fbind( on_press , self.en_event)
= Botn Btn2(text="enlace normal a un cambio de propiedad") Btn2.fbind( State , se
lf.en_property)
Btn3 = Botn(text="A: utilizando la funcin con args"). Btn3.fbind( on_press , self.
en_event_con_args, "derecha", rbol= Abedul , Food= apple )
= Botn Btn4(text="Unbind A.") Btn4.fbind( on_press , self.unbind_a, Btn3)
= Botn Btn5(text="Use una funcin flexible") Btn5.fbind( on_press , self.en_nada)
= Botn Btn6(text="B: Uso de funciones flexibles con args. Para hardcores"). Btn6.
fbind( on_press , self.en_nada, "1", "2", Monthy Python")="
Btn7 = Botn(text="Fuerza envo B con distintos parmetros") Btn7.fbind( on_press , Bt
n6.la expedicin, "on_press , 6, 7, monthy="otros python")
pero en [btn, Btn2, Btn3, Btn4, Btn5, Btn6, Btn7]:
self.add_widget(pero)
def on_evento(self, obj):
print("evento tpico de", obj)
en def_event_con_args(self, lateral, obj, rbol=none, alimentos=None):
print("Evento con args", obj, lateral, rbol, alimentos)
def sobre_property(self, obj, valor):
print("tpico de cambio de propiedad", obj, "a", el valor)
de def_nada(self, args,
kwargs):
print( La funcin flexible ha args , Str(args), "y
kwargs" str(kwargs) devolver True
def_unbind un(self, btn, evento):
206
clase TestApp(App):
def construir(self):
retorno Widget()
i = InteractiveLauncher(TestApp()) i.run(). # Pulse la tecla Tab para una list
a de atributos de la app i.root. # Pulse la tecla Tab para una lista de atribu
tos del widget de root
# App es aburrido. Fije un nuevo widget!
I.root.add_widget(MyPaintWidget())
i.safeIn() # La aplicacin ya est bloqueado.
# Haga clic en la pantalla varias veces.
i.safeOut() # los clicks se mostrar ahora
# borrar ilustraciones y empezar a travs de i.root.Canvas.clear()
Nota: Todos los proxies utilizados en el mdulo almacenar su referente en el atrib
uto_ref, a la que se puede acceder directamente, si es necesario, como para la o
btencin de doc cadenas. help() andtype() tendrn acceso al proxy, no su referente.
21.14.3 directamente pausar la aplicacin
tanto el SafeMembrane InteractiveLauncher y mantener referencias internas del th
eEventLoop segura y Confirmado threading.los objetos de evento. Puede utiliz
ar sus safing mtodos para el control de la aplicacin manualmente.
SafeMembrane.safeIn() producir la aplicacin para pausar andSafeMembrane.safeOut()
permitir una pausa para continuar ejecutando la aplicacin. Esto es potencialmente t
il para crear scripts de acciones en las funciones que necesita para actualizar
la pantalla, etc.
Nota: La pausa se implementa a travs de los relojes Schedule_once(), mtodo y ocur
re antes del inicio de cada fotograma.
21.14.4 agregando atributos dinmicamente
Nota: Este mdulo utiliza los subprocesos y objeto proxy para encapsular el runnin
gApp. Los interbloqueos y corrupcin de memoria puede ocurrir si se hacen referenc
ias directas dentro de la rosca sin pasar por el servidor proxy(s).
toca volver la lista de todos los toques o Mover abajo en la actualidad miembros
.
classkivy.base.ExceptionHandler Bases: builtins.El objeto
controlador base que captura excepciones inrunTouchApp(). Puede subclase y exten
derlo como fol- mnimos:
Clase E(ExceptionHandler):
def handle_exception(self, inst):
Logger.exception( exception atrapada por ExceptionHandler ) volver ExceptionMana
ger.PASS
ExceptionManager.add(E_handler())
todas las excepciones ser establecido para pasar, y conectado a la consola!
Handle_exception(exception) manejar una excepcin, valores predeterminados para de
volver ExceptionManager.Stop.
classkivy.base.ExceptionManagerBase Bases: builtins.object
ExceptionManager administra controladores de excepciones.
add_handler(cls) Agregar un nuevo controlador de excepciones a la pila.
handle_exception(inst) llamado cuando se ha producido una excepcin en la runTouch
App() bucle principal.
remove_handler(cls) quitar un controlador de excepciones de la pila.
kivy.base.ExceptionManager = <kivy.base.ExceptionManagerBase object>Ejemplo de a
plicacin.
kivy aExceptionManagerBase.base.runTouchApp(widget=none, slave=false) esttica fun
cin principal que inicia la aplicacin de bucle. Puede acceder a cierta magia a tra
vs de los siguientes argumentos:
parmetros <empty>Para realizar el envo de trabajos, necesita al menos una entrada
al oyente. Si no, la aplicacin saldr. (MTWindow actan como una entrada listener)
widgetIf pasar slo un widget, un MTWindow ser creado y el widget se aadir a la venta
na como la raz del widget.
slaveNo entrega de eventos est hecho. Este ser tu trabajo.
widget + slaveNo entrega de eventos est hecho. Este ser tu trabajo pero intentamos
conseguir la ventana (debe ser creado por usted de antemano) y aadir el widget.
Muy til para la incrustacin de Kivy en otro toolkit. (Como Qt, verificar kivy disea
do)
kivy.base.stopTouchApp() detener la aplicacin actual dejando el bucle principal d
e
21,16 objeto Logger
diferentes niveles de registro disponibles son : Trace, Debug, info, advertencia
, error y grave.
Ejemplos de uso:
217
de kivy.logger Logger
Logger.info( title: importacin Este es un mensaje de informacin. ) Logger.debug( Tt
ulo: Este es un mensaje de depuracin. )
intente:
elevar la excepcin( bleh ) salvo excepcin:
Logger.exception("algo sucedi!")
El mensaje pasa al registrador est dividida en dos partes, separadas por un signo
de dos puntos (:). La primera parte es usado como un ttulo, y la segunda parte s
e utiliza como el mensaje. De esta manera, usted puede "clasificar" su mensaje fc
ilmente.
Esto es una prueba Logger.info( Application: )
# aparecern como
[INFO ] [ Aplicacin ] Esta es una prueba
21.16.1 configuracin del registrador
el registrador puede controlarse a travs del archivo de configuracin: Kivy
[kivy] log_level = info log_enable = 1 log_dir = registros log_name = kivy_%y--%
d%m_%_.txt
Ms informacin acerca de los valores permitidos se describen en el mdulo thekivy.con
fig.
21.16.2 Logger historia
incluso si el registrador no est habilitada, usted todava tiene acceso a los ltimos
100 mensajes:
desde importar LoggerHistory kivy.logger
print(LoggerHistory.Historia)
kivy.logger.Logger = <logging.Logger object>Instancia predeterminada
classkivy Kivy logger.logger.LoggerHistory(level=0) Bases: logging.Handler
handler historia Kivy
21,17 m tricas
nuevo en la versin 1.5.0.
Una pantalla se define por su tamao fsico, densidad y resolucin. Estos factores son
esenciales para la creacin de la IU con el tamao correcto en todas partes.
En Kivy, todos los gasoductos grficos trabajar con pxeles. Pero el uso de pxeles co
mo unidad de medida es el problema- atic porque los tamaos cambian segn la pantall
a.
218
21.17.1 dimensiones
si desea disear su interfaz de usuario para diferentes tamaos de pantalla, usted q
uerr mejor para trabajar con unidades de medida. Kivy ofrece algunas alternativas
ms escalable.
Unidades pt puntos - 1/72 de una pulgada, basado en el tamao fsico de la pantalla.
Prefiere utilizar sp en lugar del PT.
mm milmetros - Basado en el tamao fsico de la pantalla.
6, 87)]])
# Ahora puede buscar el gesto T con datos similares (usuario).
# Esto activar ambos callbacks enlazado arriba.
gdb.reconocer([ [Vector(45, 8), Vector(110, 12)], [Vector(88, 9), Vector(85, 95)
]])
221
as ture.name) true, el gesto est incluido en la lista devuelta. Puede ser una cad
ena o una matriz de cadenas de
gdb reconocedor =()
# coincidir con todos los nombres que comiencen con un captial N # (ie Prxima nuev
a, N, Nebraska, etc, pero no "n" o "siguiente").filter gdb(name= N )
# exactamente N gdb.filter(name= N$ )
# Nebraska, teletubbies, Francia, fraggle, N, n, etc gdb.filter(name=[ [NN] , (
?i)T , (?i)F ])
priorityLimits la lista devuelta a gestos con ciertos MultistrokeGesture.valores
de prioridad. Si se especifica como un entero, slo gestos con una prioridad ms ba
ja son devueltos. Si se especifica como una lista (mn./mx.)
# prioridad mxima 50 gdb.filter(priority=50)
# prioridad mxima 50 (el mismo resultado que anteriormente).filter gdb(Prioridad=
[0, 50])
# Min prioridad 50, mximo 100 gdb.filter(Prioridad=[50, 100])
cuando se utiliza esta opcin,Recognizer.db se ordenan automticamente segn la priori
dad, incurrir en gastos adicionales. Puede useforce_priority_sort para invalidar
este comportamiento si tus gestos ya estn ordenados por prioridad.
Orientacin_sensitiveLimits la lista devuelta a los gestos que son la orientacin se
n- sitive (True), gestos que no son sensibles a la orientacin (False) o Ninguno (
plantilla de ignorar la sensibilidad, este es el valor predeterminado).
numstrokesLimits la lista devuelta a los gestos que tienen el nmero especificado
de trazos (en MultistrokeGesture.strokes). Puede ser un nmero entero o una lista
de enteros.
numpointsLimits la lista devuelta a los gestos que tienen determinados Multistro
keGesture.numpoints valores. Esto est previsto flexi- bilidad, no lo utilice a me
nos que sepa lo que hace. Puede ser un nmero entero o una lista de enteros.
force_priority_sortCan utilizarse para anular el orden predeterminado de comport
amiento. Normalmente MultistrokeGesture objetos son devueltos en orden de priori
dad si
se utiliza la opcin de prioridad 223. Al definir este valor como true devolver ges
tos ordenados en prioridad o- der, devolver false en el orden de los gestos se ag
regaron. Ninguno significa decidir automticamente (la opcin predeterminada).
Nota: Para un mejor rendimiento, puede cargar su gesto database en orden de prio
ridad y establecer esta en False cuando callingRecognizer.reconocer()
dbCan establecerse si desea filtrar una lista diferente de objetos de reconocedo
r.db. Probablemente no querrs hacer esto; es usado internamente byimport_GESTURE(
).
import_GESTURE(data=none, filename=none,
kwargs) Importar una lista de gestos como
formateado byexport_GESTURE(). Uno de datos o debe especificar un nombre de arc
hivo.
Este mtodo acepta optionalRecognizer.filter() argumentos, si no especifica ningun
o, entonces todos los movimientos en los datos especificados son importados.
parse_GESTURE(data) analiza los datos con formato por export_GESTURE(). Devuelve
una lista de objetos MultistrokeGesture.
Esto es usado internamente byimport_GESTURE(), normalmente no necesita llamar a
esto directamente.
prepare_templates( kwargs) Este mtodo se utiliza para prepareUnistrokeTemplate objet
os dentro de los gestos en self.db.
Esto es til si desea minimizar el castigo de remuestreo perezoso preparando todos
los vectores de antemano. Si hace esto antes de una llamada toRecognizer.export
_GESTURE(), se han calculado los vectores cuando carga los datos ms adelante.
Este mtodo acepta optionalRecognizer.filter() argumentos.
ieUnistrokeTemplate.numpoints). Usted normalmente no desea hacerlo. ;n force_num
points, si se especifica, preparar todas las plantillas para el nmero de puntos (e
#rrggbbaa
kivy.parser.parse_int alias ofint
kivy.parser.parse_float alias offloat
class miclase(object):
def __init__(self, A=1.0):
super(MyClass, auto).__init__() self.a = un
Con Kivy, puede hacer:
class miclase(EventDispatcher):
A = NumericProperty(1.0)
Valor comprobando
si desea agregar una casilla para un mnimo / mximo valor permitido para una propie
dad, aqu est una posible aplicacin en Python:
class miclase(object):
def __init__(self, a=1):
super(MyClass, auto).__init__().un auto_min = 0 self.Un_max = 100 self.a = un
def _get_a(self):
retorno auto._un def _set_a(self, valor):
si el valor < self.Un_min o valor > self.Un_max:
levante ValueError( a fuera de los lmites"). auto_a = valor de una propiedad =(_g
et_a, _set_a)
La desventaja es que tienes que Hacer que el trabajo usted mismo. Y resulta muy
laborioso y complejo si tiene muchas propiedades. Con Kivy, puede simplificar el
proceso:
class miclase(EventDispatcher):
A = BoundedNumericProperty(1=0 min, max=100)
Eso es todo!
Gestin de errores
si la configuracin de un valor, de lo contrario, elevar un ValueError, usted tien
e dos opciones para manejar el error gracia- completamente dentro de la propieda
d. La primera opcin es usar un parmetro valordeerror. Un valordeerror es un substi
tuto para el valor no vlido:
# simplemente devuelve 0 si el valor excede los lmites bnp = BoundedNumericProper
ty(0 min=-500, max=500, valordeerror=0)
La segunda opcin para utilizar un parmetro errorhandler. Un errorhandler es un sol
o argumento llamar (o funcin lambda) que puede devolver un sustituto vlido:
# devuelve el valor de lmite cuando se exceden bnp = BoundedNumericProperty(0 min
=-500, max=500, errorhandler=lambda x: 500 si x > 500 -500) else
230
Conclusin
Kivy propiedades son ms fciles de usar que las estndar. Vea el siguiente captulo par
a obtener ejemplos de cmo usarlos :)
21.20.2 observar los cambios de propiedad
como decamos al principio, las propiedades de Kivy implementar el patrn Observer.
Eso significa que usted puede enlazar() a una propiedad y tienen su propia funcin
llamada cuando el valor cambia.
Existen varias maneras de observar los cambios.
Observar usando bind()
se puede observar un cambio de la propiedad mediante el mtodo bind() fuera de la
clase:
class miclase(EventDispatcher):
A = NumericProperty(1)
def callback(ejemplo, valor):
print( My retrollamada es llamada desde , instancia) print( y el valor cambiado
a , valor)
ins = MyClass() ins.bind(a=callback)
# En este punto, cualquier cambio en la propiedad llamar a su devolucin.
ins.a = 5 # callback llamado ins.a = 5 # no callback llamado, porque el valor no
cambiar ins.a = -1 # callback llamado
Nota: los bienes objetos viven en el nivel de clase y gestionar los valores inhe
rentes a las instancias. Volver a asignar al nivel de clase va a quitar la propi
edad. Por ejemplo, siguiendo con el cdigo anterior, MyClass.a = 5 reemplaza la pr
opiedad objeto con un simple int.
Observar mediante on_ <propname>
Si ha definido la clase usted mismo, puede utilizar la opcin _ <propname> callb
ack:
class miclase(EventDispatcher):
A = NumericProperty(1)
def sobre_a(self, instancia valor):
print( Mi propiedad un cambi a , valor)
ADVERTENCIA: Tenga cuidado con on_ <propname> . Si usted est creando esa llamada
en una propiedad hereda usted, usted no debe olvidarse de llamar a la funcin de
la superclase.
231
ar_UID debe ser llamado al desatarlo. Devuelve un nico uid positivo para ser usad
o con_uid.
funbind unbind() Quitar el observador de nuestro widget lista enlazada con fbind
observadores. Se elimina la primera coincidencia que encuentre, en contraposicin
al desenlace que busca todos los partidos.
get() devuelve el valor de la propiedad.
link() de la instancia de enlace con su nombre real.
Advertencia: uso interno solamente.
Cuando un widget se define y utiliza una propiedad de clase, la creacin de la pro
piedad Object sucede, pero la instancia no sabe nada acerca de su nombre en el w
idget: categora
miwidget(Widget):
UID = NumericProperty(0)
En este ejemplo, el uid ser una instancia NumericProperty(), pero la propiedad in
stancia no sabe su nombre. Eso whylink() se utiliza en widget.__new__. La funcin
Enlace tambin se usa para crear el espacio de almacenamiento de la propiedad para
esta instancia widget especfico.
set() establece un nuevo valor para la propiedad.
unbind() Quitar el observador de nuestro widget de la lista de observadores.
uid_unbind() Quitar el observador de nuestro widget de la lista de observadores
con fbind enlazado con el uid.
233
reenlazar: bool, por omisin FalseWhether kv reglas con este objeto como un atribu
to diate interme- en una regla de kv, actualizar la propiedad enlazada cuando est
e objeto cambia.
Ese es el comportamiento estndar es que si hay una regla de kv texto:
self.a.b.c.d, donde a, b y c son propiedades con reenlazar falso y d es un Strin
gProperty. A continuacin, cuando se aplica la regla, el texto se- viene obligado
slo tod. Ifa,b, orc cambiar,texto todava permanece enlazado tod.
Adems, si alguno de ellos wereNone cuando el imperio fue inicialmente evaluados,
por ejemplo, b; thentext wasNone tob est enlazado y no sern obligados incluso when
b tod es cambiado a No beNone.
Estableciendo reenlazar a cierto, sin embargo, la norma ser re-evaluada y todas l
as propiedades de rebote intermedio cuando los cambios de propiedad. Por ejemplo
,
en el ejemplo anterior, se convierte en notNone wheneverb cambios o si fue ningu
no antes,texto se evala de nuevo y se convierte en el rebote tod. El exceso de to
do resultado es thattext ahora est ligado a todas las propiedades amonga,b, Orc q
ue haverebind toTrue set.
kwargs: una lista de argumentos baseclassIf kwargs incluye un argumento baseclass,
este valor ser utilizado para la validacin: isinstance(valor, kwargs[ baseclass ]
).
Advertencia: Para marcar la propiedad como ha cambiado, debe reasignar un nuevo
objeto de python.
Ha cambiado en la versin 1.9.0: Enlazar ha sido introducido.
Ha cambiado en la versin 1.7.0: baseclass parmetro agregado.
classkivy.properties.BooleanProperty Bases: kivy.properties.Property
propiedad que representa nicamente un valor booleano.
Defaultvalue booleanSpecifies parmetros: el valor predeterminado de la propiedad.
classkivy.properties.BoundedNumericProperty Bases: kivy.properties.Property
propiedad que representa un valor numrico dentro de un mnimo y/o mximo enlazado enl
azado - dentro de un intervalo numrico.
Parmetros por defecto: numericSpecifies el valor predeterminado de la propiedad.
kwargs: una lista de palabras clave min argumentsIf, este parmetro est incluido spec
i- fies el valor numrico mnimo que ser aceptada. Si un parmetro max est incluido, est
e parmetro especifica el valor numrico mximo que ser aceptada.
Lmites Volver mn./mx. del valor.
Nuevo en la versin 1.0.9.
get_max() devuelve el valor mximo aceptable para la BoundedNumericProperty en obj
. Volver Ninguno si no se establece el valor mximo. Checkget_min para un ejemplo
de uso.
Nuevo en la versin 1.1.0.
get_min() devuelve el valor mnimo aceptable para el BoundedNumericProperty en obj
. Volver Ninguno si no hay ningn valor mnimo:
235
clase miwidget(Widget):
nmero = BoundedNumericProperty(0=-5, min, max=5)
widget = Miwidget() print(Widget.property( number ).get_min(widget)) # dar salida
-5
Nuevas en la versin 1.1.0.
set_max() cambia el valor mximo aceptable para la BoundedNumericProperty, slo para
Por ejemplo, relleno de GridLayout utilizada slo para aceptar un valor numrico que
se aplica por igual a la izquierda, arriba, derecha y abajo del GridLayout. Aho
ra el relleno puede darse uno, dos o cuatro valores, que se ampli en una longitud
de cuatro lista [Izquierda, Arriba, Derecha, Abajo] y se almacena en la propied
ad.
Parmetros por defecto: una lista predeterminada de valuesSpecifies los valores pr
edeterminados de la lista.
Longitud: int, uno de 2 o 4.Especifica la longitud de la lista final. La lista p
redeterminada se ampliar para que coincidan con una lista de esta longitud.
kwargs: una lista de palabras clave argumentsNot utilizados actualmente.
Teniendo en cuenta que la lista predeterminada se ampli a una lista de longitud 4
, aqu hay algunos ejemplos de cmo la VariabelListProperty son manejados.
VariableListProperty([1]) representa [1, 1, 1, 1].
VariableListProperty([1, 2]) representa [1, 2, 1, 2].
VariableListProperty([ 1px , (2, PX ), 3, 4.0]) representa [1, 2, 3, 4.0].
VariableListProperty(5) representa [5, 5, 5, 5].
VariableListProperty(3, longitud=2) representa [3, 3].
Nuevo en la versin 1.7.0.
kivy.properties.Property classkivy.properties.ConfigParserProperty Bases:
propiedad que permite enlazar a los cambios en los valores de configuracin de aCo
nfigParser as como para enlazar los valores ConfigParser a otras propiedades.
Un ConfigParser est compuesto de secciones, donde cada seccin tiene un nmero de cla
ves y valores asociados con estas teclas. ConfigParserProperty le permite escuch
ar y cambiar los valores de las claves especificadas kivy basados en otras propi
edades.
Por ejemplo, supongamos que queremos tener un TextInput escribir automticamente s
u valor, representado como un int, en la seccin de informacin de un ConfigParser.
Tambin, los textinputs debera actualizar sus valores de los campos del ConfigParse
r. Por ltimo, sus valores deben aparecer en una etiqueta. En py:
clase Info(etiqueta):
nmero = ConfigParserProperty(0, Informacin , nmero , ejemplo , val_type=int, val
ordeerror=41)
def __init__(self,
kw):
super(Info, auto).__init__( kw) config = ConfigParser(name="Ejemplo")
El cdigo anterior crea una propiedad que est conectado con el nmero clave en la sec
cin de informacin de la denominada ConfigParser ejemplo. Inicialmente, este Config
Parser no existe. A continuacin, en__init__, un Analizador de configuracin se crea
con el nombre ejemplo, que luego se vincula automticamente con esta propiedad. L
uego en kv:
BoxLayout:
TextInput:
rio de la aplicacin.
kivy.support.uninstall_twisted_reactor() desinstala el Kivy trenzado roscado del
reactor. No hay ms retorcido las tareas se ejecutarn despus de esto llamaron. Util
ice esta opcin para limpiar el twisted.internet.reactor .
Nuevo en la versin 1.9.0.
kivy.support.install_android() Instale los ganchos de la plataforma Android.
dormir automticamente cuando el dispositivo est en pausa.
matar la aplicacin automticamente cuando se pulsa la tecla de regresar.
21.23 Utils
Utils mdulo ofrece una seleccin de funciones de utilidad general y clases que pued
en ser tiles para diversas aplicaciones. Estos incluyen matemticas, color, algebra
icos y funciones de la plataforma.
Ha cambiado en la versin 1.6.0: La clase OrderedDict ha sido eliminado. Utilizar
colecciones.OrderedDict en lugar.
Kivy.utils.intersection(set1, set2) Volver la interseccin de 2 listas.
kivy.utils.diferencia(set1, set2) Volver la diferencia entre 2 listas.
kivy.utils.strtotuple(s) Convierte una cadena de tupla en una tupla con algunas
comprobaciones de seguridad. Diseado para ser utilizado con la funcin eval():
a = (12, 54, 68) b = str(a) # devolver (12, 54, 68) c = strtotuple(b) # devolv
er (12, 54, 68)
kivy.utils.get_color_de_hex(s) Transformar una cadena hexadecimal de color.
kivy kivyColor.utils.get_hex_de_color(color) transformar un kivyColor a un valor
hexadecimal:
>>> get_hex_from_color((0, 1, 0) #00FF00" >>> get_hex_from_co
lor((.25, .77, .90, .5) #3fc4e57f
nuevo en la versin 1.5.0.
241
[2.0, 2.0]
Se puede tambin utilizar en lugar de los operadores:
5 [15, 15] >>> v /= 2. = >>> v = Vector(1, 1) >>> v +=
2 >>> v [3, 3] >>> v
[7.5, 7.5]
classkivy.vector.Vector( largs) Bases: builtins.lista de la
clase Vector. Consulte la documentacin del mdulo para obtener ms informacin.
ngulo(a) Calcula el ngulo entre a y b, y devuelve el ngulo en grados.
244
>>> = (98, 28) >>> b = (72, 33) >>> c = (10, -5) >
>> d = (20, 88) >>> Vector.line_intersection(a, b, c, d) [15.2593
1928687196, 43.911669367909241]
Advertencia: Este es un mtodo de interseccin de lnea, no un segmento interseccin.
Para matemticas vase: http://en.wikipedia.org/wiki/Line-line_intersection
normalizar() devuelve un nuevo vector que tiene la misma direccin que el vec, per
o tiene una longitud de uno.
>>> v = Vector(88, 33).normalize() >>> v [0.93632917756904444,
0.3511234415883917] >>> v.length() 1.0
rotate(ngulo) Gire el vector con un ngulo en grados.
>>> v = Vector(100, 0) >>> v.rotate(45) >>> [v]
staticsegment 70.710678118654755, 70.710678118654741_intersection(v1, v2, v3, v4
) busca el punto de interseccin entre los segmentos (1)v1->v2 y (2)v3->v4 y
lo devuelve como un objeto vectorial.
>>> = (98, 28) >>> b = (72, 33) >>> c = (10, -5) >
>> d = (20, 88) >>> Vector.segment_interseccin(a, b, c, d) Ninguno
>>> = (0, 0) >>> b = (10, 10) >>> c = (0, 10) >>
;> d = (10, 0) >>> Vector.segment_interseccin(a, b, c, d) [5, 5]
248
Captulo
veinticuatro
adaptadores
nuevo en la versin 1.5.0.
Un adaptador es una clase de tipo de controlador de mediacin que procesa y presen
ta datos para su uso en las vistas. Esto se hace mediante la generacin de modelos
, generalmente enumera ofSelectableView elementos, que son consumidos y presenta
do por las vistas. Las vistas son de nivel superior, como aListView widgets, que
permiten a los usuarios desplazarse y (opcionalmente) interactan con sus datos.
22.1 El concepto
Kivy adaptadores estn modelados segn el patrn de diseo de adaptador. Conceptualmente
, desempean el papel de un "pro- troller entre los datos y opiniones en una arqu
itectura de tipo Model-View-Controller.
El papel de un adaptador puede describirse como sigue:
22.2 Los Componentes
Los componentes involucrados en este proceso son:
Adaptadores: El adaptador desempea un papel de mediador entre la interfaz de usua
rio y sus datos. Se man- las edades de la creacin de los elementos de vista para
el modelo utilizando el parmetro args_converter para preparar el contructor argum
entos para los cls/ver elementos de plantilla.
249
datos los datos para que una vista sea construido utilizando el cls o plantilla
proporcionada, junto con el parmetro args_Converter proporcionado o el default_ar
gs convertidor.
En esta clase de base de datos es un ObjectProperty, por lo que puede utilizarse
para una amplia variedad de necesidades de vista nica.
Las subclases pueden invalidar para utilizar otro tipo de datos, como o aListPro
perty DictProperty segn corresponda. Por ejemplo, en aListAdapter, datos aListPro
perty.
Los datos se anObjectProperty y predeterminados a Ninguno.
get_Cls() nuevo en la versin 1.9.0.
Devuelve el tipo de widget especificado por self.cls. Si es una cadena, la fbrica
es consultada para recuperar la clase widget con el nombre dado, de lo contrari
o se devuelve directamente
un kv. Template Template para crear instancias de un determinado elemento de la
vista (utilice este o CLS).
Plantilla es anObjectProperty y predeterminados a Ninguno.
22.4 DictAdapter
nuevo en la versin 1.5.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
Es un adaptador ADictAdapter alrededor de un diccionario de Python de registros.
Se ampla la lista de capacidades similares a theListAdapter.
Si usted desea tener un escueto lista adaptador, sin seleccin, utilice theSimpleL
istAdapter.
classkivy.adaptadores.dictadapter.DictAdapter( kwargs) Bases: kivy.adaptadores.list
adapter.ListAdapter
un DictAdapter es un adaptador en torno a un diccionario de Python de registros.
Se ampla la lista de capacidades similares a theListAdapter.
Corte_para_sel( args) Mismo como trim_para_sel, pero intervienen elementos de list
a dentro del rango seleccionado se cortan, dejando nicamente la lista de los elem
entos que estn seleccionados.
ordena_keys ser actualizado por update_para_new_data().
Un diccionario de datos que indexa registros mediante claves que son equivalente
s a las teclas ordenadas_keys, o son un superconjunto de las claves en la SORTED
_keys.
Los valores pueden ser cadenas, las instancias de clase, dicts, etc.
Los datos se aDictProperty y predeterminados a Ninguno.
251
por supuesto, usted puede construir su propio modelo de datos python sistema com
o backend de una aplicacin Kivy.
Por ejemplo, para utilizar el Google App Engine Data Modeling system con Kivy, p
uede definir la clase de la siguiente manera:
desde google.appengine.ext importar db de
clase MySelectableDataItem(db.Model):
# ... otras propiedades es_selected = db.BooleanProperty()
es fcil construir esa clase con Python.
classkivy normal.adaptadores.models.SelectableDataItem(ES_selected=false) Bases:
builtins.objeto
una clase mixin que contengan requisitos para las operaciones de seleccin.
_seleccionado es una propiedad booleana que indica si el elemento de datos es o
no seleccionado.
22.8 SimpleListAdapter
nuevo en la versin 1.5.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
La SimpleListAdapter es usado para listas bsicas. Por ejemplo, puede utilizarse p
ara mostrar una lista de cadenas de slo lectura que no requieren la interaccin del
usuario.
classkivy.adaptadores.simplelistadapter.SimpleListAdapter( kwargs) Bases: kivy.adap
tadores.adaptador.
ASimpleListAdapter adaptador es un adaptador en torno a una lista de Python.
Obtiene theListAdapter FromAdapter, CLS, plantilla y args_converter propiedades.
datos Los datos propiedad list contiene una lista de objetos (que pueden ser cad
enas) que ser utilizado di- rectamente si no_args funcin del convertidor. Si hay u
n convertidor_args, los objetos de datos se pasarn a l para instanciar el elemento
ver las instancias de la clase.
Los datos se aListProperty y predeterminados a [].
256
CAPTULO
TWENTYTHREE
ABSTRACCIN BSICO
Este mdulo define las capas de abstraccin de nuestros principales proveedores y su
s implementaciones. Para obtener ms informacin, consulte Introduccin a la arquitect
ura y los principales proveedores de proveedores de insumos y parte de la docume
ntacin.
En la mayora de los casos, no se debe utilizar directamente una biblioteca que ya
est cubierto por el ncleo de la abstraccin. Siempre trate de usar primero de nuest
ros proveedores. En caso de que nos falta una funcin o mtodo, por favor, hganoslo s
aber mediante la apertura de un nuevo informe de error en lugar de depender de s
u biblioteca.
Advertencia: estos no son los widgets! Estas son slo las abstracciones de las res
pectivas funciones. Por ejemplo, se puede agregar una imagen principal a la vent
ana. Tienes que usar el widget de la imagen en lugar de la clase. Si usted est re
almente buscando widgets, consulte tokivy.uix.
23.1
Cargar un audio de sonido y reproducirlo con:
de kivy.core.audio importacin SoundLoader
sonido = SoundLoader.load( mytest.wav") si el Sonido:
sonido.length) Sound.play() %.fuente de sonido) print("Sound es %.3f segundos" %
print("Sound encontrado en %s"
no se debe utilizar la clase de Sonido directamente. La clase devuelta bySoundLo
ader.load() ser el mejor proveedor de sonido para ese tipo de archivo en concreto
, por lo que puede devolver diferentes clases de sonido dependiendo del tipo de
archivo.
23.1.1 Envo de eventos y cambios de estado
Audio a menudo se procesan en paralelo a su cdigo. Esto significa que a menudo ne
cesitan introducir el Kivy eventloop a fin de permitir que los eventos y cambios
de estado que se envi correctamente.
Pocas veces se necesita preocuparse por esto como Kivy apps normalmente siempre
requieren este bucle de eventos para la GUI para permanecer receptivos, pero es
bueno tener esto en cuenta a la hora de depurar o ejecutndose en un REPL (lectura
-Eval Print Loop).
Ha cambiado en la versin 1.8.0: ahora hay 2 diferentes implementaciones de Gstrea
mer: uno utilizando Gi/GST trabajando tanto para Python 2+3 con Gstreamer 1.0 y
otra utilizando PyGST trabajar slo para Python 2 + Gstreamer 0.10. Si tiene probl
ema con GStreamer, eche un vistazo a gstreamer-compatibilidad
257
23.2 Cmara
clase principal para adquirir la cmara y convertir su entrada en aTexture.
Ha cambiado en la versin 1.8.0: ahora hay 2 diferentes Gstreamer aplicacin: uno ut
ilizando Gi/GST trabajando tanto para Python 2+3 con Gstreamer 1.0 y otra utiliz
ando PyGST trabajar slo para Python 2 + Gstreamer 0.10. Si tiene problema con GSt
reamer, eche un vistazo a gstreamer-compatibilidad
classkivy.core.Camera.CameraBase( kwargs) Bases: kivy.event.EventDispatcher
Cmara clase abstracta de widget.
Cmara de hormign clases deben implementar la inicializacin y el bastidor para captu
rar en un bfer que se puede cargar a la GPU.
ndice: ndice intSource parmetros de la cmara.
tamao[tupla (int, int)] el tamao en que la imagen se dibuja. Si no se especifica t
amao, el valor por omisin es la resolucin de la imagen de la cmara.
resolucin[tupla (int, int)] resolucin para intentar solicitar de la cmara. Utilizad
o en la gstreamer pipeline, forzando las tapas appsink a esta resolucin. Si la cma
ra no apoyar la resolucin, un error de negociacin podran ser lanzados.
Eventos en_loadFired cuando la cmara est cargada y la textura se ha convertido en
disponibles.
on_textureFired cada vez que la cmara se actualiza de textura.
index ndice de origen de la cmara
cmara_init() inicializa la cmara (interno)
la resolucin de la cmara captura (width, height)
start() Iniciar la cmara adquirir
stop() soltar la cmara
la cmara de retorno de textura textura con la ltima captura
259
23.3 Portapapeles
clase principal para acceder al portapapeles. Si no somos capaces de acceder al
portapapeles del sistema, una falsa ser utilizado.
Ejemplo de uso:
Botn:
on_release:
de kivy.core.portapapeles Portapapeles importar self.Text = Clipboard.Clipboard.
Paste() copia( Data )
23.4 OpenGL
seleccionar y utilizar la mejor librera OpenGL disponibles. Dependiendo del siste
ma, el proveedor de ncleo pueden seleccionar un OpenGL ES o un escritorio "clsico"
, la librera OpenGL.
23.5
Las clases bsicas de Imagen para cargar imgenes y convertirlas a aTexture. Los dat
os crudos de la imagen se puede conservar en la memoria para obtener acceso.
23.5.1 Imgenes en memoria la carga de
nuevo en la versin 1.9.0: apoyo oficial para cargar en memoria. No todos los prov
eedores admiten, pero actualmente SDL2, pygame, pil imageio y trabajo.
Para cargar una imagen con un nombre de archivo, se suele hacer:
desde kivy.core.imagen como imagen de importacin CoreImage CoreImage im =("imagen
.png")
tambin puede cargar los datos de la imagen directamente desde un bloque de memori
a. En lugar de pasar el nombre de archivo, tendrs que pasar los datos como un obj
eto BytesIO junto con un parmetro "ext". Ambos son obligatorios:
importacin de kivy io.core.imagen imagen de importacin como CoreImage data = io.By
tesIO(open("imagen.png", "rb").read()) im = CoreImage(data, ext="PNG")
por defecto, la imagen no se almacenarn en cach como nuestro cach interno requiere
un nombre de archivo. Si desea agregar el almacenamiento en cach, un nombre de ar
chivo que representa el archivo (se utilizar slo para almacenamiento en cach):
importacin de kivy io.core.imagen imagen de importacin como CoreImage data = io.By
Lectura_pixel(x, y) para una determinada posicin x/y local, devolver el color del
pxel en esa posicin.
Aviso: Esta funcin slo se puede utilizar con imgenes cargadas con el keep_data=True
palabra clave. Por ejemplo:
m = Imagen.load( image.png", KEEP_data=True) color = m.read_pixel(150, 150)
Los parmetros x [int] Las coordenada x del pxel en cuestin.
y [int] coordenada local y del pixel en cuestin.
remove_from_cache() elimina la imagen de la cach. Esto facilita la re-carga de img
enes desde el disco en caso de que la imagen se ha modificado el contenido.
Nuevo en la versin 1.3.0.
Uso:
IM = CoreImage( 1.jpg ) # -- hacer algo -- im.remove_from_cache() = im CoreImage
( 1.jpg ) # Esta imagen ser re-cargado desde el disco
guardar(filename, volteadas=false) Guardar la textura de las imgenes de archivo.
El nombre de archivo debe tener la extensin ".png" porque la textura de los datos
ledos desde la GPU est en el formato RGBA. .jpg podra funcionar, pero no ha sido
probado hasta heavilly algunos proveedores podran romper cuando se utiliza. Otra
s extensiones no son compatibles oficialmente.
El parmetro volteadas voltea la imagen guardada verticalmente, y el valor predete
rminado es False.
Ejemplo:
# Guardar un objeto de imagen de ncleo de kivy.core.IMPORTAR IMAGEN IMAGEN IMAGEN
img =( hello.png") img.save( hello2.png")
# Guardar una textura
23.7 Texto
una abstraccin de la creacin de texto. Dependiendo de la seleccin de backend, la pr
ecisin de la representacin de texto puede variar.
Ha cambiado en la versin 1.5.0: LabelBase.line_height aadido.
Ha cambiado en la versin 1.0.7: TheLabelBase no genera ninguna textura si el text
o tiene un ancho <= 1.
Esta es la capa de fondo para obtener texto de texto diferentes proveedores, ust
ed slo debe utilizar este directamente si sus necesidades no son satisfechas por
theLabel.
Ejemplo de uso:
desde kivy.core.texto de etiqueta de importacin como CoreLabel
...
...
mi_label = CoreLabel() mi_label.Text = "hello" # la etiqueta es generalmente no
acortar_from: str, por omisin centerThe de qu lado se debe acortar el texto puede
ser izquierda, derecha o centro. Por ejemplo, si a la izquierda, aparecer el botn
hacia la izquierda y visualizar el texto a partir de la derecha como sea posible.
split_str: cadena, valores predeterminados para
(espacio)La cadena que se ut
ilizar para dividir las palabras por cuando se acorte. Si est vaco, podemos dividir
despus de cada carcter de llenar la lnea tanto como sea posible.
max_lneas: int, por defecto es 0 (ilimitado) Si se define, indicar cmo se permite
mxima de la lnea para representar el texto. Slo funciona si una limitacin de text_si
ze se establece
mipmap.[bool, el valor predeterminado es False] Crear una tira para la textura m
ipmap[bool, el valor predeterminado es False] si cada fila de texto tiene su pel
ado los espacios iniciales y finales. Si es halign justificar es implcitamente ci
erto.
strip_reflow[bool, el valor predeterminado es True] si el texto que se ha reorga
nizado en una segunda lnea debe ser seccionados, incluso si tira es falso. Esto sl
o tiene efecto cuando el tamao_HINT_x no es ninguno, porque de lo contrario las ln
eas nunca se separen.
unicode_errors[str, valores predeterminados para "colocar"] Cmo manejar los error
es de decodificacin de unicode.
Puede ser strict , replace o Omitir .
outline_width: int, por omisin NoneWidth en pxeles para el esbozo.
outline_color: tupla, por omisin (0, 0, 0)El Color del contorno.
Ha cambiado en la versin 1.9.2: esquema_width y outline_color fueron aadidas.
Ha cambiado en la versin 1.9.0: strip, strip_reflow, acortar, split_from_str, y u
nicode_errors fueron aadidas.
Ha cambiado en la versin 1.9.0: relleno y relleno_x_y ha sido arreglado para func
ionar como se espera. En el pasado, el texto fue acolchada por la negativa de su
s valores.
Ha cambiado en la versin 1.8.0: max_lines parmetros ha sido aadido.
Ha cambiado en la versin 1.0.8: tamao han quedado obsoletos y se reemplaza con tex
t_size.
Ha cambiado en la versin 1.0.7: El valign ahora es respetada. Este no era el caso
anteriormente, de modo que puede tener un problema en su aplicacin si usted no h
a considerado esta.
content_height volver al contenido altura; es decir, la altura del texto sin rel
leno.
content_size volver al contenido Tamao (width, height)
content_width volver al contenido de ancho; es decir, el ancho del texto sin rel
leno.
fontid devolver un ID nico para todos los parmetros de fuente
get_cached_EXTENTS() devuelve una versin en cach de theget_EXTENTS().
>>> func = auto._get_cached_EXTENTS() >>> func <built-in metho
d size of pygame.font.Font object at 0x01E45650>>>> func( una lnea ) (36
, 18)
Advertencia: Este mtodo devuelve una funcin de medida de tamao que es vlido para el
conjunto de fuentes- tings utilizado en la timeget_cached_EXTENTS() es llamado.
Cualquier cambio en el conjunto de fuentes- tings representar la funcin devuelto i
ncorrecto. Slo debe utilizar este mtodo si sabe lo que est haciendo.
Nuevo en la versin 1.9.0.
266
get_EXTENTS(texto) Volver una tupla (anchura, altura) indicando el tamao del text
o especificado
staticget_system_fuentes_dir() devuelven los directorios utilizados por el siste
ma de fuentes.
etiqueta Get/Set el texto
Actualizar() Fuerza re-representacin del texto
staticregister(nombre, fn_regular, fn_italic=none, fn_bold=none, fn_bolditalic=N
one) Registrar un alias para una fuente.
Nuevo en la versin 1.1.0.
Si ests utilizando un FFT directamente, es posible que no pueda utilizar la negri
ta/cursiva propiedades de la versin ttf. Si la fuente es entregado en varios arch
ivos (uno normal, uno en cursiva y negrita) uno, entonces usted necesita para re
gistrar estos archivos y utilizar el alias en lugar.
Todos los fn_regular/fn_italic/fn_bold parmetros estn resueltos con kivy.resources
.resource_find(). Si fn_italic/fn_bold son None, fn_regular ser usado en su lugar
.
(real render=false) Devolver una tupla (ancho y alto) para crear la imagen con l
as restricciones de usuario. (anchura, altura) incluye el relleno.
acortar(texto, margin=2) acorta el texto para que quepa en una sola lnea por la a
nchura especificada por text_size [0]. Si text_size [0] es ninguno, devuelve tex
to texto invariable.
split_str_andshorten desde determina cmo el texto se acorta.
Paramstext str, el texto se acorta. int de margen, la cantidad de espacio que se
deja entre los mrgenes y el texto. Esto es adems topadding_x.
Texto Retrunsthe acortado para caber en una sola lnea.
Get/Set de texto el texto
text_size el get/set (anchura, altura) del
cuadro de presentacin contrained
usersize (DEPRECATED) Utilizar text_size en su lugar.
23.7.1
Un mdulo interno de diseo de texto para disear el texto de acuerdo con las opciones
y limitaciones. Esto no forma parte de la API y puede cambiar en cualquier mome
nto.
kivy.core.text.text_layout.layout_text() establece el texto en una serie de inst
Texto: cadena o texto bytesthe deben desglosarse en lneas. Si las lneas no est vaca,
el texto es agregado a la ltima lnea (o primera lnea si append_down es falso) hast
a que se alcanza una nueva lnea que crea una nueva lnea en las lneas. SeeLayoutLine
.
Lneas: lista lista ofLayoutLine casos, cada uno de los cuales describe una lnea de
l texto. Llama tolayout_text() anexar o crear instancias newLayoutLine en lneas.
Tamao: 2-tupla de intsthe tamao del texto establecidas hasta el momento. En primer
a convocatoria probablemente debera (0, 0), luego debe ser el (w, h) devuelto por
esta fun- cin en una llamada anterior. Cuando alcanza el tamao tamao limitativos,
text_size, podemos dejar de agregar lneas y devolver True para el parmetro recorta
das. tamao comprende las coordenadas x e y relleno.
text_size: 2-tupla de ints o ninguno.La restriccin de tamao establecidos en el tex
to. Si cualquier elemento es Ninguno, el texto no est limitado en esa dimensin. Po
r ejemplo, (Ninguno, 200) limitar la altura, incluyendo el relleno a 200, mientra
s que la anchura es liberada. La primera lnea, y el primer carcter de una lnea se d
evolva siempre, incluso si se supera la restriccin. El valor puede cambiarse entre
diferentes llamadas
opciones: dictthe opciones de etiquetas de este texto. Las opciones se guardan c
on cada palabra permitiendo palabras diferentes para diferentes opciones de llam
adas sucesivas.
Nota: Las opciones deben incluir un espacio_width clave con un valor que indica
el ancho del espacio para ese conjunto de opciones.
get_EXTENTS: callablea funcin llamada con una cadena, que devuelve una tupla cont
eniendo la anchura, la altura de la cadena.
append_down: boolWhether llamadas sucesivas a la funcin agrega lneas antes o despus
de las lneas existentes. Si es True, se anexan a la ltima lnea y debajo de ella. S
i es False, se anexa a la primera lnea y anteriormente. Por ejem- plo, si es fals
e, todo despus de la ltima lnea de texto se agrega a la primera lnea en las lneas. To
do antes de la ltima lnea se inserta en el inicio de las lneas en el mismo orden co
mo texto; es decir no podemos invertir el orden de lnea.
Esto permite disear desde la parte superior a la inferior hasta que se alcanza la
limitada, o desde abajo hacia arriba hasta que el obligado sea alcanzado.
completo: este texto boolwhether lneas completas. Uso de ti es que normalmente se
tira en opciones es verdadera, todos los espacios iniciales y finales se elimin
an de cada lnea, salvo en la ltima lnea (o primera lnea si append_down es False) que
slo quita los espacios iniciales. Eso es porque el nuevo texto todava puede ser a
nexada a la ltima lnea de modo que no podemos arrebatarles. Completar si es verdad
ero, indica que no hay ms texto viene y se despoj de todas las lneas.
La funcin tambin puede ser llamada con texto ajustado a la cadena vaca y el conjunt
o completo en True para que la ltima (primera) de la lnea que se va a pelar.
Devuelve3-tupla, (w, h, encajado). w y h es la altura y la anchura del texto en
lneas hasta ahora e incluye el relleno. Esto puede ser ms grande que text_size, p.
ej., si no incluso una sola montado, la primera lnea an sera devuelto. Recorta es
True si no todo el texto ha sido aadido a las lneas porque w, h alcanzado el tamao
restringido.
A continuacin se muestra un ejemplo sencillo sin relleno y sin pelar:
>>> de kivy.core.Etiqueta importar texto >>> de kivy.core.text
.text_layout import layout_texto
(46, 90, False) # ahora agregar texto de abajo arriba, y restringir witdh slo 100
>>> w, h = recortadas layout_text( \nyay, ms texto\n , lneas (w, h) ...
(100, Ninguno), l, l.options.get_cached_EXTENTS(), False, True)
>>> w, h, encajado (77, 120, 0) >>> para la lnea en las lneas:
... print( lnea w: {}, la lnea h: {} .Format(lnea.w, lnea.h)
... para Word en lnea.palabras:
... print( w: {}, {}, h: texto: {} .Format(word.LW, word.lh,
... [word].text)
w: lnea 0, lnea h: 15 W: lnea 77, la lnea h: 15 W: 77, h: 15, texto: [ yay, ms texto
] lnea w: 31, la lnea h: 15 W, 31 h: 15, texto: [ Heres ] lnea w: 34, la lnea h: 15
W: 34, h: 15, texto: [ algunos ] lnea w: 24, la lnea h: 15 W: 24 h: 15, texto: te
xto [ ] lnea w: 17, la lnea h: 15 W: 17 h: 15, texto: [ ah, ] lnea w: 46, la lnea h
: 15 W, 46 h: 15, texto: [ ] otra lnea: 23 W, la lnea h: 15 W: 23, h: 15, texto:
[ ]
classkivy.core.text.text_layout.LayoutWord Bases: builtins.object
describe formalmente una palabra contenida en una lnea. El nombre palabra signifi
ca simplemente un fragmento de texto y puede ser usado para describir cualquier
texto.
Una palabra tiene cierta anchura, altura y se procesa de acuerdo con opciones gu
ardadas inoptions. Ver LayoutLine para su uso.
Parmetros de las opciones: opciones de etiqueta dictthe diccionario para esta pal
abra.
lw: intthe ancho del texto en pxeles.
lh: intthe altura del texto en pxeles.
texto: stringthe texto de la palabra.
classkivy.core.text.text_layout.LayoutLine Bases: builtins.object
describe formalmente una lnea de texto. Una lnea de texto se compone de manyLayout
Word instancias, cada una con su propio texto, tamao y opciones.
Instancia ALayoutLine no siempre implica que las palabras contenidas en la lnea t
ermin con un salto de lnea. Eso es slo el caso de ifi_last_line es True. Por ejempl
o, una sola lnea de texto real se puede dividir en multipleLayoutLine instancias
si la lnea entera no cabe en el ancho limitado.
Parmetros x: intthe ubicacin en una textura desde donde el lado izquierdo de esta
lnea se inici dibujado.
y: intthe ubicacin en una textura desde donde la parte inferior de esta lnea se di
buja
intthe. w: ancho de la lnea. Esta es la suma de los anchos de sus instancias Layo
utWord. No incluye ningn relleno.
h: intthe alto de la lnea. Esta es la mxima de las alturas de sus instancias Layou
tWord multiplicado por la lnea_height de estas instancias. As que este es ms grande
entonces la palabra altura.
is_last_line: boolwhether esta lnea fue la ltima lnea de un prrafo. Cuando es true,
269
implica que la lnea fue seguida por una nueva lnea. Saltos de lnea no debera incluir
se en el texto de las palabras, pero est implcita por ajustar este valor a true.
line_wrap: boolwhether esta lnea est seguido de una lnea anterior que no encajan en
una anchura limitada y, por lo tanto, dividir en mltiples instancias pleLayoutLi
ne. line_envoltura puede ser Verdadero o Falso independientemente de ES_last_lin
e.
Palabras: python lista lista que contiene instancias onlyLayoutWord describiendo
el texto de la lnea.
23.7.2 marcado de texto
nuevo en la versin 1.1.0.
Nos proporcionan una forma simple de texto marcado de texto en lnea el peinado. L
a sintaxis tienen el mismo aspecto que el BBCode.
Una etiqueta se define como[etiqueta], y debe tener su correspondiente etiqueta]
[/etiqueta de cierre. Por ejemplo:
[b]Hola [color=ff0000]mundo[/COLOR][/b]
Las etiquetas siguientes estn disponibles:
[b][/b] Activar negrita [i][/i] Activar cursiva [u][/u] texto subrayado [s][/s]
texto tachado
[font= <str>][/font] cambiar la fuente [size= <integer>][/size] Cambiar el tamao
de la fuente [color=# <color>][/COLOR] Cambia el color del texto
[ref= <str>][/ref] Aadir una zona interactiva. La referencia + todo el cuadro pal
abra dentro de la referencia estar disponible inMarkupLabel.Refs [anchor= <str>]
poner un anclaje en el texto. Usted puede obtener la posicin de su anclaje en el
texto.anchors withMarkupLabel [SUB][/sub] muestra el texto en un subndice posicin
relativa al texto antes de ella.
[sup][/sup] mostrar el texto en superndice posicin relativa al texto antes de ella
.
Si usted necesita para escapar de las revisiones del texto actual, usekivy.utils
.escape_markup().
kwargs) Bases: kivy.core.text.LabelBa
classkivy.core.text.Markup.MarkupLabel( largs,
se
etiqueta de texto Marcado.
Consulte la documentacin del mdulo para ms informacin.
Los anclajes obtener la posicin de todos los[anchor=...]:
{ anchorA : (x, y), anchorB : (x, y), ... }
devolver el texto marcado con todas las marcas dividido:
>>> MarkupLabel( [b]Hola mundo[/b] ).marca >>> ( [b] , hola m
undo , [/b] )
270
sin bordes 274 cuando se establece en True, esta propiedad se elimina el borde d
e la ventana o la decoracin.
Nuevo en la versin 1.9.0.
Borderless es aBooleanProperty y su valor por defecto es false.
Centro de la ROTA VENTANA.
centro es aAliasProperty.
nios Lista de los hijos de esta ventana.
Nios es instancia aListProperty y predeterminados a una lista vaca.
Utilice Aadir_widget() yretire_widget() para manipular la lista de nios. No ma- ni
pulate la lista directamente a menos que sepa lo que est haciendo.
clear() Borrar la ventana con el color de fondo
clearcolor color utilizado para borrar la ventana
de kivy.core.Window ventana importar
# fondo de color rojo de la ventana.clearcolor = (1, 0, 0, 1)
# no claros antecedentes en todo Window.clearcolor = ninguno
ha cambiado en la versin 1.7.2: El valor predeterminado es ahora clearcolor: (0,
0, 0, 1).
close() cierra la ventana
Create_window( largs) crear la ventana principal y configurarlo.
Advertencia: Este mtodo es llamado automticamente en tiempo de ejecucin. Si lo llam
an, se recrear un RenderContext y lienzo. Esto significa que usted tiene una nuev
a grfica en rbol y el viejo ser inservible.
Este mtodo existen para permitir la creacin de un nuevo contexto OpenGL despus de c
errar la primera. (Como utilizar y stopTouchApp runTouchApp()()).
on_MOUSE_up(x, y, botn modificador) evento llamado cuando el ratn se mueve con los
botones presionados
sobre_request_close( largs, kwargs) evento llamado antes de cerrar la ventana. Si un
a funcin bound returnsTrue, la ventana no se cerrar. Si el evento se desencadena p
orque de la tecla Esc del teclado, la palabra argumento fuente es enviado junto
con un valor de teclado para las funciones de enlazado.
Advertencia: Cuando la funcin BOUND devuelve True, la ventana no se cerrar, as que
tenga cuidado porque el usuario no sera capaz de cerrar el programa, incluso si s
e hace clic en la X roja.
El_resize(ancho, alto) evento llamado cuando se cambia el tamao de la ventana.
on_restore( largs) evento llamado cuando la ventana se restaura.
Nuevo en la versin 1.9.2.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana.
on_rotate(rotacin) evento llamado cuando la pantalla ha sido rotada.
on_show( largs) evento llamado cuando la ventana se muestra.
Nuevo en la versin 1.9.2.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana.
on_textinput(texto) evento llamado ccuando texto: es decir, no alfanumricos tecla
s de control o conjunto de claves es introducido. Como no es gaurenteed si conse
guimos uno o varios caracteres, este evento admite el manejo de mltiples caracter
es.
Nuevo en la versin 1.9.0.
sobre_TOUCH_down(touch) evento llamado cuando un toque evento es iniciado.
Ha cambiado en la versin 1.9.0: El toque pos es transformado ahora en las coorden
adas de la ventana antes de que se llame a este mtodo. Antes, el tpv tctil sera de
coordenadas (0, 0) Cuando este mtodo se llama.
En_TOUCH_move(touch) evento llamado cuando un evento tctil se mueve (cambia de ub
icacin).
Ha cambiado en la versin 1.9.0: El toque pos es transformado ahora en las coorden
adas de la ventana antes de que se llame a este mtodo. Antes, el tpv tctil sera de
coordenadas (0, 0) Cuando este mtodo se llama.
En_TOUCH_up(touch) evento llamado cuando un evento tctil es liberada (terminado).
Ha cambiado en la versin 1.9.0: El toque pos es transformado ahora en las coorden
adas de la ventana antes de que se llame a este mtodo. Antes, el tpv tctil sera de
coordenadas (0, 0) al que se llam a este mtodo.
279
281
Valor Efecto
de la ventana principal se deja como est, permitindole utilizar th
ekeyboard_height para gestionar el contenido de la ventana manualmente.
pan de la ventana principal sartenes, mover la parte inferior de la ventana pa
ra estar siempre en la parte superior del teclado.
"Tamao" se cambia el tamao de la ventana y el contenido se ajusta para el espacio
restante.
"Ser- la ventana sartenes de manera que el objetivo actual widget TextInput soli
citando la baja_target teclado se present justo encima del teclado suave.
softinput_mode es anOptionProperty y predeterminados a Ninguno.
Nuevo en la versin 1.9.0.
Ha cambiado en la versin 1.9.1: "A continuacin_target" opcin se aadi.
sistema_size El tamao real de la ventana ignorando la rotacin.
toggle_fullscreen() Alternar entre pantalla completa y modo de ventana.
Obsoleto desde la versin 1.9.0: en lugar de
girar Usefullscreen ancho ancho de la ventana.
width es un onlyAliasProperty lectura.
282
Captulo
24
KIVY Mdulo para las dependencias binarias.
Las dependencias binarias como gstreamer est instalado como un mdulo de kivy names
pace.deps". Estos mdulos son responsables de asegurarse de que los binarios estn d
isponibles para kivy.
283
284
Captulo
veinticinco
efectos
nuevo en la versin 1.7.0.
Todo comienza con theKineticEffect, la clase base para calcular la velocidad de
un movimiento.
Esta clase base se utiliza para implementar theScrollEffect, una clase base util
izado para widget ourScrollView efecto. Tenemos varias implementaciones:
ScrollEffect: clase base utilizado para aplicar un efecto. Slo calcula el desplaz
amiento y la overscroll.
overscroll DampedScrollEffect: utiliza la informacin para permitir al usuario arr
astrar ms de lo esperado. Una vez el usuario detiene el arrastre, la posicin es de
vuelto a uno de los lmites.
overscroll OpacityScrollEffect: utiliza la informacin para reducir la opacidad de
la scrollview widget. Cuando el usuario detiene el arrastre, la opacidad se vue
lve a establecer en 1.
25.1 amortiguado el efecto de desplazamiento
Nuevo en la versin 1.7.0.
.
Nuevo en la versin 1.8.0.
min_distance isNumericProperty y predeterminados a 0.1.
min_velocidad la velocidad por debajo de esta cantidad est normalizada a 0. En ot
ras palabras, cualquier movimiento cuya velocidad cae por debajo de este nmero es
t parado.
Nuevo en la versin 1.8.0.
min_velocity es aNumericProperty y predeterminados a 0.5.
Arranque(val, t=None) iniciar el movimiento.
Val: parmetros de flotacin o intValue del movimiento t: float, por omisin NoneTime
cuando ocurra el movimiento. Si no se establece, se utilizar el tiempo.time()
STOP(val, t=None) parar el movimiento.
Seestart() para los argumentos.
update(val, t=None) Actualizacin del movimiento.
Seestart() para los argumentos.
update_velocity(dt) (interno) Actualizar la velocidad segn el frametime y friccin.
Value (durante el movimiento y la tomografa) del efecto.
Velocidad es aNumericProperty y predeterminados a 0.
velocidad la velocidad del movimiento.
Velocidad es aNumericProperty y por defecto es 0.
25.3 Opacidad efecto de desplazamiento
basado en theDampedScrollEffect, esto tambin disminuir la opacidad del destino dur
ante el widget overscroll.
classkivy.effects.opacityscroll.OpacityScrollEffect( kwargs) Bases: kivy.effects.da
mpedscroll.DampedScrollEffect
OpacityScrollEffect clase. Utiliza la informacin overscroll para reducir la opaci
dad de la scrollview widget. Cuando el usuario detiene el arrastre, la opacidad
se vuelve a establecer en 1.
25.4 Efecto de desplazamiento
Nuevo en la versin 1.7.0.
287
Captulo
26 el
apoyo de extensin
a veces su aplicacin requiere funcionalidad que est ms all del alcance de lo Kivy pu
ede ofrecer.
En esos casos es necesario recurrir a las bibliotecas de software externo. Dada
la riqueza del ecosistema de Python, ya existe un gran nmero de libreras de softwa
re que simplemente se puede importar y utilizar de inmediato.
Para algunas bibliotecas de terceros, no es tan fcil como eso. Algunas biblioteca
s requieren especial wrappers para ser escrito para ellos a fin de ser compatibl
e con Kivy. Algunas bibliotecas que incluso deba asignarse de manera que puedan
ser utilizados (por ejemplo, si abren su propio contexto OpenGL para dibujar y n
o admiten offscreen adecuada representacin). En esas ocasiones es posible a menud
o patch la biblioteca en cuestin y proporcionar un contenedor alrededor de Python
que es compatible con Kivy. Siguiendo con este ejemplo, no se puede simplemente
usar el contenedor con una instalacin "normal" de la biblioteca porque el parche
podra estar ausente.
Ah es donde las extensiones Kivy vienen en prctico. Una extensin de Kivy representa
una sola biblioteca de terceros que es siempre de tal manera que simplemente pu
ede descargarse como un nico archivo, coloque en un directorio especial y, a cont
inuacin, ofrece la funcionalidad de la biblioteca para aplicaciones Kivy envuelto
. Estas extensiones no contaminan el medio ambiente (como Python global que podra
quedar inutilizable por cuenta propia despus de potenciales se han aplicado los
parches) porque residen en directorios especiales de Kivy que no son accesibles
por Python por defecto.
26.1 Naming and Versioning
Kivy extensiones son proporcionados como .kex archivos. En realidad slo son archiv
os zip, pero usted no debe descomprimir usted mismo. Kivy har eso por usted tan p
ronto como sea apropiado para hacerlo. Siguen la convencin de nomenclatura:
<NAME>- <MAJOR>. <MINOR>[ ].kex
Advertencia: Nuevamente, no intente descomprimir .kex archivos en su propio. Mient
ras descomprimir funcionar, Kivy no ser capaz de cargar la extensin y simplemente i
gnorarlo.
Con la extensin de Kivy sistema, puede utilizar la aplicacin especialmente empaque
tadas de bibliotecas de terceros en una forma compatible hacia atrs (especificand
o la versin que necesita) incluso si la Real Biblioteca de terceros no garantiza
la compatibilidad con versiones anteriores. No habr ninguna rotura si hay version
es ms recientes estn instalados (como una adecuada versin anterior seguir siendo uti
lizado). Para obtener ms informacin sobre ese comportamiento, por favor refirase a
la documentacin de lacarga().
Si desea proporcionar una extensin de su propia, existe un script auxiliar que co
nfigura la extensin inicial de estructura de carpetas que Kivy requiere de las ex
tensiones. Se lo puede encontrar en kivy/tools/extensions/make- kivyext.py kivy.
ext.carga(extname, versin) Utilice esta funcin para decirle Kivy para cargar una v
ersin especfica de la extensin. Esto es diferente de
289
292
Captulo
veintisiete
jardn
nuevo en la versin 1.7.0.
Ha cambiado en la versin 1.8.0.
Garden es un proyecto para centralizar addons para Kivy mantenidas por los usuar
ios. Puede encontrar ms informacin en Kivy jardn. Todos los paquetes de jardn estn ce
ntralizadas en el jardn de kivy Github repositorio.
El jardn se distribuye ahora por separado como un mdulo Python, kivy-jardn. Puede i
nstalarlo con el pip:
pip install kivy-jardn
jardn el mdulo no inicialmente incluir los paquetes. Puede descargarlas con el jar
dn herramienta instalada por el pip paquete:
# instalando un paquete de jardn jardn instalar Graph
# actualiza un paquete jardn jardn install --upgrade grfico
# Desinstalar un paquete de jardn jardn desinstalar grfico
# Lista de todos los paquetes instalados de jardn jardn lista
# Buscar nuevos paquetes garden bsqueda
# Buscar todos los paquetes que contengan "grfico" jardn bsqueda
# Show Graph la ayuda garden --help
todo el jardn paquetes estn instalados por defecto en el archivo ~/.kivy/jardn.
Nota: En versiones anteriores de Kivy, jardn era una herramienta en kivy/tools/ja
rdn. Este ya no existe, pero el jardn de kivy mdulo proporciona exactamente la mism
a funcionalidad.
293
27.1 envase
si desea incluir paquetes de jardn en su aplicacin, puede aadir -app para el comand
o de instalacin.
Esto crear un directorio libs/jardn en el directorio actual, que ser utilizada por
kivy.jardn.
Por ejemplo:
cd myapp garden install --app
.jardn kivy graph.jardn_SYSTEM_DIR = jardn ruta del sistema donde se pueden insta
lar mdulos de jardn
294
CAPTULO
TWENTYEIGHT
este paquete de grficos rene muchas funciones de bajo nivel utilizado para dibujar
. Todo el paquete de grficos compatible con OpenGL ES 2.0 y tiene muchas optimiza
ciones de renderizado.
28.1 Los fundamentos
para el dibujo en una pantalla, necesitar:
1. aCanvas objeto.
2. Objetos de instruccin.
En EachWidget aCanvas Kivy ya tiene por defecto. Cuando se crea un widget, puede
crear todas las instrucciones necesarias para el dibujo. Si el auto es su actua
l widget, puede hacer:
con self.Canvas: .importar grficos de kivy
# Aadir un color rojo Color(1, 0, 0)
# Agregar un rectngulo rectngulo(pos=(10, 10), size=(500, 500)
El instructionsColor andRectangle son automaticly agregado al objeto Canvas y se
utilizar cuando la ventana est dibujado.
Nota: las instrucciones de dibujo Kivy no estn automticamente en relacin a la posic
in o el tamao de los widgets. Por lo tanto, usted debe considerar estos factores a
l dibujo. A fin de hacer su dibujo instrucciones respecto al widget, las instruc
ciones deben ser declarados en theKvLang u obligado a pos y cambios de tamao. Por
favor, vea Agregar un fondo a una presentacin para ms detalles.
28.2 GL mecanismo de recarga de
nuevo en la versin 1.2.0.
Durante el ciclo de vida de la aplicacin, el OpenGL contexto podran perderse. Esto
ocurre:
Cuando se redimensiona la ventana en OS X o la plataforma Windows y ests utilizan
do pygame como proveedor de una ventana. Esto es debido a SDL 1.2. En SDL 1.2 Di
seo, necesita recrear un contexto GL cada vez que se cambie el tamao de la ventana
. Esto fue corregido en SDL 1.3 pero pygame todava no est disponible por defecto.
295
Cuando se libera el Android App recursos: cuando su aplicacin pasa a segundo plan
o, un androide- podra recuperar su contexto opengl para dar el recurso a otra apl
icacin. Cuando el usuario vuelve a su solicitud, un contexto gl recin creado es da
do a su aplicacin.
A partir de 1.2.0, hemos introducido un mecanismo para volver a cargar todos los
recursos grficos utilizando la GPU: lienzo, FBO, Shader, texturas, VBO, y Vertex
Batch:
VBO y VertexBatch estn construidos por nuestras instrucciones grficas. Tenemos tod
os los datos necesarios para reconstruir al recargar.
Shader: igual que VBO, almacenamos la fuente y los valores utilizados en el somb
reado, por eso somos capaces de recrear el vrtice/fragmento/programa.
textura: si la textura tiene una fuente (un archivo de imagen o atlas), la image
n se recarga desde el origen y reuploaded a la GPU.
Usted debe cubrir estos casos usted mismo:
Texturas sin una fuente: si crea manualmente una textura y manualmente datos bli
t / un bfer, debe manejar la recarga usted mismo. Compruebe la textura para apren
der a manejar ese caso.
(La representacin de texto ya genera la textura y maneja la recarga. No necesita
volver a cargar texto usted mismo.)
FBO: si has aadido / quitar / llam cosas varias veces en el FBO, no podemos volver
a cargarlo. No mantenemos un historial de las instrucciones puestas en ella. En
cuanto a texturas sin una fuente, comprobar el framebuffer para aprender cmo ges
tionar ese caso.
classkivy.graphics.Bases: kivy Bezier.graphics.INSTRUCTIONS.VertexInstruction
2d una curva Bzier.
Nuevo en la versin 1.0.8.
Parmetros de puntos: Listalista de puntos en el formato (x1, y1, x2, y2, ...): in
t, segmentos predeterminados a 180definir cuntos segmentos son necesarios para di
bujar- cin de la curva. El dibujo ser ms suave si tiene muchos segmentos.
bucle: bool, por omisin FalseSet la curva Bezier para unirse al ltimo punto de la
primera.
dash_length: intLength del segmento (si los guiones), el valor predeterminado es
1.
dash_offset: intDistance entre el final de un segmento y el comienzo de la sigui
agujeros negros podran ocurrir, etc. para evitar que esto suceda, puede activar l
a opcin thereset_context. Se restablecer el estado de contexto OpenGL para hacer l
a presentacin de Kivy correcto despus de la llamada a su devolucin.
Advertencia: Thereset_context no es un pleno restablecimiento de OpenGL. Si tien
e problemas con respecto a eso, por favor, pngase en contacto con nosotros.
Ask_update() Informar a los padres lienzo que nos gustara actualizar en el siguie
nte fotograma. Esto es til cuando necesita generar un redraw debido a algn valor h
abiendo cambiado, por ejemplo.
Nuevo en la versin 1.0.4.
reset_contexto establecido en true si desea restablecer el contexto de OpenGL pa
ra Kivy despus de la devolucin de llamada ha sido llamado.
classkivy.graphics.Bases: kivy Canvas.graphics.INSTRUCTIONS.CanvasBase
importante la clase Canvas. Utilice esta clase para agregar grficos o el contexto
de instrucciones que desee que se usa para dibujar.
Nota: El Lienzo es compatible con Python scon afirmacin y su entrar y salir de la
semntica.
Uso de un lienzo sin elcon declaracin:
self.Canvas.add(Color(1., 1., 0) auto.Canvas.add(Rectangle(size=(50, 50))) el
uso de un lienzo con Python scon instruccin:
con auto.Canvas:
Color(1., 1., 0) rectngulo(size=(50, 50)
despus de propiedad para obtener el "despus" de grupo.
Ask_update() informar al lienzo que nos gustara actualizar en el siguiente fotogra
ma. Esto es til cuando necesita generar un redraw debido a algn valor despus de hab
er cambiado por ejemplo.
Antes de propiedad para obtener el "antes" de grupo.
clear() borra everyInstruction en el lienzo, dejndola limpia.
draw() aplicar la instruccin a nuestra ventana.
has_despus de la propiedad para ver si elprocedimiento grupo ya ha sido creado.
Nuevo en la versin 1.7.0.
Ha_antes de propiedad para ver si elprocedimiento grupo ya ha sido creado.
Nuevo en la versin 1.7.0.
298
<Rule>:
canvas:
# color rojo color:
rgb: 1, 0, 0 # color azul color:
rgb: 0, 1, 0 # color azul con un 50% de color alfa:
rgba: 0, 1, 0 ,5
# utilizando Color: HSV
HSV: 0, 1, 1 # utilizando el modo de color HSV + alpha:
HSV: 0, 1, 1 a: 0.5
un componente alfa, entre 0 y 1.
b componente azul, entre 0 y 1.
g componente verde, entre 0 y 1.
h componente matiz, entre el 0 y 1 de
color HSV HSV, lista de 3 valores en el rango 0-1, alpha ser 1.
r componente rojo, entre 0 y 1.
Lista de color RGB, RGB de 3 valores en el rango 0-1. El alfa ser 1.
rgba color RGBA, lista de 4 valores en el rango 0-1.
s componente saturacin, entre 0 y 1.
v El componente de valor, entre 0 y 1.
classkivy.graphics.ContextInstruction Bases: kivy.graphics.instrucciones.La inst
ruccin de
la clase ContextInstruction es la base para la creacin de instrucciones que no ti
enen una representacin visual directa, sino modificar el actual estado de lienzo,
por ejemplo, textura color el valor vinculante, parmetros, la manipulacin de matr
ices y as sucesivamente.
classkivy.graphics.Bases: elipse kivy.graphics.vertex_Instructions.Rectangle
una elipse en 2D.
Ha cambiado en la versin 1.0.7: Aadido_start y ngulo ngulo_final.
Parmetros
clase Fbo para envolver el framebuffer OpenGL Extension. La Fbo con apoyo de "de
claracin".
Parmetros CLEAR_color: tupla, por omisin (0, 0, 0, 0)Definir el color predetermina
do para borrar el framebuffer tamao: tupla, por omisin (1024, 1024)tamao predetermi
nado del framebuffer push_viewport: bool, por omisin TrueIf True, el viewport Ope
nGL se ajustar al tamao del framebuffer, y se restaurarn automticamente cuando el fr
ame buffer- liberados.
Con_depthbuffer: bool, el valor predeterminado es True, el framebuffer FalseIf s
er allo- localizado con un bfer Z.
Con_: bool stencilbuffer FalseNew, por defecto en la versin 1.9.0.
Si es True, el framebuffer ser asignado con un stencil buffer.
Textura: Textura, por omisin NoneIf ninguno, una textura predeterminada ser creado
.
Nota: el uso de ambos ofwith_stencilbuffer yel_depthbuffer no est soportado en ki
vy 1.9.0
add_RELOAD_observador() agrega una devolucin de llamada para llamar despus de todo
el contexto grfico ha sido recargado. Aqu es donde puede recargarla tus datos per
sonalizados en la GPU.
Nuevo en la versin 1.2.0.
Parmetros: devolucin de llamada func(Contexto) -> volver NoneThe primer parmetro
ser el con- texto
bind() obligar a la FBO al actual contexto opengl. Enlazar significa que puede a
ctivar el Framebuffer, y todas las operaciones de dibujo actuar dentro del frameb
uffer, untilrelease() es llamado.
El bind/liberar las operaciones se llama automticamente cuando se agregan objetos
grficos en l.
Si desea manipular un framebuffer, usted puede utilizarlo como este:
self.fbo FBO =() self.fbo.bind() # hacer cualquier comando de dibujo self.fbo.Re
lease()
# entonces, su textura fbo est disponible en imprimir(self.fbo.textura)
301
Parmetros de 303 puntos: Listalista de puntos en el formato (x1, y1, x2, y2...) d
ash_length: intLength del segmento (si los guiones), el valor predeterminado es
1.
dash_offset: intOffset entre el final de un segmento y el comienzo de la siguien
te, el valor predeterminado es 0. Este cambio hace que sea discontinua.
Anchura: floatWidth de la lnea, por defecto 1.0.
Cap: str, por omisin round Seecap para ms informacin.
Junta: str, por omisin round Seejoint para ms informacin.
cap_Precision: int, por defecto 10Seecap_precision para ms informacin: int_precisi
on conjunta, por defecto 10Seejoint_precision para ms informacin Seecap_Precision
para obtener ms informacin.
joint_Precision: int, por defecto 10Vase joint_Precision para obtener ms infor- ma
cin.
cierre: bool, por omisin FalseIf True, la lnea ser cerrada.
crculo: listIf set, los puntos se establecer para construir un crculo. Para ms infor
macin vase el crculo.
elipse: listIf set, los puntos se establecer para construir una elipse. Consulte
para obtener ms informacin. Elipse
: float pointsize, por defecto 1.El tamao del punto, medido desde el centro hasta
el borde. Un valor de 1.0 significa, por tanto, el tamao real ser de 2.0 x 2.0.
func_op determinan la galera operacin utilizar para glStencilFunc(). Puede ser una
de nunca , inferior , igualdad , lequal , gran , notequal , gequal" o "si
empre".
De forma predeterminada, el operador es igual .
Nuevo en la versin 1.5.0.
classkivy.graphics.StencilUnUse Bases: kivy.graphics.instrucciones.La instruccin
Use current stencil buffer a unset la mscara.
classkivy.graphics.Traducir Bases: kivy.graphics.context_Instructions.Transforma
r la
instruccin para crear una traduccin de la vista del modelo espacio de coordenadas.
Construir por:
Translate(x, y) # traducir slo en los dos ejes Translate(x, y, z) # traducir en l
os tres ejes
x/ajuste de la propiedad para obtener la traduccin en el eje x.
xy 2 tupla con traduccin vector en 2D para los ejes x e y.
xyz 3 Traduccin de tupla vector en 3D en los ejes x, y y z.
y propiedad para obtener/ajuste de la traduccin en el eje Y.
propiedad z para Obtencin/configuracin de la traduccin en el eje Z.
classkivy.graphics.Bases: Tringulo kivy.graphics.INSTRUCTIONS.VertexInstruction
un tringulo 2d.
Parmetros de puntos: Listalista de puntos en el formato (x1, y1, x2, y2, x3, y3).
puntos propiedad para obtener/ajustes de puntos del tringulo.
classkivy.graphics.VertexInstruction Bases: kivy.graphics.INSTRUCTIONS.Instruccin
El VertexInstruction clase es la base de todas las instrucciones grficas que tien
en un directo visual repre- sentation en el lienzo, como rectngulos, tringulos, lne
as, elipses y as sucesivamente.
Fuente Esta propiedad representa el nombre del archivo para cargar la textura. S
i desea utilizar una imagen como fuente, como esta:
con auto.Canvas:
rectngulo(source= mylogo.png", pos=auto.pos, size=auto.tamao)
aqu es el equivalente en Kivy idioma:
312
<MyWidget>:
canvas:
rectngulo:
Fuente: mylogo.png pos: self.pos tamao: self.tamao
Nota: El nombre de archivo que se buscar mediante thekivy.resources.resource_find
().
tex_coords esta propiedad representa las coordenadas de textura utilizada para d
ibujar el vrtice instruccin.
El valor debe ser una lista de 8 valores.
Una coordenada de textura tiene una posicin (u, v), y un tamao (w, h). El tamao pue
de ser negativo, y representara el Voltear textura. Por defecto, el tex_coords
son:
[u, v, w + u, v, w, u + v + h, u, v + h]
Puede pasar tus propias coordenadas de textura si desea lograr efectos atractivo
s.
Advertencia: acaba de mencionar los valores predeterminados pueden ser negativos
. En funcin de la imagen y la etiqueta de los proveedores, las coordenadas se vol
tea verticalmente por el orden en el que la imagen se guarda internamente. En lu
gar de voltear la imagen de datos, simplemente estamos plegando las coordenadas
de textura para ser ms rpido.
Propiedad textura que representa la textura usada para dibujar esta instruccin. P
uede establecer una nueva textura como este:
de kivy.core.IMPORTAR IMAGEN IMAGEN
IMAGEN textura =( logo.png").La textura con self.Canvas:
rectngulo(textura=textura, pos=auto.pos, size=self.size)
Normalmente, se utilizar en lugar del atributo thesource textura.
classkivy.graphics.ClearColor Bases: kivy.graphics.INSTRUCTIONS.instrucciones
grficas ClearColor instruccin.
Nuevo en la versin 1.3.0.
Establece el color claro se utiliza para borrar buffers con la funcin o ClearBuff
ers glClear instrucciones grficas.
un componente alfa, entre 0 y 1.
b componente azul, entre 0 y 1.
Color RGB RGB 313, una lista de 3 valores en el rango 0-1 donde ser 1. alfa
RGBA rgba color utilizado para el color claro, una lista de 4 valores en el rang
o 0-1.
classkivy.graphics.ClearBuffers Bases: kivy.graphics.INSTRUCTIONS.instrucciones
grficas Clearbuffer instruccin.
Nuevo en la versin 1.3.0.
Borrar los almacenamientos intermedios especificados por la propiedad Mscara de b
uffer de instrucciones. Por defecto, slo se borra el bfer de coloc.
clear_color Si es True, el buffer de color ser borrado.
clear_profundidad Si es True, el depth buffer ser borrado.
clear_stencil Si es True, el stencil buffer ser borrado.
classkivy.graphics.PushState Bases: kivy.graphics.INSTRUCTIONS.ContextInstructio
n
instruccin que empuja arbitrarios estados / uniformes en el marco de pila del est
ado.
Nuevo en la versin 1.6.0.
classkivy.graphics.ChangeState Bases: kivy.graphics.INSTRUCTIONS.ContextInstruct
ion
instruccin que modifica los valores de arbitrarios estados / uniformes en el cont
exto de procesamiento actual.
Nuevo en la versin 1.6.0.
classkivy.graphics.Bases: kivy PopState.graphics.INSTRUCTIONS.ContextInstruction
instruccin que pops arbitrarios estados / uniformes fuera del contexto de pila de
l estado.
Nuevo en la versin 1.6.0.
classkivy.graphics.ApplyContextMatrix Bases: kivy.graphics.INSTRUCTIONS.ContextI
nstruction
Pre-multiplica la matriz en la parte superior de la pila especificada por target
_stack por la matriz en la parte superior de la source_stack
nuevo en la versin 1.6.0.
fuente_stack Nombre de pila de la matriz que se va a utilizar como origen. Puede
ser modelview_mat o proyeccin_mat .
Nuevo en la versin 1.6.0.
target_stack Nombre de pila de la matriz para utilizar como destino. Puede ser
modelview_mat o proyeccin_mat .
Nuevo en la versin 1.6.0.
classkivy.graphics.UpdateNormalMatrix Bases: kivy.graphics.INSTRUCTIONS.ContextI
nstruction
actualizar la matriz normal normal_mat sobre la base de la actual matriz model
view. Esto se com- pute normal_mat uniformes como: inverso( transponer( mat3 (
MVM) ) )
314
proyeccin_mat .
28.3 Lienzo
TheCanvas es el objeto raz utilizado para dibujar por aWidget. Compruebe la docum
entacin de la clase para obtener ms informacin acerca del uso de canvas.
classkivy.graphics.INSTRUCTIONS.Instrucciones Bases: kivy.event.ObjectWithUid
representa la menor instruccin disponible. Esta clase es para uso interno solamen
te, no use directamente.
proxy_ref devolver una referencia proxy para la instruccin, es decir, sin crear u
na referencia del widget.
Ver weakref.proxy para ms informacin.
Nuevo en la versin 1.7.2.
classkivy.graphics.INSTRUCTIONS.InstructionGroup Bases: kivy.graphics.INSTRUCTIO
NS.
Grupo de instruccin ofInstructions. Permite la adicin y eliminacin de instrucciones
grficas. Puede utilizarse directamente como sigue:
azul = InstructionGroup().add(color azul(0, 0, 1, 0,2)) blue.add(Rectangle(pos=a
uto.pos, size=(100, 100)))
verde = InstructionGroup().add(color verde(0, 1, 0, 0,4)) verde.add(Rectangle(po
s=(100, 100), size=(100, 100)))
# Aqu, el auto debe ser un widget o subclase [self.Canvas.add(grupo) para grupo e
n [azul, verde]]
add() agrega un newInstruction a nuestra lista.
clear() Quitar todas lasinstrucciones.
get_group() devuelven un iterable para todas lasinstrucciones con un nombre de g
rupo especfico.
Insert() inserta un newInstruction en nuestra lista en el ndice.
remove() quitar un existingInstruction de nuestra lista.
315
son:
[u, v, w + u, v, w, u + v + h, u, v + h]
Puede pasar tus propias coordenadas de textura si desea lograr efectos atractivo
s.
Advertencia: acaba de mencionar los valores predeterminados pueden ser negativos
. En funcin de la imagen y la etiqueta de los proveedores, las coordenadas se vol
tea verticalmente por el orden en el que la imagen se guarda internamente. En lu
gar de voltear la imagen de datos, simplemente estamos plegando las coordenadas
de textura para ser ms rpido.
Propiedad textura que representa la textura usada para dibujar esta instruccin. P
uede establecer una nueva textura como este:
de kivy.core.IMPORTAR IMAGEN IMAGEN
IMAGEN textura =( logo.png").La textura
316
con self.Canvas:
rectngulo(textura=textura, pos=auto.pos, size=self.size)
Normalmente, se utilizar en lugar del atributo thesource textura.
classkivy.graphics.INSTRUCTIONS.Canvas Bases: kivy.graphics.INSTRUCTIONS.CanvasB
ase
importante la clase Canvas. Utilice esta clase para agregar grficos o el contexto
de instrucciones que desee que se usa para dibujar.
Nota: El Lienzo es compatible con Python scon afirmacin y su entrar y salir de la
semntica.
Uso de un lienzo sin elcon declaracin:
self.Canvas.add(Color(1., 1., 0) auto.Canvas.add(Rectangle(size=(50, 50))) el
uso de un lienzo con Python scon instruccin:
con auto.Canvas:
Color(1., 1., 0) rectngulo(size=(50, 50)
despus de propiedad para obtener el "despus" de grupo.
Ask_update() informar al lienzo que nos gustara actualizar en el siguiente fotogra
ma. Esto es til cuando necesita generar un redraw debido a algn valor despus de hab
er cambiado por ejemplo.
Antes de propiedad para obtener el "antes" de grupo.
clear() borra everyInstruction en el lienzo, dejndola limpia.
draw() aplicar la instruccin a nuestra ventana.
has_despus de la propiedad para ver si elprocedimiento grupo ya ha sido creado.
Nuevo en la versin 1.7.0.
Ha_antes de propiedad para ver si elprocedimiento grupo ya ha sido creado.
Nuevo en la versin 1.7.0.
Propiedad de opacidad para obtener y establecer el valor de opacidad de la lona.
Nuevo en la versin 1.4.1.
La opacidad atributo controla la opacidad de la tela y sus hijos. Tenga cuidado,
es un atributo acumulativa: el valor se multiplica a la opacidad global actual
y el resultado se aplica al contexto actual de color.
0.2 = 0.1. por ejemplo: si su padre tiene una opacidad de 0,5 y un nio tiene una
opacidad de 0.2, la opacidad real del nio ser 0,5
317
1.0, 1.0) 319 desde la instruccin de color se aplica como un multiplicador para c
ada componente rgba. En este caso, un componente de color fuera del rango 0-1 da
un resultado visible como la intensidad del componente azul se dobla.
Para declarar un color en Python, puede hacerlo:
desde kivy.Importacin de grficos de color
rojo # crear v c = Color(1, 0, 0) # crear color azul c = Color(0, 1, 0) # crear
color azul con un 50% de alfa c = Color(0, 1, 0, .5)
# utilizando el modo de color HSV = c(0, 1, 1, mode= HSV ) # utilizando el modo
hsv alfa + c = Color(0, 1, 1, .2, mode= HSV )
tambin puede configurar los componentes de color que estn disponibles como propied
ades pasndolos como argumentos:
c = Color(b=0.5) # Establece el componente azul slo
en kv lang puede establecer las propiedades de color directamente:
<Rule>:
canvas:
# color rojo color:
rgb: 1, 0, 0 # color azul color:
rgb: 0, 1, 0 # color azul con un 50% de color alfa:
rgba: 0, 1, 0 ,5
# utilizando Color: HSV
HSV: 0, 1, 1 # utilizando el modo de color HSV + alpha:
HSV: 0, 1, 1 a: 0.5
un componente alfa, entre 0 y 1.
b componente azul, entre 0 y 1.
g componente verde, entre 0 y 1.
h componente matiz, entre el 0 y 1 de
color HSV HSV, lista de 3 valores en el rango 0-1, alpha ser 1.
320
TIONS.ContextInstruction
BindTexture instrucciones grficas. La instruccin BindTexture enlazar una textura y
habilitar GL_Texture_2D para su posterior elaboracin.
Parmetros: TextureSpecifies textura la textura para enlazar con el ndice dado.
Fuente Set/get de la fuente (nombre de archivo) para cargar para la textura.
classkivy.graphics.context_Instructions.PushMatrix Bases: kivy.graphics.INSTRUCT
IONS.ContextInstruction
empujar la matriz en el contexto de
pila Pila matriz Nombre de pila de la matriz. Puede ser modelview_mat o proye
ccin_mat .
Nuevo en la versin 1.6.0.
classkivy.graphics.context_Instructions.PopMatrix Bases: kivy.graphics.INSTRUCTI
ONS.ContextInstruction
Pop la matriz en el marco de pila de matriz en la vista del modelo.
Nombre de pila la pila de matriz a utilizar. Puede ser modelview_mat o proyec
cin_mat .
Nuevo en la versin 1.6.0.
classkivy.graphics.context_Instructions.Gire Bases: kivy.graphics.context_Instru
ctions.Transform
girar el espacio de coordenadas, aplicando una transformacin de rotacin en la matr
iz modelview. Puede establecer las propiedades de las instrucciones posteriormen
te con p.
rot.ngulo = 90 rot.axis = (0, 0, 1) el
ngulo de propiedad para obtener/ajuste del ngulo del
eje de rotacin. Propiedad para obtener/establecer el eje de la rotacin.
El formato de los ejes (x, y, z).
origen Origen de la rotacin.
Nuevo en la versin 1.7.0.
321
structions.Transformar la
instruccin para crear una traduccin de la vista del modelo espacio de coordenadas.
Construir por:
Translate(x, y) # traducir slo en los dos ejes Translate(x, y, z) # traducir en l
os tres ejes
28.6
El framebuffer Fbo offscreen es como una ventana. Puede activar el fbo para repr
esentar en una textura y utilizar su fbo como textura de otro dibujo.
La Fbo acta como akivy.graphics.INSTRUCTIONS.Canvas.
Aqu est un ejemplo de cmo utilizar un fbo para algunos rectngulos de color:
de kivy.Fbo importacin de grficos, color,
clase Rectangle FboTest(Widget):
def __init__(self,
kwargs):
super(FboTest, auto).__init__( kwargs)
# El primer paso es crear el fbo y utilice la textura fbo en otros # rectngulo
con self.Canvas:
esta forma, se podra utilizar el mismo mtodo para la inicializacin y para recargar.
Pero depende de usted.
classkivy.graphics.fbo.Bases: Fbo kivy.graphics.INSTRUCTIONS.RenderContext
clase Fbo para envolver el framebuffer OpenGL Extension. La Fbo con apoyo de "de
claracin".
Parmetros CLEAR_color: tupla, por omisin (0, 0, 0, 0)Definir el color predetermina
do para borrar el framebuffer tamao: tupla, por omisin (1024, 1024)tamao predetermi
nado del framebuffer push_viewport: bool, por omisin TrueIf True, el viewport Ope
nGL se ajustar al tamao del framebuffer, y se restaurarn automticamente cuando el fr
ame buffer- liberados.
Con_depthbuffer: bool, el valor predeterminado es True, el framebuffer FalseIf s
er allo- localizado con un bfer Z.
Con_: bool stencilbuffer FalseNew, por defecto en la versin 1.9.0.
Si es True, el framebuffer ser asignado con un stencil buffer.
Textura: Textura, por omisin NoneIf ninguno, una textura predeterminada ser creado
.
Nota: el uso de ambos ofwith_stencilbuffer yel_depthbuffer no est soportado en ki
vy 1.9.0
add_RELOAD_observador() agrega una devolucin de llamada para llamar despus de todo
el contexto grfico ha sido recargado. Aqu es donde puede recargarla tus datos per
sonalizados en la GPU.
Nuevo en la versin 1.2.0.
Parmetros: devolucin de llamada func(Contexto) -> volver NoneThe primer parmetro
ser el con- texto
bind() obligar a la FBO al actual contexto opengl. Enlazar significa que puede a
ctivar el Framebuffer, y todas las operaciones de dibujo actuar dentro del frameb
uffer, untilrelease() es llamado.
El bind/liberar las operaciones se llama automticamente cuando se agregan objetos
grficos en l.
Si desea manipular un framebuffer, usted puede utilizarlo como este:
self.fbo FBO =() self.fbo.bind() # hacer cualquier comando de dibujo self.fbo.Re
lease()
# entonces, su textura fbo est disponible en imprimir(self.fbo.textura)
clear_buffer() Borrar el framebuffer con theclear_color.
Se necesita enlazar el framebuffer usted mismo antes de llamar a este mtodo:
fbo.bind() fbo.clear_buffer() fbo.Release()
borrar_color claro en color (rojo, verde, azul y alfa) de formato.
325
Color RGB RGB 326, una lista de 3 valores en el rango 0-1 donde ser 1. alfa
RGBA rgba color utilizado para el color claro, una lista de 4 valores en el rang
o 0-1.
classkivy.graphics.gl_Instructions.ClearBuffers Bases: kivy.graphics.INSTRUCTION
S.instrucciones
grficas Clearbuffer instruccin.
Nuevo en la versin 1.3.0.
Borrar los almacenamientos intermedios especificados por la propiedad Mscara de b
uffer de instrucciones. Por defecto, slo se borra el bfer de coloc.
clear_color Si es True, el buffer de color ser borrado.
clear_profundidad Si es True, el depth buffer ser borrado.
clear_stencil Si es True, el stencil buffer ser borrado.
28.8 del compilador de grficos
antes de pronunciar un InstructionGroup, podemos compilar el grupo a fin de redu
Todo
incluir documentacin ms completa sobre el sombreado.
28.12.1 inclusin del cabezal
nuevo en la versin 1.0.7.
Cuando se crea un sombreado, Kivy siempre incluir los parmetros predeterminados. S
i no desea reescribir esto cada vez que desee personalizar / escribir un nuevo s
ombreado, puede agregar el encabezado "$$" token y ser sustituido por el correspo
ndiente cabezal de sombreado.
Aqu est el cabezal del fragmento Shader:
#ifdef GL_ES precision highp float; #endif
variando el vec4 frag_color; variando vec2 tex_coord0; / Salidas desde el Vertex
Shader /
muestreador de textura uniforme2D0; / muestreadores de textura uniforme /
y el encabezado de Vertex Shader:
#ifdef GL_ES precision highp float; #endif
variando el vec4 frag_color; variando vec2 tex_coord0; / salidas al fragmento sha
der /
atributo vec2 vPosition; atributo vec2 vTexCoords0; /
/ atributos de vrtices
uniformes modelview mat4_mat; uniforme mat4_mat de proyeccin; uniforme vec4 color
; uniformes; opacidad de flotacin /
/
28.12.2 variables uniforme nico archivo glsl programas shader
nuevo en la versin 1.6.0.
Para simplificar la gestin, el shader y vertex shaders fragmento puede ser cargad
o automticamente a partir de un nico archivo fuente glsl (texto simple). El archiv
o debe contener secciones sealadas por una lnea que comienza con -vrtice y -frag
mento respectivamente (no distingue entre maysculas y minsculas), por ejemplo,
// nada antes de una seccin significativa como este comentario se ignoran
---Vertex Shader--- // Vertex Shader empieza aqu
339
solucionar algunos de los problemas que aparecieron cuando anidados. Ahora debe
tener una StencilUnUse y repetir la misma operacin que se hizo despus de StencilP
ush.
Galera instrucciones le permiten dibujar y utilizar el dibujo actual como una msca
ra. No dan tanto control como puro, OpenGL, pero an puede hacer cosas de lujo!
El stencil buffer puede controlarse utilizando estas 3 instrucciones:
StencilPush: empujar una galera nueva capa. Cualquier dibujo que sucede despus de
esto ser usado como una mscara.
StencilUse : ahora sealar las prximas instrucciones y utilizar la galera de enmasca
ramiento.
StencilUnUse : deje de usar la galera, es decir, retirar la mscara y dibujar norma
lmente.
340
push la galera pila. Consulte la documentacin del mdulo para obtener ms informacin.
classkivy.graphics.stencil_Instructions.StencilPop Bases: kivy.graphics.instrucc
iones.La instruccin
pop la galera pila. Consulte la documentacin del mdulo para obtener ms informacin.
classkivy.graphics.stencil_Instructions.StencilUse Bases: kivy.graphics.instrucc
iones.La instruccin
Use current stencil buffer como una mscara. Compruebe la documentacin del mdulo par
a obtener ms informacin.
func_op determinan la galera operacin utilizar para glStencilFunc(). Puede ser una
de nunca , inferior , igualdad , lequal , gran , notequal , gequal" o "si
empre".
De forma predeterminada, el operador es igual .
Nuevo en la versin 1.5.0.
classkivy.graphics.stencil_Instructions.StencilUnUse Bases: kivy.graphics.instru
cciones.La instruccin
Use current stencil buffer a unset la mscara.
28.14 SVG
Nuevo en la versin 1.9.0.
Advertencia: Esto es altamente experimental y sujeto a cambios. No se usa en la
produccin.
Cargar un grfico SVG como una instruccin:
de kivy.graphics.svg Svg importacin con widget.Canvas:
SVG SVG =("image.svg")
no hay ningn widget que puede mostrar SVG directamente, tienes que hacer tu propi
o por ahora. Consulte los ejemplos/svg para ms informaciones.
classkivy.graphics.svg.svg Bases: kivy.graphics.instrucciones.
svg RenderContext clase. Consulte el mdulo para obtener ms informacin acerca del us
o.
anchor_x posicin de anclaje horizontal para escalar y rotaciones. El valor predet
erminado es 0. Los valores simblicos izquierda , Centro y RIGHT tambin son ac
eptados.
342
cuidado, u/v son las mismas que las coordenadas x/y. Usted es responsable para c
ambiarlas para mapas de textura, si es necesario.
Puede crear objetos de malla igual que:
Tess = Tesselator() # Aadir contornos aqu tess.tesselate() para los vrtices, los ndi
ces en self.mallas:
self.Canvas.add(Mesh( vrtices=vrtices, ndices=ndices, modo="tringulo_fan")
tesselate() computar todos los contornos agreg withadd_contour(), y generar los p
olgonos.
Parmetros de bobinado _rule (enum) - El sinuoso regla clasifica una re- gin como de
ntro de si sus sinuosas nmero pertenece a la categora elegida. Puede ser una de bo
binado_ODD, el viento- ing_DISTINTO DE CERO, sinuoso_positivo, negativo, bobinad
o_bobinado_abs_GEQ_DOS. Valores predeterminados al bobinado_ODD.
element_type (enum) - El tipo de resultado, puede generar los polgonos con TYPE_po
lgonos, o los contornos con lmite_tipo_contornos. Valores predeterminados de TYPE_
polgonos.
Devuelve 1 si la interseccin ocurridas, 0 en caso contrario.
Volver typeint
vertex_count devuelve el nmero de vrtice generado.
Esta es la cruda resultado, sin embargo, porque el formato Tesselator el resulta
do para usted withmeshes orvertices por polgono, tendrs ms vrtices en el resultado i
terar a travs de los vrtices el resultado de thetesselate() a fin de dar slo una li
sta de [x, y x2, y2, ...] polgonos.
28.16 la textura
ha cambiado en la versin 1.6.0: Se ha aadido soporte para paleta de textura sobre
OES: paleta4_RGB8 , paleta4_rgba8 , paleta4_r5_G6_B5 , paleta4_rgba4 , pale
ta4_RGB5_A1 , paleta8_RGB8 , paleta8_rgba8 , paleta8_r5_G6_B5 , paleta8_rgba
4 y paleta8_RGB5_a1".
La textura es una clase que maneja texturas OpenGL. Dependiendo del hardware, al
gunas OpenGL capabil- dades podran no estar disponibles (BGRA apoyo, NPOT apoyo,
etc.)
no puede instanciate esta clase usted mismo. Debe utilizar el functionTexture.cr
eate() para crear una nueva textura:
pequea superficie, en lugar de utilizar la mayor textura, utilizar una menor textu
ra filtrada. El resultado puede parecer mejor de esta manera.
Para hacer que esto suceda, necesita especificar mipmap=True al crear una textur
a. Algunos widgets ya le da la posibilidad de crear texturas, como mipmapped the
Label andImage.
Desde el OpenGL Wiki : "64x16 textura 2D puede tener 5 mip-maps: 32x8, 16x4, 8x2
, 4x1, 2x1 y 1x1". Verificar http://www.opengl.org/wiki/Texture para ms informacin
.
Nota: En la tabla de la seccin anterior, dijo: Si su textura es NPOT, creamos la
olla ms cercano y generan una textura de mipmap. Esto podra cambiar en el futuro.
28.16.6 recargando la textura de
nuevo en la versin 1.2.0.
Si el contexto de OpenGL se pierde, la textura debe ser recargada. Texturas que
tienen un origen son Automation- camente reloaded pero genera texturas debe ser
recargada por el usuario.
Utilice theTexture.add_RELOAD_observador() para aadir una funcin de recarga que se
llama automticamente cuando sea necesario:
def __init__(self,
kwargs):
super(...).__init__( kwargs) self.textura = Texture.create(size=(512, 512), colorfm
t= RGB", bufferfmt= ubyte ) self.texture.add_RELOAD_observador(self.Rellenar_tex
ture)
# y cargar los datos ahora.
512 self.Rellenar_texture(self.textura)
self.cbuffer 512 = \x00\XF0\xff
def rellenar_texture(self, textura):
Textura.Blit_buffer(self.cbuffer) de
esta manera, se puede utilizar el mismo mtodo para la inicializacin y recarga.
Nota: Para toda la representacin de texto con nuestro ncleo de procesador de texto
, el lienzo es generado, pero ya podemos enlazar un mtodo para rehacer el renderi
zado de texto y vuelva a cargar el texto a la textura. No tienes que hacer nada.
classkivy.graphics.texture.Bases de textura: builtins.objeto
manejar a un OpenGL textura. Esta clase se puede utilizar para crear texturas si
mples o complejas texturas basadas en ImageData.
add_RELOAD_observador() agrega una devolucin de llamada para llamar despus de todo
el contexto grfico ha sido recargado. Aqu es donde puede recargarla los datos per
sonalizados en la GPU.
Nuevo en la versin 1.2.0.
Parmetros: devolucin de llamada func(Contexto) -> volver NoneThe primer parmetro
ser el con- texto en s.
348
Parmetros de 354 puntos: Listalista de puntos en el formato (x1, y1, x2, y2, x3,
y3).
puntos propiedad para obtener/ajustes de puntos del tringulo.
classkivy.graphics.vertex_Instructions.cuatro bases: kivy.graphics.INSTRUCTIONS.
VertexInstruction
quad 2d.
Parmetros de puntos: Listalista del punto en el formato (x1, y1, x2, y2, x3, y3,
x4, y4).
puntos propiedad para obtener/configuracin de puntos de la quad.
classkivy.graphics.vertex_Instructions.Rectangle Bases: kivy.graphics.INSTRUCTIO
NS.VertexInstruction
un rectngulo 2d.
Parmetros: listPosition pos del rectngulo, en el formato (x, y).
tamao: listSize del rectngulo, en el formato (anchura, altura).
pos/Ajustes de propiedad para obtener la posicin del rectngulo.
tamao propiedad para obtener/Configuracin del tamao del rectngulo.
classkivy.graphics.vertex_Instructions.Rectnguloredondeado Bases: kivy.graphics.v
ertex_Instructions.Rectngulo
2D un rectngulo redondeado.
Nuevo en la versin 1.9.1.
Parmetros: int, segmentos predeterminados a 10definir cuntos segmentos son necesar
ios para dibujar la vuelta de la esquina. El dibujo ser ms suave si tienes muchos
seg- mentos.
RADIUS: lista, por omisin [(10.0, 10.0), (10.0, 10.0), (10.0, 10.0), (10.0, 10.0)
]especifica los radios de las esquinas redondeadas en el sentido de las agujas d
el reloj: superior izquierda, superior derecha, inferior derecha, inferior izqui
erda. Los elementos de la lista pueden ser nmeros o tuplas de dos nmeros para espe
cificar diferentes dimensiones x,y. Un valor que definir todas las dimensiones de
la esquina a ese valor. Los cuatro valores definir las dimensiones de cada esqui
na por separado. Mayor nmero de valores se truncar a cuatro. El primer valor se ut
ilizar para todas las esquinas, si hay menos de cuatro valores.
radio radios de esquina del rectngulo redondeado, por defecto [10].
Los segmentos propiedad para obtener/configurar el nmero de segmentos de cada esq
uina.
classkivy.graphics.vertex_Instructions.BorderImage Bases: kivy.graphics.vertex_I
nstructions.el rectngulo
A 2d imagen de borde. El comportamiento de la imagen de borde es similar al conc
epto de CSS3 border-image.
Parmetros de la frontera: listBorder informacin en el formato (arriba, derecha, ab
ajo, izquierda). Cada valor en pxeles.
auto_scale: boolNew en la versin 1.9.1.
355
puntos: Parmetros listalista de puntos en el formato (x1, y1, x2, y2...) dash_len
gth: intLength del segmento (si los guiones), el valor predeterminado es 1.
dash_offset: intOffset entre el final de un segmento y el comienzo de la siguien
te, el valor predeterminado es 0. Este cambio hace que sea discontinua.
Anchura: floatWidth de la lnea, por defecto 1.0.
Cap: str, por omisin round Seecap para ms informacin.
Junta: str, por omisin round Seejoint para ms informacin.
cap_Precision: int, por defecto 10Seecap_precision para ms informacin: int_precisi
on conjunta, por defecto 10Seejoint_precision para ms informacin Seecap_Precision
para obtener ms informacin.
joint_Precision: int, por defecto 10Vase joint_Precision para obtener ms infor- ma
cin.
cierre: bool, por omisin FalseIf True, la lnea ser cerrada.
crculo: listIf set, los puntos se establecer para construir un crculo. Para ms infor
macin vase el crculo.
elipse: listIf set, los puntos se establecer para construir una elipse. Consulte
para obtener ms informacin. Elipse
rectngulo: listIf thepoints set, se establecer para construir un rectngulo. Para ob
tener ms informacin. Seerectangle
: bezier listIf set, los puntos se establecer para construir una lnea curva. Para
obtener ms informacin vase la curva
Bezier._Precision: int, por defecto 180Precisin del dibujo Bezier.
357
Si desea agregar varios puntos, prefieren usar este mtodo en lugar de reasignar u
na nueva lista con puntos. Asignar una nueva lista con puntos recalcular y recarg
arla todo el tampn en la GPU. Si utiliza add_point, slo cargar los cambios.
360
puntos: Listalista de puntos en el formato (x1, y1, x2, y2, ...): int, segmentos
predeterminados a 180definir cuntos segmentos son necesarios para dibujar- cin de
la curva. El dibujo ser ms suave si tiene muchos segmentos.
bucle: bool, por omisin FalseSet la curva Bezier para unirse al ltimo punto de la
primera.
dash_length: intLength del segmento (si los guiones), el valor predeterminado es
1.
dash_offset: intDistance entre el final de un segmento y el comienzo de la sigui
ente, el valor predeterminado es 0. Este cambio hace que sea discontinua.
dash_propiedad length para obtener/ajuste de la longitud de los guiones en la cu
rva.
dash_offset propiedad para obtener/ajuste del desplazamiento entre los guiones e
n la curva.
Puntos/Ajustes de propiedad para obtener los puntos del tringulo.
Advertencia: Este siempre va a reconstruir todo el grfico de la nueva lista de pu
ntos. Puede ser muy exigente con la CPU.
segmentos propiedad para obtener/establecer el nmero de segmentos de la curva.
classkivy.graphics.vertex_Instructions.lneas suavizadas Bases: kivy.graphics.vert
ex_Instructions.Line
lnea experimental con sobre-llamar mtodos para obtener mejores resultados de antialiasing. Tiene pocos dibujar- espalda:
el dibujo de una lnea con alfa probablemente no tendr el resultado deseado si la lne
a se cruza consigo mismo.
cap,propiedades anddash conjunta no son compatibles.
utiliza una textura personalizada con un premultiplicado alfa.
lneas bajo 1px de ancho no son compatibles: ellos tendrn el mismo aspecto.
Advertencia: Esta es una obra inconclusa, experimental y sujeto a bloqueos.
Nuevo en la versin 1.9.0.
sobregirar_width determinan el ancho de la lnea de sobregiro, por omisin 1.2.
362
CAPTULO
TWENTYNINE
Nuestro sistema de gestin de entrada de entrada es amplia y simple al mismo tiemp
o. Estamos actualmente en condiciones de compatibilidad nativa con
Windows : eventos multitouch (lpiz y dedo)
OS X touchpads
Eventos multitouch Linux (kernel y mtdev)
controladores Linux wacom (lpiz y dedo)
TUIO
toda la gestin de entrada es configurable en el Kivy config. Usted puede fcilmente
utilizar muchos dispositivos multitouch en una aplicacin Kivy.
Cuando los eventos se han ledo desde los dispositivos, son enviados a travs de un
procesamiento posterior mod- ule antes de ser enviado a su aplicacin. Tambin tenem
os varios mdulos predeterminados para :
Deteccin de doble toque disminuyendo temblor
Disminuye la inexactitud de tocar en "malos" DIY
ignorando las regiones
classkivy.input.MotionEvent(dispositivo, id, args) Bases: kivy.input.motionevent
.MotionEvent
clase abstracta que representa un evento de entrada (touch o no touch).
Los parmetros id[str] ID nico del MotionEvent args[list] Lista de parmetros pasados
a la funcin depack() apply_transform_2d (transformacin) de aplicar una transforma
cin en x, y, z, px, py, Pz, OX, OY y OZ, dx, dy, dz
copy_A(a) copia de algn atributo de otro objeto tctil.
depack(args) Depack args en atributos de la clase distancia(other_touch) Devolve
r la distancia entre el toque actual y otro toque.
Divisin de Programas de apoyo a las operaciones de retorno entre delta ltima posic
in y la posicin actual, en el sistema de coordenadas de pantalla (self.self.dx, dy
)
Agarrar(class_instance, exclusivo=false) Agarrar este evento de movimiento. Uste
d puede agarrar un toque si desea recibir las siguientes
363
29.1.2 Dejitter
evitar el temblor de blob.
Un problema que a menudo se enfrenta (esp. en ptica de MT setups) es que de jitte
rish BLOBs causados por el mal estado de las caractersticas de la cmara. Con este
mdulo puede deshacerse de esa inestabilidad. Usted acaba de definir una distancia
_thresholdjitter en tu config y todos los movimientos tctiles que mueva el toque
por menos de la distancia de jitter son conside- ERED "mal" movimientos provocad
os por el jitter y se descartarn.
classkivy.input.posprocesamiento.dejitter.InputPostprocDejitter Bases: builtins.
object
deshacerse de jitterish BLOBs. Ejemplo:
[posprocesamiento] jitter_distancia = 0,004 jitter_ignore_devices = ratn,
Configuracin mactouch jitter_distancia: floatA flotan en el rango de 0-1. El
jitter_ignore_devices: stringA separados por comas lista de identificadores de d
ispositivos que no deben ser procesados por dejitter (porque estn ya muy precisas
).
29.1.3
Bsqueda de doble toque para tocar un doble toque
classkivy.input.posprocesamiento.doubletap.InputPostprocDoubleTap Bases: builtin
s.object
InputPostProcDoubleTap es un post-procesador para verificar si un contacto est o
no un doble toque. Doble toque puede configurarse en el archivo config: Kivy
[posprocesamiento] doble_toca_time = 250 doble_toca_distancia = 20
parmetros de distancia est en el rango de 0-1000 y el tiempo en milisegundos.
find_doble_tap(ref) encontrar un doble toque toque dentro de self.toques. El con
tacto no debe ser un doble toque anterior y la distancia debe estar dentro del u
mbral especificado. Adems, el touch perfiles deben ser del mismo tipo de tacto.
29.1.4 lista de Ignorar
ignorar el toque en algunas reas de la pantalla
classkivy.input.posprocesamiento.ignorelist.InputPostprocIgnoreList Bases: built
ins.object
InputPostprocIgnoreList es un post-procesador que elimina el toque en la lista d
e ignorados. La lista de ignorados puede configurarse en el archivo config: Kivy
[posprocesamiento] # formato: [(xmin, xmax, ymin, ymax), ...] ignore = [(0.1, 0.
1, 0.15, 0.15)]
La lista de ignorar las coordenadas estn en el rango de 0-1, no en pxeles de panta
lla.
366
en los sistemas Linux, el proveedor del ratn puede ser molesto cuando se utiliza
con otro proveedor (hidinput multitouch o mtdev). El ratn puede entrar en conflic
to con ellas: un solo toque puede generar un evento del ratn y otro del proveedor
proveedor multitouch.
Para evitar este comportamiento, puede activar el "disable_on_activity" token en
la configuracin del ratn.
Entonces, si alguno toca son creados por otro proveedor, el evento de ratn se des
cartar. Aadir esto a su configuracin:
[Input] = ratn mouse,disable_on_actividad
mediante la interaccin con el mouse multitouch
nuevo en la versin 1.3.0.
Por defecto, los botones central y derecho del ratn, as como una combinacin de ctrl
+ botn izquierdo del ratn se utiliza para emulacin de multitouch. Si desea utiliza
rlos para otros fines, puede deshabilitar este comportamiento activando el "disa
ble_multitouch" token:
[Input] = ratn mouse,disable_multitouch
368
Esta es una clase que puede grabar y reproducir algunos eventos de entrada. Esto
puede ser usado para casos de prueba, protectores de pantalla, etc.
Una vez activado, el registrador estar atento a cualquier evento de entrada y gua
rdar sus propiedades en un archivo con el tiempo delta. Ms tarde, puede reproduci
r el archivo de entrada: generar falso contacto eventos con las propiedades guard
adas y enviarlo al bucle de eventos.
Por defecto, slo se guarda la posicin ( pos perfil y x , y , atributos). Cambia
r slo si usted entiende cmo funciona la manipulacin de entrada.
29.3.1 Grabacin de eventos
la mejor manera es utilizar el mdulo "grabador". Verificar los mdulos documentacin
para ver cmo activar un mdulo.
Una vez activado, puede presionar F8 para iniciar la grabacin. De forma predeterm
inada, los eventos se escribirn en <current- path>/grabador.kvi. Si desea detener
la grabacin, pulse F8 de nuevo.
Puede reproducir el archivo pulsando F7.
Compruebe el mdulo registrador para obtener ms informacin.
29.3.2 La reproduccin manual
puede abrir manualmente un archivo grabado y jugar haciendo:
de kivy.input.grabadora grabadora
grabadora de importacin rec =(filename= myrecorder.kvi ) rec.play = True
si desea recorrer ese archivo, puede hacer:
373
29.4.3
TheMotionEvent perfiles almacena informacin especfica de los dispositivos en diver
sas propiedades enumeradas en theprofile. Por ejemplo, puede recibir un MotionEv
ent que tiene un ngulo, una ID fiducial, o incluso una forma. Puede comprobar par
a ver qu atributo theprofile es soportado actualmente por el proveedor MotionEven
t.
Esta es una lista breve de los valores del perfil soportado por defecto. Comprue
be theMotionEvent.profile propiedad para ver qu valores del perfil estn disponible
s.
Descripcin de perfil ngulo valor ngulo 2D. Se accede a travs de la propiedad.
botn del ratn ( left , Right , central , scrollup o scrolldown ). Se accede a
travs de la propiedad button.
markerid Marcador fiducial o ID. Se accede a travs de la FID propiedad.
pos de posicin 2D. Se accede a travs de la x, y o pos propiedades.
pos3D 3D posicin. Se accede a travs de la x, y o z propiedades.
La presin del contacto. Se accede a travs de la presin. La
forma de la propiedad forma de contacto. Se accede a travs de la propiedad Shape
.
Si desea saber si la currentMotionEvent tiene un ngulo:
def sobre_TOUCH_move(self, tctil):
Si ngulo en touch.profile:
print( El ngulo es tctil, toque .a)
Si desea seleccionar slo los fiduciales:
def sobre_TOUCH_move(self, tctil):
Si No en touch.profile: arkerid
volver
classkivy.input.motionevent.MotionEvent(dispositivo, id, args) Bases: kivy.input
.motionevent.MotionEvent
clase abstracta que representa un evento de entrada (touch o no touch).
Los parmetros id[str] ID nico del MotionEvent args[list] Lista de parmetros pasados
a la funcin depack() apply_transform_2d (transformacin) de aplicar una transforma
cin en x, y, z, px, py, Pz, OX, OY y OZ, dx, dy, dz
copy_A(a) copia de algn atributo de otro objeto tctil.
depack(args) Depack args en atributos de la clase device = Ninguno Dispositivo u
tilizado para crear este toque
distancia(other_touch) Devolver la distancia entre el toque actual y otro toque.
Doble_toca_time = Ninguno si el toque es ais_doble_tap, es el tiempo entre el an
terior y el actual toque toque.
Divisin de Programas de apoyo a las operaciones de retorno entre delta ltima posic
in y la posicin actual, en el sistema de coordenadas de pantalla (self.dx, dy) sel
f.
376
Captulo
38
Kivy KIVY IDIOMA El idioma es un lenguaje dedicado a describir la interfaz de us
uario y las interacciones. Se podra comparar este lenguaje QML Qt (Http://qt.noki
a.com), pero hemos incluido algunos nuevos conceptos tales como definiciones de
regla (que son algo parecido a lo que usted puede saber desde plantillas CSS), y
as sucesivamente.
Ha cambiado en la versin 1.7.0: El lienzo no ejecuta el Generador de expresiones
ya en tiempo real. Se empaquetar todas las expresiones que necesita ser ejecutado
primero y ejecutarlos tras el envo de la entrada, justo antes de dibujar el marc
o. Si desea forzar la ejecucin del lienzo de dibujo, simplemente callBuilder.sync
.
Una herramienta de creacin de perfiles experimental para el kv lang tambin est incl
uido. Puede activarlo estableciendo la variable de medio ambiente KIVY_PROFILE_L
ANG=1. Se generar un archivo HTML denominado builder_stats.html.
30.1 Introduccin
El lenguaje consta de varias construcciones que se pueden utilizar:
reglas una regla es similar a una regla CSS. Una regla se aplica a widgets especf
icos (o clases de ella) en el widget tree y los modifica en cierta manera. Puede
usar reglas para especificar comportamientos interactivos o utilizarlos para ag
regar representaciones grficas de los widgets que se aplican. Puede dirigir una c
lase especfica de widgets (similar al concepto de aclass CSS) utilizando el atrib
uto thecls (p.ej. Cls=MyTestWidget).
Un widget de root puede utilizar el lenguaje para crear la interfaz de usuario c
ompleta. Un kv archivo debe contener slo una raz widget en la mayora.
Clases dinmicas (introducido en la versin 1.7.0) clases dinmicas permiten crear nue
vos widgets y las reglas sobre la marcha, sin ninguna declaracin de Python.
Plantillas (DEPRECATED) (introducido en la versin 1.0.5, obsoleta a partir de la
versin 1.7.0) plantillas fueron utilizados para rellenar las partes de una aplica
cin, como diseo el contenido de una lista (por ejemplo,
icono de la izquierda, el texto de la derecha). Ahora son desaprobadas por clase
s dinmicas.
30.2 La sintaxis de un archivo de
idioma Kivy kv un archivo debe tener una extensin de nombre de archivo.kv como.
El contenido del archivo debe empezar siempre con el cabezal Kivy, donde la vers
in debe ser reemplazado con la versin de idioma Kivy que ests utilizando. Por ahora
, el uso 1.0:
#:kivy 1.0
# contenido aqu
381
texto:
382
hola mundo
sin embargo, debido a limitaciones en el analizador, que esperemos pueda ser lev
antado en el futuro, la siguiente no funciona:
<BadExample>:
beta: self.a.b.c.d [Auto].e.f
hecho .e.f parte no se reconoce porque no sigue el patrn esperado y, por tanto, n
o re- sultado en una dependencia apropiada es la instalacin. En su lugar, una pro
piedad intermedio debe ser introducido para permitir la restriccin siguiente:
<GoodExample>:
alpha: self.a.b.c.d [Auto] beta: self.alpha.e.f
30.5 instrucciones grficas
las instrucciones grficas son una parte especial del lenguaje Kivy. Son gestionad
as por el "lienzo" la definicin de la propiedad:
Widget:
canvas:
COLOR:
rgb: (1, 1, 1):
tamao de rectngulo: self.tamao pos: self.pos
todas las clases agregadas en el interior de la propiedad canvas theInstruction
debe derivarse de la clase. Usted puede poner cualquier widget clase dentro del
lienzo (propiedad, ya que no tendra sentido porque un widget no es una instruccin
de grficos).
385
Si desea hacer tematizacin, tendrs la misma pregunta en CSS: las reglas que han si
do ejecutados en primer lugar? En nuestro caso, las reglas se ejecutan en orden
de procesamiento (es decir, de arriba hacia abajo).
Si desea cambiar la forma en que los botones son prestados, usted puede crear su
propio archivo de kv y aadir algo como esto:
<Button>:
canvas:
COLOR:
rgb: (1, 0, 0) rectngulo:
pos: self.pos: self.Tamao tamao de rectngulo:
pos: self.pos tamao: self.textura_tamao textura: Textura self.
Esto resultar en botones con un fondo rojo con la etiqueta en la parte inferior i
zquierda, adems de todas las reglas anteriores. Puede borrar todas las instruccio
nes anteriores mediante theClear comando:
<Button>:
: lienzo
claro color:
rgb: (1, 0, 0) rectngulo:
pos: self.pos: self.Tamao tamao de rectngulo:
pos: self.pos tamao: self.textura_tamao textura: Textura self.
Entonces, slo las reglas que sigue el comando clear sern tomadas en consideracin.
30.6 Las clases dinmicas
clases dinmicas le permiten crear nuevos widgets sobre la marcha, sin ninguna dec
laracin de python en primer lugar. La sintaxis de la dinmica de las clases es simi
lar a las reglas, pero debe especificar las clases base que desee a la subclase.
La sintaxis es similar:
# herencia simple <NewWidget@Button>:
# kv cdigo aqu ...
# La herencia mltiple <NewWidget@ButtonBehavior+Label>:
# kv cdigo aqu ...
El carcter @ se utiliza para separar el nombre de clase de las clases que desee a
la subclase. El Python equivalente habra sido:
# clase de herencia simple NewWidget(Button):
pase
386
texto: ctx.title
luego en Python, puede crear instancias de la plantilla mediante:
de kivy.lang importar Builder
# Crear una plantilla con hello world + una imagen # Los valores de contexto deb
en ser pasados como kwargs al generador.template # funcin icono1 = Builder.templa
te( IconItem title= Hola mundo , imagen= myimage.png")
# Crear una segunda plantilla con otra informacin ctx = { title : Otro , hola m
undo : myimage imagen2.png } icon2 = Builder.template( IconItem ,
ctx) # y usar i
cono1 y icon2 como otro widget.
30.7.2 Ejemplo de plantilla la
mayora del tiempo, cuando se crea una pantalla en el kv lang, utiliza una gran ca
ntidad de redefiniciones. En nuestro ejemplo, vamos a crear una barra de herrami
entas, basado en un BoxLayout, y puso en un fewImage widgets que reaccionar a la_
TOUCH_evento.
<MyToolbar>:
BoxLayout:
Imagen:
Fuente: data/text.png" tamao: self.textura_size tamao_HINT: Ninguno, Ninguno en_T
OUCH_down: self.colisionan_point( args[1].pos) y root.create_text()
Imagen:
Fuente: data/image.png" tamao: self.textura_size tamao_HINT: Ninguno, Ninguno en_
TOUCH_down: self.colisionan_point( args[1].pos) y root.create_image()
388
Imagen:
Fuente: data/video.png" tamao: self.textura_size tamao_HINT: Ninguno, Ninguno en_
TOUCH_down: self.colisionan_point( args[1].pos) y root.create_video()
, podemos ver que el tamao y tamao_hint atributo son exactamente los mismos. Ms que
eso, en el callback_TOUCH_down y la imagen estn cambiando. Estos pueden ser la p
arte variable de la plantilla que podemos poner en un contexto. Vamos a intentar
crear una plantilla para la imagen:
[ToolbarButton@Image]:
# Esta es la misma que antes de tamao: self.textura_size tamao_HINT: Ninguno, Ning
uno
ctx.imagen_TOUCH_down: self.colisionan_point( args[1].pos) y CTX.callback() % # Ah
ora, estamos usando el ctx para la parte variable de la plantilla fuente: data/
%s.png"
La plantilla puede utilizarse directamente en el MyToolbar regla:
<MyToolbar>:
:
ToolbarButton BoxLayout:
Imagen: devolucin de llamada texto : root.create_text ToolbarButton:
Imagen: devolucin de llamada Imagen : root.create_image ToolbarButton:
Imagen: devolucin de llamada video : root.create_video
eso es todo :)
30.7.3 Limitaciones de plantilla
cuando se crea un contexto:
1. No se pueden usar referencias que no sea "root":
<MyRule>:
Widget:
id: miwidget valor: Plantilla :
ctxkey bleh: miwidget.valor # << fallan, esto hace referencia al ID # miwi
dget
2. No todas las partes dinmicas ser entendido:
<MyRule>:
Plantilla:
ctxkey: 1 si el valor root.prop1 else value2 # << # root.prop1 incluso
Sin embargo, cules sern los valores finales de las propiedades cuando miregla(text
= Adis , fin=55) es ejecutado?
La regla es que Python rpida inicializacin es ms fuerte que la inicializacin de KV sl
o para reglas constantes.
Especficamente, la kwargs proporcionada al inicializador de python se aplica siem
pre en primer lugar. As, en el ejemplo anterior, el texto es bye y el orden se
establece en 55. A continuacin, todos los KV reglas se aplican, excepto aquellas
normas constante que sobrescribir un valor proporcionado inicializador de python
.
Es decir, el KV reglas que no crea enlaces como texto: Hola y rampa: 45., si u
n valor para esta propiedad ha sido proporcionada en python, luego que la regla
no se aplica.
As en el miregla(text= Adis , fin=55), por ejemplo, el texto ser bye , rampa ser de
45, y el orden, que crea un enlace, primero se establecer en 55 KV, pero luego c
uando las reglas se aplican acabar siendo independientemente de self.x + 10.
Ha cambiado en la versin 1.9.1: antes, KV las normas siempre sobrescriba los valor
es de python, ahora, valores de python no se sobrescriben con las reglas constan
tes.
30.11 Lang directivas
se pueden utilizar directivas para agregar comandos declarativa, tales como impo
rtaciones o definiciones de constantes, a los archivos de lang. Las directivas s
e agregan como comentarios en el siguiente formato:
#: <directivename><options>
30.11.1 importar <package>
Nuevo en la versin 1.0.5.
Sintaxis:
#:importar <alias><package>
Puede importar un paquete escribiendo:
#:importar so SO
<Rule>
Botn ::
texto: os.getcwd()
o algo ms complejo:
391
#:importar ut kivy.utils.
<Rule>:
:
color de lienzo:
rgba: ut.get_random_color()
nuevo en la versin 1.0.7.
Puede importar directamente desde un mdulo de clases:
#: importar la animacin kivy.animation.Animation <Rule>:
on_prop: Animacin(x)=.5.start(self)
30.11.2 set <key><expr>
Nuevo en la versin 1.0.6.
Sintaxis:
#:set <key><expr>
Establecer una clave que estar disponible en cualquier lugar del kv. Por ejemplo:
#:configurar mi_color (.4, .3, .4) #:configurar mi_color_hl (.5, .4, .5)
<Rule>:
Estado: normal canvas:
COLOR:
rgb: MI_color si self.State == "normal" ms mi_color_hl
30.11.3 incluyen <file>
Nuevo en la versin 1.9.0.
Sintaxis:
es para que las reglas de KV constante (es decir, aquellos que no crear enlaces)
de ese widget no ser aplicado. Esto permite por ejemplo saltarse las reglas cons
tante que sobrescribir un valor inicializado en python.
load_file(filename,
kwargs) insertar un archivo en el idioma builder y devolver el
widget de root (si est definido) del archivo de kv.
Parmetros: bool rulesonly, por omisin FalseIf True, el constructor provocar una exc
epcin si tiene una raz dentro de la definicin de widget.
load_string(string, kwargs) insertar una cadena en el idioma Builder y devolver el
widget de root (si est definido) de la cadena de kv.
Parmetros: bool rulesonly, por omisin FalseIf True, el constructor provocar una exc
epcin si tiene una raz dentro de la definicin de widget.
match(widget) devuelve una lista de objetos que coincidan con el widget ofParser
Rule.
match_rule_name(nombre_regla) devuelve una lista de objetos que coincidan con el
widget ofParserRule.
sync() se ejecutan todas las operaciones en espera, como la ejecucin de todas las
expresiones relacionadas con el lienzo.
Nuevo en la versin 1.7.0.
template( args,
ctx) Crear una plantilla especializada con un contexto especfico. ..:
: versionadded 1.0.5
con plantillas, puede crear widgets personalizados desde un kv definicin lang, dnd
oles un contexto. Comprobar el uso de plantilla.
unbind_property(widget, nombre) desenlazar los controladores creados por todas l
as reglas del widget que establezca el nombre.
Esto borra todas las normas del widget que toman la forma:
Nombre: la regla
por ejemplo:
>>> w = Builder.load_string(
... Widget:
... altura: self.ancho / 2. Si el auto.disabled else self.width
... x: self.y + 50
...
)
>>> w.tamao [100, 100] >>> w.pos [50, 0] >>> w.width =
500 >>> w.tamao [500, 500] >>> Builder.unbind_property(w, alt
ura ) >>> w.width = 222
394
>>> w.tamao [222, 500] >>> w.y = 500 >>> w.pos [550, 5
00]
Nuevo en la versin 1.9.1.
unbind_widget(uid) desenlazar todos los controladores creados por el KV normas d
e thewidget. La kivy.uix.widget.Widget.uid se pasa aqu en lugar de en el widget e
n s, porque el constructor lo est utilizando en el widget destructor.
Esto efectivamente clearls KV todas las reglas asociadas con este widget. Por ej
emplo:
>>> w = Builder.load_string(
... Widget:
... altura: self.ancho / 2. Si el auto.disabled else self.width
... x: self.y + 50
...
)
>>> w.tamao [100, 100] >>> w.pos [50, 0] >>> w.width =
500 >>> w.tamao [500, 500] >>> Builder.unbind_widget(w.uid) &g
t;>> w.width = 222 >>> w.y = 500 >>> w.tamao [222, 500] &
gt;>> w.pos [50, 500]
..:: 1.7.2
Descarga versionadded_File(archivo)
Descargar todas las reglas asociadas con un archivo importado anteriormente.
Nuevo en la versin 1.0.8.
Advertencia: Esto no eliminar las reglas o las plantillas ya aplicada/USA en widg
ets actual. Slo tendr efecto la prxima creacin de widgets o plantilla invocacin.
exceptionkivy.lang.BuilderException(Contexto, lnea, mensaje, causa=None) Bases: k
ivy.lang.parser.ParserException
excepcin planteada cuando el constructor no ha podido aplicar una regla en un wid
get.
classkivy.lang.Parser( kwargs) Bases: builtins.object
crea un objeto analizador para analizar un archivo de idioma Kivy Kivy o conteni
do.
parse(contenido) Analizar el contenido de un archivo de analizador y devolver un
a lista de objetos raz.
Espacios) sangra. parse_level (Nivel, lneas, espacios=0) analizar el nivel actual
(nivel
395
>>> w.tamao [222, 500] >>> w.y = 500 >>> w.pos [550, 5
00]
Nuevo en la versin 1.9.1.
unbind_widget(uid) desenlazar todos los controladores creados por el KV normas d
e thewidget. La kivy.uix.widget.Widget.uid se pasa aqu en lugar de en el widget e
n s, porque el constructor lo est utilizando en el widget destructor.
Esto efectivamente clearls KV todas las reglas asociadas con este widget. Por ej
emplo:
>>> w = Builder.load_string(
... Widget:
... altura: self.ancho / 2. Si el auto.disabled else self.width
... x: self.y + 50
...
)
>>> w.tamao [100, 100] >>> w.pos [50, 0] >>> w.width =
500 >>> w.tamao [500, 500] >>> Builder.unbind_widget(w.uid) &g
t;>> w.width = 222 >>> w.y = 500 >>> w.tamao [222, 500] &
gt;>> w.pos [50, 500]
..:: 1.7.2
Descarga versionadded_File(archivo)
Descargar todas las reglas asociadas con un archivo importado anteriormente.
Nuevo en la versin 1.0.8.
Advertencia: Esto no eliminar las reglas o las plantillas ya aplicada/USA en widg
ets actual. Slo tendr efecto la prxima creacin de widgets o plantilla invocacin.
exceptionkivy.lang.builder.BuilderException(Contexto, lnea, mensaje, causa=None)
Bases: kivy.lang.parser.ParserException
excepcin planteada cuando el constructor no ha podido aplicar una regla en un wid
get.
30.13
Clase de analizador utilizado para el anlisis de archivos .kv en normas.
classkivy.lang.parser.Parser( kwargs) Bases: builtins.object
crea un objeto analizador para analizar un archivo de idioma Kivy Kivy o conteni
do.
398
400
CAPTULO
THIRTYONE
bibliotecas externas
Kivy viene con otras bibliotecas C/python:
ddsfile - utilizado para analizar y guardar archivos DDS.
osc - una modificacin/versin optimizada de PyOSC para utilizar el protocolo de con
trol de sonido abierto.
mtdev - proporciona soporte para el Kernel multi-tctil biblioteca de transformacin
.
Advertencia: Aunque Kivy viene con estas bibliotecas externas, no proporcionamos
ningn tipo de apoyo para ellos y podra cambiar en el futuro. No confe en ellos en
su cdigo.
31.1 GstPlayer
nuevo en la versin 1.8.0.
Es un reproductor multimedia GstPlayer implementada especficamente para Kivy con
Gstreamer 1.0. No use Gi en absoluto y se centra en lo que queremos: la capacida
d de leer y transmitir la imagen de vdeo en una devolucin de llamada, o leer un ar
chivo de audio. No lo use directamente, sino que en su lugar utilice nuestros pr
incipales proveedores.
Este reproductor se compilan automticamente si tiene pkg-config --libs cflags gst
reamer-1.0 trabajando.
Advertencia: Esta es una biblioteca externa y Kivy no ofrece ningn soporte para l.
Podra cambiar en el futuro y le recomendamos que no confe en l en su cdigo.
31.2 Archivo DDS library
Esta biblioteca puede ser utilizada para analizar y guardar DDS (superficie Dire
ctDraw. <https://en.wikipedia.org/wiki/DirectDraw_Surface>) los archivos.
La primera versin fue escrita por:
Alexey Borzenkov (Snaury@gmail.com)
Todos los crditos iniciales de trabajo ir a l! Gracias :)
Esta versin est escrito sin utilizar ctypes porque ctypes Kivy no tiene soporte en
Android. Utilizamos las estructuras en su lugar.
401
31.2.1
[Formato DDS DDS ][SurfaceDesc] [Data]
[11]: PixelFormat
[SurfaceDesc]:: (Todo es uint32) Tamao banderas Altura Anchura
profundidad PitchOrLinearSize MipmapCount reservados1
Tamao banderas FourCC RGBBitCount RBitMask GBitMask BBitMask ABitMask
2 [Caps]:: Tapas tapas121
2 reservados reservados
Advertencia: Esta es una biblioteca externa y Kivy no ofrece ningn soporte para l.
Podra cambiar en el futuro y le recomendamos que no confe en l en su cdigo.
31.3 Python
mtdev mtdev El mdulo proporciona enlaces Python al ncleo multi-toque de transforma
cin, tambin conocida como biblioteca mtdev (licencia MIT).
La biblioteca mtdev transforma todas las variantes del kernel MT eventos al tipo
B ranurados de protocolo. Los acontecimientos ponen en mtdev puede ser desde cu
alquier dispositivo MT, concretamente un tipo sin contacto, escriba un seguimien
to con el contacto de seguimiento, o tipo B con el contacto de seguimiento. Cons
ulte la documentacin del kernel para ms detalles.
Advertencia: Esta es una biblioteca externa y Kivy no ofrece ningn soporte para l.
Podra cambiar en el futuro y le recomendamos que no confe en l en su cdigo.
402
Captulo
32
Los mdulos Los
mdulos son clases que se pueden cargar cuando una aplicacin se est iniciando Kivy.
La carga de mdulos es administrado por el archivo de configuracin. Actualmente, se
incluyen:
touchring: dibuje un crculo alrededor de cada contacto.
Monitor: agregar una barra superior de color rojo que indica el FPS y un pequeo g
rfico que indica actividad de entrada.
Asociacin de teclas: Enlazar algunas claves para acciones como, por ejemplo, una
captura de pantalla.
Grabadora: grabar y reproducir una secuencia de eventos.
Pantalla: emular las caractersticas (PPP/densidad/ resolucin) de diferentes pantal
las.
inspector: examina su jerarqua widget widget y propiedades.
webdebugger: Realtime examen de su aplicacin interna a travs de un navegador web.
Los mdulos se cargan automticamente desde el Kivy ruta y ruta de usuario:
RUTA_A_KIVY/kivy/modules HOME/.kivy/mods
32.1 activar un mdulo
hay varias maneras en que usted puede activar un mdulo kivy.
def desactivado(self):
Reloj.desprogramar(self.update_fps)
def update_fps(self, args):
fps = reloj.get_fps() self.lbl.Text = "{}" Fps.Format(int(fps)
Console.register_addon(ConsoleAddonFps)
puede crear complemento que aade paneles. Activacin/desactivacin del panel no estn a
tadas a los addon- cin activa/desactivacin, pero en algunos casos, se puede usar e
l mismo callback para desactivar el addon y el panel. Aqu es un simple complement
o del panel:
de kivy.modules.Console Console, importacin,
clase ConsoleLabel ConsoleAddon ConsoleAddonAbout(ConsoleAddon):
def init(self):
self.Console.add_panel("about", Auto_Activate.panel self.panel_desactivar)
def panel_activar(self):
self.Console.bind(widget=self.update_content) self.update_content()
def_desactivar panel(self):
self.Console.unbind(widget=self.update_content)
def desactivar(self):
self.panel_Deactivate()
def update_content(self, args):
widget = self.Console.widget widget: si no
devolver texto = "widget seleccionado es: {!r}".Format(widget) lbl = ConsoleLabe
l(text=texto) self.Console.set_content(lbl)
Console.register_addon(ConsoleAddonAbout)
clase Demo(App):
def construir(self):
botn = Botn(text="Hola").start keybinding(ventana, botn) Botn de retorno
Demo().run()
para eliminar la asociacin de teclas, puede hacer lo siguiente:
Keybinding(window.stop, el botn)
32.6 El mdulo del monitor
al mdulo de Monitor es una barra de herramientas que muestra la actividad de su a
plicacin actual :
FPS
Grfico de eventos de entrada
409
32.6.1 Uso
de mdulo normal de uso, por favor consulte la documentacin themodules.
32.7 El mdulo registrador de
nuevo en la versin 1.1.0.
Crear una instancia ofRecorder, adjuntar a la clase y enlazar algunas teclas par
a grabar / reproducir secuencias:
F6: Reproducir el ltimo registro de un bucle
F7: Lea la ltima grabacin
F8: Registrar eventos de entrada de
parmetros de configuracin 32.7.1 attrs: str, defaults torecord_attrs valor.
Atributos para grabar desde el evento de movimiento
profile_mask: str, defaults torecord_profile_valor de mscara.
Mscara para perfil de eventos de movimiento. Se utilizan para filtrar qu perfil ap
arecer en el evento de movimiento falso cuando reproducen.
filename: str, por defecto recorder.kvi
el nombre del archivo a grabar / reproducir con
32.7.2 Uso
de mdulo normal de uso, por favor consulte la documentacin themodules.
32.8 Pantalla
Este mdulo cambia algunas variables de entorno y configuracin para que coincida co
n la densidad / ppp / Tamao de un dispositivo especfico.
Para ver una lista de los disponibles screenid s, simplemente ejecute:
python main.py -m pantalla
para simular una pantalla de mediana densidad como el droide Motolora 2:
python main.py -m:pantalla droid2
para simular una pantalla de alta densidad como el HTC One X, en formato vertica
l:
python main.py -m pantalla:onex,retrato
para simular el iPad 2 pantalla:
python main.py -m pantalla:ipad
genera 410 Si la ventana es demasiado grande, usted puede especificar una escala
:
python main.py -m pantalla:Nota2,retrato,scale=.75
Nota que para visualizar el contenido correctamente en una ventana de escala deb
e utilizar siempre unidades p y p a lo largo de su aplicacin. Seemetrics para
ms detalles.
32.9 Touchring
muestra anillos alrededor de cada toque la superficie / pantalla. Puede utilizar
este mdulo para verificar que no haya problemas de calibracin con toques.
32.9.1
Los parmetros de configuracin de imagen: str, por omisin <kivy>/data/images/ring.
png" el nombre de archivo de la imagen que se va a utilizar.
Escala: float, el valor predeterminado es 1. La escala de la imagen.
alfa: float, el valor predeterminado es 1. La opacidad de la imagen.
show_cursor: Booleano, el valor predeterminado es False nuevo en la versin 1.8.0.
El
cursor_image: str, por defecto "Atlas://data/images/defaulttheme/slider_cursor
imagen utilizada para representar el cursor si aparece ..:: 1.8.0 versionadded
cursor_size: tupla, defaults (Ninguno, Ninguno) tamao aparente del cursor del ratn
, si se muestra el valor predeterminado mantendr su tamao real. ..:: 1.8.0 version
added
cursor_offset: tupla, defaults (Ninguno, Ninguno) el desplazamiento de la imagen
de textura. El valor de fallo se alinee la esquina superior izquierda de la ima
gen con el ratn pos. .. ver- sionadded: 1.8.0
32.9.2 Ejemplo
en su configuracin (~/.kivy/config.ini), puede agregar algo como esto:
[mdulos]=mypointer touchring = imagen.png,escala=.3,alfa=0.7
32.10 Depurador Web
nuevo en la versin 1.2.0.
Advertencia: este mdulo es altamente experimental, utilizarla con cuidado.
Este mdulo se inicia un servidor web y se ejecutan en segundo plano. Puede ver cmo
evoluciona su aplicacin durante el tiempo de ejecucin, examinar la memoria cach in
terna etc.
Ejecute con:
python main.py -m webdebugger
a continuacin, abra su navegador en Http://localhost:5000/
411
412
CAPTULO
THIRTYTHREE
Kivy Soporte de red admite actualmente basic, solicitudes de red asincrnicas. Con
sulte kivy.network.urlrequest.UrlRequest.
33.1 UrlRequest,
nuevo en la versin 1.0.8.
Puede utilizar theUrlRequest para realizar peticiones asncronas en la web y obten
er el resultado cuando la solicitud se haya completado. El espritu es el mismo qu
e el objeto XHR en Javascript.
El contenido tambin se decodifica si el Content-Type es application/json y el res
ultado se transmite automticamente a travs de json.cargas.
La sintaxis para crear un pedido:
desde kivy.network.urlrequest UrlRequest importacin req =(url UrlRequest, sobre e
l xito, sobre_redirect_on_failure, sobre_error_progress, en cuerpo, req_req_heade
rs, chunk_size, timeout, mtodo, decodificar, depurar, file_path, ca_archivo, comp
ruebe)
slo el primer argumento es obligatorio: el resto son opcionales. Por defecto, un
"GET" solicitud ser enviada.
Si el UrlRequest.req_body no es ninguno, un "POST" solicitud ser enviada. Es hast
a usted para ajustar UrlRequest.req_headers para satisfacer sus necesidades y la
respuesta a la solicitud sern accesibles como el parmetro llamado "resultado" de
debug: bool, por omisin FalseIf True, utilizar el registrador.debug para imprimir
infor- macin sobre el acceso URL/progresin/errores.
414
file_path: str, por omisin NoneIf set, el resultado de la UrlRequest, ser escrito
en esta ruta en lugar de en la memoria.
ca_file: str, por omisin None (Ninguna)Indica una ruta de archivo de certificado
de entidad emisora de certificados SSL para validar los certificados HTTPS contr
a compruebe: bool, por omisin TrueIf falso, deshabilita la comprobacin de certific
ado de CA SSL proxy_host: str, por omisin NoneIf establecido, el host para que ut
ilice el servidor proxy para esta conexin.
proxy_port: int, por omisin NoneIf establecido y host_proxy tambin est definido, el
puerto que se utilizar para conectar con el servidor proxy.
proxy_headers: dict, por omisin NoneIf set, y proxy_host tambin se establezca, la
cabeza- ers para enviar al servidor proxy en theCONNECT solicitud.
chunk_size devolver el tamao de un segmento, utilizada slo en modo "progress" (cuan
do En callback_progress est ajustado).
decode_resultado(Resultado, resp) decodificar el resultado obtenido de url segn s
u tipo de contenido. Slo soporta actualmente application/json.
error devolver el error de la solicitud. Este valor no se determina hasta que la
solicitud se haya completado.
get_connection_para_scheme (esquema) de la clase de conexin de retorno para un si
stema en particular. Esta es una funcin interna que puede ampliarse para admitir
esquemas personalizados.
Combinaciones compatibles real: http, https.
is_terminado de devolver True si la solicitud ha terminado, si es un xito o un fr
acaso.
req_cuerpo = Ninguno cuerpo de solicitud aprobada en __init__
req_headers = Ninguna Cabeceras de solicitud aprobada en __init__
resp_headers si la solicitud ha sido completada, devolver un diccionario que con
tiene los encabezados de la respuesta.
De lo contrario, devolver ninguna.
resp_status devolver el cdigo de estado de la respuesta si la solicitud est comple
ta, de lo contrario, devuelve ninguno.
resultado devolver el resultado de la solicitud. Este valor no se determina hast
a que la solicitud est terminado.
url = ninguna URL de la solicitud
espere(delay=0,5) esperar la solicitud para finalizar (untilresp_status no es ni
nguno)
Nota: Este mtodo est pensado para ser utilizado en el subproceso principal, y la l
lamada ser enviada desde el mismo subproceso desde el que est llamando.
Nuevo en la versin 1.1.0.
415
416
Captulo
34 EL
ALMACENAMIENTO
Nuevo en la versin 1.7.0.
Advertencia: este mdulo es todava experimental y la API est sujeta a cambios en ver
siones futuras.
34.1 Uso de
la idea detrs del mdulo de almacenamiento para poder cargar/guardar cualquier nmero
de pares clave-valor a travs de un ndice de clave. El modelo predeterminado es ab
stracto, por lo que no se puede usar directamente. Proporcionamos algunos de apl
ica- ciones como:
kivy.storage.dictstore.DictStore: utilice un dict python como una tienda kivy.st
orage.jsonstore.JsonStore: utilice un archivo JSON como almacn kivy.storage.redis
store.RedisStore: utilizar una base de datos con Redis redis-py
34.2 ejemplos
por ejemplo, vamos a usar un JsonStore:
de kivy.storage.jsonstore importacin
tienda JsonStore JsonStore =( hello.json )
# Ponga algunos valores store.put( Tito , nombre= Mathieu , org= kivy ) store.pu
t( tshirtman Name= Gabriel , age=27)
# utilizando la misma clave de ndice agregado previamente borra todos los pares c
lave-valor store.put( Tito , name= Mathieu , age=30)
# Obtener un ndice de valor mediante una tecla y la tecla print( Tito , store.get
( tito )[ age ])
# o adivinar la llave/entrada para una parte de la clave para el elemento en el
almacn.find(name= Gabriel ):
print( tshirtmans ndice es clave", tema[0]) print( sus pares clave-valor", Str(it
em[1]))
porque los datos es persistente, puede comprobar Ms tarde para ver si existe la c
lave:
417
de kivy.storage.jsonstore importacin
tienda JsonStore JsonStore =( hello.json ) si store.exists( tito ):
print( tite existe: , store.get( tito ) store.delete( tito )
34,3 sincrnico API asncrona /
Todos los mtodos estndar (get(), put() , exists(), delete(), find() tienen una ver
sin asincrnica.
Por ejemplo, el mtodo get tiene un parmetro de devolucin de llamada. Si se establec
e, la devolucin ser utilizado para devolver el resultado al usuario cuando est disp
onible: la solicitud ser asincrnica. Si la devolucin es None, entonces la solicitud
ser sincrnica y el resultado ser devuelto directamente.
Sin devolucin de llamada (API sincrnica):
entrada = mystore.get( tito ) print( tito = , entrada)
con devolucin de llamada asincrnica (API):
def mi_callback(store, clave resultado):
print( la llave , clave, "tiene un valor", resultado) mystore.get( plop , callba
ck=mi_callback)
la firma de devolucin de llamada (para casi todos los mtodos):
def callback(store, clave resultado):
""" tienda: la Store ejemplo utilizado actualmente.
clave: la clave buscada.
Resultado: el resultado de la bsqueda de la clave.
"""
34.4
El tipo de contenedor sincrnico API de almacenamiento emula el tipo de contenedor
para la API sincrnica:
almacn = JsonStore( hello.json )
# original: store.get( tito ) almacenar[ tito ]
# original: store.put( Tito , name= Mathieu ) almacenar[ tito ] = { name : Math
ieu }
# original: store.delete( tito ) del store[ tito ]
422
Captulo
35
SIN DOCUMENTACIN (PAQUETE KIVY.tools)
35.1 SIN DOCUMENTACIN (paquete kivy.tools.embalaje)
35.1.1
Mdulo Pyinstaller ganchos que las exportaciones pyinstaller relacionados con los
mtodos y parmetros.
Ganchos
PyInstaller viene con un gancho para kivy predeterminada que muestra los mdulos i
Generador de gancho
pyinstaller_ganchos incluye una herramienta para generar un gancho que enumera t
odos los mdulos del proveedor en una lista para que uno pueda comentar manualment
e los proveedores a no ser incluido. Para utilizar, hacer:
python -m kivy.tools.packaging.pyinstaller_hooks hook filename
filename es el nombre y la ruta del archivo para crear el gancho. Si el archivo
no est previsto el gancho se imprime en la terminal.
kivy.tools.packaging.pyinstaller_hooks.add_DEP_caminos() debe ser llamada por el
gancho. Agrega las rutas con el binario dependecies a la ruta del sistema de ma
nera que pueda encontrar los archivos binarios pyinstaller durante su etapa de r
astreo.
kivy.tools.packaging.pyinstaller_hooks.get_deps"_all() es similar a get_deps"_mi
nimal(), pero devuelve todos los mdulos que pueden indirectamente kivy im- portad
os. Que incluye todos los posibles proveedores de kivy.
Esto puede ser usado para obtener una lista de todos los posibles proveedores qu
e luego pueden ser manualmente in- cluida/excluidas comentando los elementos de
la lista en lugar de pasar sobre todos los temas. Ver descripcin del mdulo.
Devuelve
un diccionario con dos llaves, hiddenimports y excluye. Sus valores son una list
a de los mdulos correspondientes para incluir/excluir. Esto se puede pasar direct
amente a un anlisis", p.ej. con
un anlisis =([ .\kivy\Ejemplos\demo\touchtracer\main.py ], ...
get_deps"_all())
kivy.tools.packaging.pyinstaller_hooks.get_deps"_minimal(exclude_ignorado=True,
kw
args) Devuelve Kivy mdulos ocultos as como excluidos withAnalysis mdulos a utilizar
.
La funcin toma mdulos bsicos como argumentos de palabra clave y su valor indica que
426
Captulo
36
widgets
Los widgets son elementos de una interfaz grfica de usuario que forman parte de l
a experiencia del usuario. El mdulo kivy.uix contiene clases para crear y adminis
trar los widgets. Consulte la documentacin de la clase Widget para ms informacin.
Kivy widgets pueden clasificarse como sigue:
UX widgets: los widgets de la interfaz de usuario clsica, listos para ser montado
s para crear ms complejo wid- obtiene.
Etiqueta, Button, CheckBox, imagen, deslizante y la barra de progreso, la entrad
a de texto, botn de alternar, Conmutador Video
Diseos: un diseo widget no hace representacin pero slo acta como un disparador que or
ganiza sus hijos de una manera especfica. Leer ms onLayouts aqu.
Diseo de anclaje, Diseo de cuadro de flotacin, Diseo, Diseo de cuadrcula, PageLayout,
relativa dispersin de Diseo, Diseo, Diseo de Pila
Complejo UX widgets: los widgets que no atmica son el resultado de combinar varia
s classic wid- obtiene. Llamamos complejo porque su asamblea y su uso no son tan
genrico como el clsico de los widgets.
Burbuja, Lista despegable, FileChooser, Popup, Centrifugado, vistas de lista Tab
bedPanel, reproductor de vdeo, VKeyboard,
comportamientos widgets: Estos widgets no pero que acten sobre la representacin de
instrucciones grficas o inter- accin (tctil), el comportamiento de sus hijos.
Ver galera de smbolos Scatter,
Pantalla administrador: gestiona las pantallas y las transiciones al cambiar de
uno a otro.
Gestor de pantalla
36,1
nuevos comportamientos en la versin 1.8.0.
36.1.1 Comportamiento mixin clases
Este mdulo implementa los comportamientos que pueden ser mezclados con los widget
s de base existente. La idea detrs de estas clases es para encapsular propiedades
y eventos asociados con ciertos tipos de widgets.
Aislar estas propiedades y eventos en una clase mixin le permite definir su prop
ia implementacin de widgets kivy estndar que pueden actuar como sustituciones inme
diatas. Esto significa que usted puede re-estilo y re-definir
427
Del mismo modo, si se combina una clase de comportamiento con una clase que requ
iere el uso de los mtodos tambin definidas por la clase del comportamiento, la cla
se resultante puede no funcionar correctamente. Por ejemplo, combinando el Butto
nBehavior con aSlider, dos de los cuales utilizan elen_TOUCH_up(), mtodo, la clas
e resultante puede no funcionar correctamente.
Ha cambiado en la versin 1.9.1: Las clases de comportamiento individual, anterior
mente en una gran comportamientos.py, ha sido dividida en un archivo nico para ca
da clase en el mdulo de comportamientos. Todos los comportamientos todava se impor
tan en el mdulo de comportamientos, de modo que son accesibles como antes (por ej
emplo, ambos de kivy.uix.behaviors importacin y de kivy ButtonBehavior.uix.behavi
ors.botn import ButtonBehavior trabajo).
classkivy.uix.behaviors.ButtonBehavior( kwargs) Bases: builtins.object
esta clase mixin providesButton comportamiento. Consulte mdulo comportamientos el
botn documentacin para obtener ms informacin.
Eventos en_pressFired cuando se pulsa el botn.
En_releaseFired cuando se suelta el botn (es decir, el touch/clic que puls el botn
desaparece).
428
dowBase.en_key_down().
429
cuando se sobrescribe el mtodo de la deriva widget, super debe ser llamado para h
abilitar la pestaa de ciclismo. Si el widget derivado desea utilizar el tabulador
para sus propios fines, puede llamar super despus de que se haya procesado el ca
rcter (si no desean consumir la ficha).
Similar a otras funciones del teclado, debe devolver True si la tecla se consuma.
keyboard_on_key_up(ventana, keycode) El mtodo enlazado al teclado cuando la insta
ncia tiene el foco.
Cuando la instancia se centra, este mtodo est enlazado con el teclado y se llamar p
ara cada entrada de liberacin. Los parmetros son los mismos que kivy.core.window.W
indowBase.en_key_up().
Al sobrescribir el mtodo de la deriva widget, super debe ser llamado para habilit
ar de- centrndose en escapar. Si el widget derivado desea utilizar para escapar d
e sus propios fines, puede llamar super despus de que se haya procesado el carcter
(si no desean consumir el escape).
Seekeyboard_on_key_down(), show_keyboard() funcin de conveniencia para mostrar el
teclado en modo gestionado.
classkivy.uix.behaviors.CompoundSelectionBehavior( kwargs) Bases: builtins.objeto
el comportamiento de seleccin mixin implementa la lgica detrs de un teclado tctil y
seleccin de widgets seleccionable gestionado por la deriva widget. Consulte la do
cumentacin del mdulo de comportamientos de seleccin de compuestos para obtener ms in
formacin.
Nuevo en la versin 1.9.0.
_clear() seleccin deselecciona todos los nodos seleccionados.
Desmarque_NODE (NODO) Anula posiblemente el nodo seleccionado.
Es llamado por el controlador cuando se anula la seleccin de un nodo y tambin se p
uede llamar desde el exterior para anular la seleccin de un nodo directamente. El
widget derivado debe sobrescribir este mtodo y cambiar el nodo a su estado no se
leccionado cuando este se denominan parmetros nodeThe nodo a desactivarse.
Advertencia: Este mtodo debe ser llamado por la deriva widget usando super si es
por escrito.
get_index_de_Node (Nodo_nodes) seleccionable (interno) devuelve el ndice del nodo
dentro de la seleccionable_nodos devueltos por get_seleccionable_nodes().
get_seleccionable_nodes() (interno) devuelve una lista de los nodos que pueden s
er seleccionados. Puede ser sobreescrita por la deriva widget para devolver la l
ista correcta.
Esta lista se utiliza para determinar qu nodos para seleccionar con seleccin de gr
upo. Por ejemplo, el ltimo elemento de la lista estar seleccionada cuando se pulsa
home, avpg se mover (o aadir, si el cambio se mantiene) la seleccin de la posicin ac
tual en negativepage_count nodos empezando desde la posicin del nodo seleccionado
actualmente en la lista y as sucesivamente. An as, los nodos pueden ser selecciona
dos, incluso si no estn en esta lista.
Nota: es seguro cambiar dinmicamente la lista incluida la eliminacin, adicin o re-o
rganizar sus elementos. Los nodos pueden ser seleccionados, incluso si no estn en
esta lista. Y nodos seleccionados
430
de modo que el resultado final es coherente por ejemplo casa, aunque tendr que se
leccionar el ltimo elemento de esta lista visualmente, se selecciona el primer el
emento cuando contando de arriba a abajo y de izquierda a derecha. Si no se dese
a este comportamiento, una lista invertida debe ser devuelto en su lugar.
Valores predeterminados para returningchildren.
goto_node(clave, last_node, last_node_IDX) (interno) utilizado por el controlado
r para obtener el nodo en la posicin indicada por la llave. La clave puede ser en
tradas de teclado, por ejemplo, repg, o entradas de desplazamiento de la rueda de
desplazamiento del ratn, por ejemplo scrollup.
last_nodo es el ltimo nodo seleccionado y se utiliza para encontrar el nodo res
ultante. Por ejemplo, si la clave es devuelto, el nodo es un nodo desde el ltimo
nodo.
Puede ser sobreescrita por la deriva widget.
Parmetros keystr, la cadena utilizada para encontrar el nodo deseado. Puede ser u
no de los principales- junta claves, as como el ratn, scrollup scrolldown, scrollr
ight scrollleft y cadenas. Si las letras se escriben en rpida sucesin, la tle- ros
se combinarn antes del pasado como clave y puede ser usado para encontrar los no
dos que tienen asociada una cadena que comience con esas letras.
last_nodeThe ltimo nodo seleccionado.
last_node_idxThe cached ndice del ltimo nodo seleccionado en el get_seleccionable
lista_nodes(). Si la lista no ha cambiado se ahorra tener que mirar el ndice del l
timo_node en esa lista.
Returnstuple, el nodo dirigido por clave y su ndice en el get_seleccionable lista
_nodes(). Regresar (last_nodo, last_node_IDX) indica un nodo no fue encontrado.
Seleccione_node (nodo), se selecciona un nodo.
Es llamado por el controlador cuando se selecciona un nodo y se puede llamar des
de el exterior para seleccionar un nodo directamente. El widget derivado debe so
brescribir este mtodo y cambiar el estado del nodo seleccionado cuando llama.
Parmetros nodo nodeThe para ser seleccionado.
Returnsbool, True si el nodo fue seleccionado y False en caso contrario.
Advertencia: Este mtodo debe ser llamado por la deriva widget usando super si es
por escrito.
select_con_key_down(teclado, scancode, punto de cdigo, modificadores kwargs) proces
a una tecla. Esto se llama cuando se presiona una tecla de seleccin que van a uti
lizarse. Dependiendo del teclado teclas pulsadas y la configuracin, puede selecci
onar o anular la seleccin de nodos o rangos de nodo de la lista de nodos seleccio
nables,get_seleccionable_nodes().
Los parmetros son tales que podra estar vinculado directamente a la on_key_down ca
so de teclado. Por lo tanto, es seguro que se llama repetidamente cuando la tecl
a se mantiene presionada como es hecho por el teclado.
Returnsbool, True si se utiliza el evento Keypress, FALSE de lo contrario.
select_con_key_up(teclado, scancode kwargs) (interno) procesa una llave de liberac
in. Esto debe ser llamado por el widget derivada cuando una clave
431
def sobre_press(self):
self.Source = atlas://data/images/defaulttheme/checkbox_on
de def_release(self):
self.Source = atlas://data/images/defaulttheme/checkbox_off
class SampleApp(App):
def construir(self):
retorno MyButton()
SampleApp().run()
para ms detalles.
classkivy SeeButtonBehavior.uix.behaviors.button.ButtonBehavior( kwargs) Bases: bui
ltins.object
esta clase mixin providesButton comportamiento. Consulte mdulo comportamientos el
botn documentacin para obtener ms informacin.
Eventos en_pressFired cuando se pulsa el botn.
En_releaseFired cuando se suelta el botn (es decir, el touch/clic que puls el botn
desaparece).
Siempre_release Esto determina si o no el widget se dispara un evento si el_rele
ase_touch up est fuera del widget.
Nuevo en la versin 1.9.0.
Ha cambiado en la versin 1.9.2: El valor predeterminado es False. Ahora
siempre es aBooleanProperty_release y el valor predeterminado es False.
last_touch contiene el ltimo toque pertinentes recibidas por el botn. Esto puede s
er usado en prensa o_on_release para saber qu toque envi el evento.
Nuevo en la versin 1.8.0.
Inicializando focus
Widgets necesita ser visible antes de que pueda recibir el enfoque. Esto signifi
ca que la configuracin theirfocus propiedad en True antes de que stas sean visible
s, no tendr ningn efecto. Para inicializar el foco, puede utilizar la opcin on_par
ent evento:
desde kivy.app App importacin de kivy.uix.importar
clase TextInput MyTextInput textinput(TextInput):
def sobre_parent(self, widget, padres):
self.focus = True
class SampleApp(App):
def construir(self):
retorno MyTextInput()
SampleApp().run()
si est utilizando apopup, puede utilizar la opcin entrar _evento.
Para una descripcin de las conductas, por favor refirase a la documentacin thebehav
iors.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
.
classkivy.uix.behaviors.focus.FocusBehavior( kwargs) Bases: builtins.objeto
proporciona el foco del teclado el comportamiento. Cuando se combina con otros F
ocusBehavior widgets que al- bajos uno de ciclo se centran entre ellos presionan
do la tecla tab. Consulte la documentacin del mdulo de comportamiento thefocus par
a ms informacin.
Nuevo en la versin 1.9.0. El
enfoque si la instancia tiene el foco actualmente.
Si se establece en True se unen y/o solicitar la entrada de teclado, y ser remiti
que (por ejemplo, si se utiliza la ficha), aparecer un teclado nuevo. Cuando esto
es indeseable, el teclado se puede utilizar la propiedad. Por ejemplo, si hay d
os usuarios con dos teclados, entonces cada teclado se pueden asignar
444
rande de datos.
Advertencia: este mdulo es altamente experimental, su API puede cambiar en el fut
uro, y la documentacin no est completa en este momento.
Datos aceptados: lista de dict.
Tareas pendientes:
Mtodo para borrar cach de las instancias de la clase.
Prueba cuando sus puntos de vista no se puede encontrar (por ejemplo viewclass e
s Ninguno).
Fije la seleccin goto.
Se hace con el patrn MVC. M para el modelo implementado por .... V para las vista
s se divide entre diseo y opiniones e implementado por... C para el controlador s
e implementa mediante RecycleViewBehavior.
stas son clases abstractas y no pueden ser usados directamente. La aplicacin concr
eta predeterminada es reciclar- DataModel para M, RecycleLayout ... y para las v
istas, y RecycleView para C.
Cuando un RecycleView es instanciado crea automticamente las opiniones y las clas
es de datos. Sin embargo, uno debe crear manualmente el diseo de clases y agregar
la a la RecycleView.
Un gestor de diseo se agrega automticamente como un gestor de diseo cuando se agreg
an como el nio de la papelera. Del mismo modo cuando se retira. Un requisito es q
ue el gestor de diseo debe ser un sub-nio de la RecycleView as la vista puerto pued
e ser encontrado.
451
ADVERTENCIA: Cuando las vistas son re-utilizados no podrn activar si los datos si
gue siendo la misma.
classkivy.uix.recycleview.RecycleViewBehavior( kwargs) Bases: builtins.object
RecycleViewBehavior es una visualizacin flexible para proporcionar una ventana re
ducida en un conjunto grande de datos.
Consulte la documentacin del mdulo para obtener ms informacin.
_datos modelo de datos modelo responsable de mantener el conjunto de datos.
diseo_manager, responsable de diseo para colocar puntos de vista dentro de la recy
cleview
refresh_from_data( largs, kwargs) debe ser llamado cuando cambian los datos. Los cam
bios en los datos suelen indicar que todo tiene que ser rec lculo desde el orige
n de datos ha cambiado.
Se enlaza automticamente a ON_data_cambiado inRecycleDataModelBehavior y respon
de- das y aceptar los argumentos del evento.
Se puede llamar manualmente para desencadenar una actualizacin.
refresh_de_layout( largs, kwargs) debera ser llamado cuando los cambios de diseo o nec
esidades de cambio. Normalmente se llama cuando los datos no ha cambiado, pero,
por ejemplo, un parmetro de diseo y, por consiguiente, el diseo debe ser rec lculo.
refresh_de_viewport( largs) debera ser llamado cuando el viewport cambios y los dat
os mostrados deben ser actualizados. Typ- ically ni los datos ni el diseo se volv
ern a calcular.
view_adaptador responsable de proporcionar opiniones que representan los element
os de un conjunto de datos.
36.2.1 RecycleView
una visualizacin flexible para proporcionar una ventana reducida en un conjunto g
rande de datos.
Advertencia: este mdulo es altamente experimental, su API puede cambiar en el fut
uro, y la documentacin no est completa en este momento.
Datos aceptados: lista de dict.
Tareas pendientes:
Mtodo para borrar cach de las instancias de la clase.
Prueba cuando sus puntos de vista no se puede encontrar (por ejemplo viewclass e
s Ninguno).
TODO:
Hacer ver cachs especficas para cada clase de vista tipo.
classkivy.uix.recycleview.Views.RecycleDataAdapter Bases: kivy.event.
La clase EventDispatcher que convierte los datos en una vista.
- detalles internos - una vista puede tener 3 estados.
puede ser completamente sincronizados con los datos, lo cual ocurre cuando la vis
ta est dis- jugado. Estos se almacenan inviews.
puede estar sucio, que ocurre cuando la vista est en sincronizacin con los datos, e
xcepto para el tamao/pos parmetros que es controlado por el diseo. Esto ocurre cuan
do la vista no se muestra actualmente, pero los datos no han cambiado. Estas opi
niones se almacenan indirty_views.
Finalmente la vista puede estar muerto que ocurre cuando cambian los datos y
la vista no estaba actualizado o cuando una vista se acaba de crear. Esas opinio
nes se agregan normalmente a la memoria cach interna.
Normalmente lo que ocurre es que el gestor de diseo se establecen los datos y, a
continuacin, pide opiniones, mediante set_visible_views,() para determinados elem
entos de datos que muestra.
Estas opiniones son sacado de las opiniones actuales, sucio o cach global. A cont
inuacin, dependiendo del estado de vista refresh_view_attrs() es llamado a llevar
el juicio hasta la fecha con los datos (excepto para el dimensionamiento de los
parmetros). Finalmente, el gestor de diseo obtiene estas opiniones, actualiza su
tamao y los muestra.
attach_recycleview(RV) asocia aRecycleViewBehavior con esta instancia. Se almace
na inrecycleview.
create_view(Index, Data_item, viewclass) (interno) crea e inicializa la vista de
los datos en el ndice.
Devuelve la vista est sincronizado con los datos, excepto para el tpv/informacin d
e tamao.
detach_recycleview() elimina la RecycleViewBehavior asociado con esta instancia
y borra recycleview.
get_view(Index, Data_item, viewclass) (interno) devuelve una instancia para ver
los datos en el ndice
se ve a travs de los diferentes cachs y finalmente crea una vista si ste no existe.
Devuelve la vista est sincronizado con los datos, excepto para el tpv/informacin
de tamao.
Si se encuentra en el cach es retirado de la fuente antes de regresar. No verific
ar las opiniones actuales.
get_view_visible(index) devuelve la vista asociada withindex visibles actualment
e.
Si no hay ninguna vista se muestra actualmente forindex returnsNone ti.
invalidar() desplaza todas las opiniones actuales en la cach global.
En vez de hacer una vista sucio donde la vista es en sincronizacin con los datos
excepto para cambiar el tamao de la informacin, esta se desconecte completamente l
a vista de los datos, ya que se supone que los datos han salido de la sincroniza
cin con la vista.
Esto se denomina habitualmente cuando los datos cambian.
455
make_view_sucio(ver, ndice) (interna) que se utiliza para marcar esta vista como
sucia, listo para ser utilizado por otros. Vase make_views_dirty().
make_views_dirty() hace que todas las opiniones actuales sucio.
Vistas sucia todava estn en sincronizacin con los datos correspondientes. Sin embar
go, la informacin de tamao puede ir fuera de sincronizacin. Por lo tanto una sucia
vista puede ser reutilizado por el mismo ndice simplemente actualizando la inform
acin de tamao.
Una vez que los datos subyacentes de este ndice cambia, la vista debe ser quitado
de la sucia opiniones y se traslad a la cach global withinvalidate().
Esto se denomina habitualmente cuando el gestor de diseo necesita redistribuir to
dos los datos.
recycleview TheRecycleViewBehavior asociado con esta instancia.
refresh_view_attrs(Index, Data_item, ver) (Interno) Se sincroniza la vista y lo
actualiza con los datos.
Este mtodo llama RecycleDataViewBehavior.refresh_view_attrs() si la vista hereda
fromRecycleDataViewBehavior. Ver ese mtodo para obtener ms detalles.
Nota: cualquier tamao y posicin info se omite al sincronizar con los datos.
refresh_view_layout(index, pos, pos_HINT, tamao, tamao_HINT, vista la vista) actua
el widget de acorden es un tipo de men donde las opciones se apilan vertical u hor
izontalmente y el elemento en foco (al tacto) se abre para mostrar su contenido.
Debe contener uno o TheAccordion manyAccordionItem instancias, cada una de las c
uales debe contener un widget contenido raz. Usted terminar con un rbol algo como e
sto:
acorden
- AccordionItem
sucontenido
- AccordionItem
BoxLayout
otro contenido de Usuario 1
otro contenido de usuario 2
- AccordionItem
otro contenido de usuario
theAccordionItem La implementacin actual se divide en dos partes:
1. Un contenedor para la barra de ttulo 2. Un contenedor para el contenido de
la barra de ttulo se realiza a partir de una plantilla de kv. Vamos a ver cmo crea
r una nueva plantilla para personalizar el diseo de la barra de ttulo.
Advertencia: Si usted ve mensajes como:
[Advertencia] [Acorden] no tienen suficiente espacio para mostrar todos los nios [
Advertencia] [Acorden] necesidad 440px, tiene 100px [Advertencia] [Diseo] Acorden a
nulada.
Esto significa que hay demasiados nios y no hay ms espacio para mostrar el conteni
do. Esto es "normal" y no se puede hacer nada. Pruebe a aumentar el espacio para
el acorden o reducir el nmero de nios. Usted tambin puede reducir theAccordion.min_
space.
36.5.1 Ejemplo sencillo
de kivy.uix.acorden acorden, importacin de kivy AccordionItem.uix.label etiqueta de
importacin de kivy.app App
459
36.9 Bubble
nuevo en la versin 1.1.0.
El widget de burbujas es un tipo de men o una pequea ventana emergente donde el me
n Opciones se apilan vertical u horizontalmente.
TheBubble contiene una flecha apuntando en la direccin que usted elija.
36.9.1 Ejemplo simple
burbuja
=========
Prueba de widget de la burbuja.
de kivy.app App de importacin.floatlayout kivy.uix FloatLayout importacin de kivy.
uix.Button Botn Importar de kivy.lang importar Builder de kivy.uix.BUBBLE BUBBLE
importacin
Builder.load_string(
<cut_copy_paste>Tamao_HINT: (Ninguno, Ninguno) Tamao: (160
, 120), pos_HINT: { centro_x : .5, y : .6} BubbleButton:
texto: Cortar BubbleButton:
texto: Copiar BubbleButton:
texto: Pegar
)
clase cut_copy_paste(Bubble):
Pase
clase(FloatLayout BubbleShowcase):
def __init__(self,
kwargs):
super(BubbleShowcase, auto).__init__( kwargs) self.Pero_bubble = Botn(text= Pulse pa
ra mostrar bubble ) self.Pero_bubble.bind(on_release=self.show_bubble) self.add_
widget(self.Pero_bubble)
def show_bubble(self, l):
si no hasattr(self, bubb ):
self.bubb = bubb = cut_copy_Paste()
470
self.add_widget(bubb) else:
Len(valores)] % valores = ( left_top , Left_mid , Left_inferior , top_left ,
top_mid , top_right , Right_top , Right_mid , Right_inferior , inferior_le
ft , abajo , _mid_inferior derecha ) ndice = Valores.index(self.bubb.arrow_pos)
self.bubb.arrow_pos = Valores[(index + 1)
clase TestBubbleApp(App):
def construir(self):
retorno BubbleShowcase()
si __name__ == "__main__ :
TestBubbleApp().run()
36.9.2 Personalizar la burbuja
puede elegir la direccin en la que la flecha apunta:
Burbuja(flecha_pos= top_mid )
Los widgets aadido a la burbuja se ordenan horizontalmente por defecto, como un B
oxlayout. Puedes cambiar eso:
Orientacin = vertical
para agregar elementos a la burbuja:
burbuja burbuja =(orientacin = vertical) burbuja_widget.add(su_widget_instance)
para quitar elementos:
burbuja.remove_widget(widget) o una burbuja.clear_widgets()
para acceder a la lista de nios, utilizar contenido.Nios:
burbuja.content.nios
Advertencia: Esto es importante! No use bubble.Los nios
para cambiar la apariencia de la burbuja:
burbuja.background_color = (1, 0, 0, .5) #50% burbuja roja transparente.border =
[0, 0, 0, 0] fondo_image = ruta/a/fondo/imagen" arrow_image = ruta/a/flecha/i
magen
.burbuja classkivy.uix.Bubble( kwargs) Bases: kivy.uix.gridlayout GridLayout
. Clase de burbuja. Consulte la documentacin del mdulo para obtener ms informacin.
471
36.10 Button
Botn es una etiqueta asociada a las acciones que se desencadenan cuando se pulsa
el botn (o re- alquilado despus de un clic/tacto). Para configurar el botn, las mis
mas propiedades (padding, font_size, etc) y se utilizan como sistema de dimensio
namiento para theLabel clase:
botn = Botn(text= Hola mundo , font_size=14)
para conectar una devolucin de llamada cuando se pulsa el botn (pulsado/tocado), u
sebind:
def callback(ejemplo):
ejemplo.text) % print( el botn <%s> Se pulsa el
botn btn1 =(text= Hola mundo 1 ) Btn1.bind(on_pulse=callback) Btn2 = Botn(text= H
ola mundo 2 ) Btn2.bind(on_pulse=callback)
si desea que se le notifique cada vez que cambia el estado del botn, puede enlaza
r el botn.propiedad del estado:
def callback(ejemplo, valor):
(ejemplo, valor)) = Botn Btn1(text= Hola mundo 1 ) Btn1.bind(state=callback) % pr
int( Mi botn <%s> estado es <%s">
classkivy.uix.button.Button( kwargs) Bases: kivy.uix.behaviors.button.ButtonBehavio
r,kivy.uix.label.Etiqueta
clase Button, consulte la documentacin del mdulo para obtener ms informacin.
Ha cambiado en la versin 1.8.0: El comportamiento / lgica del botn se ha movido a B
uttonBehaviors.
background_color, color de fondo, en el formato (r, g, b, a).
Esto acta como un multiplicador a la textura de color. La textura predeterminada
es gris, as que acaba de establecer- ting el color de fondo dar un resultado ms osc
uro. Para establecer un color liso, establecer el fondo_normal .
Nuevo en la versin 1.0.8.
Es aListProperty Thebackground_color y predeterminados a [1, 1, 1, 1].
background_disabled_abajo de la imagen de fondo del botn que se utiliza para la r
epresentacin grfica por defecto cuando el botn est deshabilitado y presionado.
Nuevo en la versin 1.8.0.
473
lexer Esto retiene el Lexer utilizada por pygments seleccionado para resaltar el
cdigo.
lexer es anObjectProperty y predeterminados a PythonLexer.
Estilo El estilo pygments objeto a utilizar para formatear.
Nombre_Whenstyle est configurado, este pasar a ser el estilo correspondiente objet
o.
Es de estilo y valores predeterminados aObjectProperty toNone style_name Nombre
del estilo pygments para aplicar formato.
style_name es anOptionProperty y predeterminados a default .
36,15
nuevo Selector de color en la versin 1.7.0.
Advertencia: este widget es experimental. Su uso y API puede cambiar en cualquie
r momento hasta que esta advertencia se elimina.
El widget de ColorPicker permite a un usuario seleccionar un color de la rueda c
romtica donde pellizcar y zoom puede utilizarse para cambiar la saturacin de la ru
eda. Los controles deslizantes y TextInputs estn previstas tambin para introducir
el RGBA/VHS/valores hexadecimales directamente.
Uso:
clr_picker = ColorPicker() parent.add_widget(clr_picker)
# Para supervisar los cambios, podemos enlazar a la propiedad color cambia de de
f_color(ejemplo, valor):
print "RGBA = ", Str(valor) # o instancia.Color print "HSV = ", Str(ejemplo.HSV)
imprimir "HEX = ", Str(ejemplo.hex_color)
clr_picker.bind(color=on_color)
481
.classkivy.uix.colorpicker ColorPicker(
sobre la base de la pantalla (el color del pxel actual, widget actual textura etc
.). Consulte las secciones siguientes para obtener ms informacin.
36.17.1 Las Directrices de uso
no es eficiente para redimensionar theFbo anEffectWidget, como es recreada en ca
da evento resize. Si necesita redimensionar con frecuencia, considere la posibil
idad de hacer las cosas de una manera diferente.
Aunque algunos efectos tienen parmetros ajustables, no resulta eficaz para animar
a stos, como la en- shader de neumticos se reconstruyen cada vez. Usted debe usar
glsl uniforme en lugar de variables. La AdvancedEffectBase puede facilitar esta
tarea.
Nota: El EffectWidget no dibujar fuera de su propia rea de widget (pos -> pos
+ size). Cualquier nio widgets superposicin de la frontera ser cortada en este punt
o.
36.17.2 efectos incluidos
el mdulo viene con varios efectos pre-escrita. Algunos tienen propiedades modific
ables (por ejemplo blur radius).
Consulte la documentacin de efectos individuales para obtener ms detalles.
er,
la clase base para GLSL efectos. Simplemente devuelve su entrada.
Consulte la documentacin del mdulo para obtener ms detalles.
fbo La fbo actualmente utilizando este efecto. TheEffectBase maneja automticament
e.
fbo es anObjectProperty y predeterminados a Ninguno.
glsl glsl la cadena que define su funcin EFFECT. Consulte la documentacin del mdulo
para obtener ms detalles.
glsl es aStringProperty y predeterminados a un efecto trivial que devuelve su en
trada.
set_fbo_shader( args) establece theFbo empalmando theglsl shader de cadena en un f
ragmento completo de shader.
487
488
Importacin Importacin os
clase(FloatLayout LoadDialog):
carga = ObjectProperty(Ninguno) Cancel = ObjectProperty(Ninguno)
clase SaveDialog(FloatLayout):
save = ObjectProperty(Ninguno) texto_input = ObjectProperty(Ninguno) Cancel = Ob
jectProperty(Ninguno)
clase root(FloatLayout):
= ObjectProperty loadfile(none) = ObjectProperty savefile(Ninguno) texto_input =
ObjectProperty(Ninguno)
def descartar_popup(self):
Auto._popup.Cerrar()
def show_load(self):
contenido = LoadDialog(load=auto.load, Cancel=self.descartar_POPUP). auto_popup
= Popup(title="Cargar archivo", content=contenido, tamao_HINT=(0.9, 0.9). auto_po
pup.open()
def show_save(self):
contenido = SaveDialog(save=auto.save, Cancel=self.descartar_POPUP). auto_popup
= Popup(title="Save file", content=contenido, tamao_HINT=(0.9, 0.9). auto_popup.o
pen()
def load(self, ruta, filename):
con open(os.path.join(Ruta, filename[0]) como stream:
self.text_input.Text = stream.read()
self.descartar_popup()
def guardar(self, ruta, filename):
con open(os.path.join(Ruta, filename), w ) como:
stream stream.write(self.text_input.text)
self.descartar_popup()
clase Editor(App):
pase la
fbrica.register( root , Cls=root) Factory.register( LoadDialog , Cls=LoadDialog)
Factory.register( SaveDialog , Cls=SaveDialog)
si __name__ == "__main__ :
Editor().run()
editor.KV
491
#:kivy 1.1.0
Root:
Texto: texto_input_input
BoxLayout:
Orientacin: Vertical BoxLayout:
tamao_y_HINT: Ninguna Altura: 30 Botn:
texto: Carga en_release: root.show_load():
Texto: botn Save on_release: root.show_save()
BoxLayout:
TextInput:
id: text_input texto:
RstDocument:
Texto: texto.text input_show_errores: True
<LoadDialog>:
BoxLayout:
Tamao: root.tamao pos: root.pos orientacin: "vertical":
id: FileChooserListView filechooser
BoxLayout:
multilnea: False
BoxLayout:
tamao_y_HINT: Ninguna Altura: 30 Botn:
texto: "Cancelar" en_release: root.Cancel()
:
Texto: el botn "Guardar" en_release: root.Save(filechooser.path, texto_input.text
)
nuevo en la versin 1.0.5.
Ha cambiado en la versin 1.2.0: En el selector plantilla, el controlador ya no es
una referencia directa, sino una referencia dbil. Si est actualizando, debe cambi
ar la notacin root.controller.xxx a root.controller().xxx.
classkivy.uix.filechooser.FileChooserListView( kwargs) Bases: kivy.uix.filechooser.
FileChooserController
Aplicacin de aFileChooserController utilizando una vista de lista.
Nuevo en la versin 1.9.0.
classkivy.uix.filechooser.FileChooserIconView( kwargs) Bases: kivy.uix.filechooser.
FileChooserController
Aplicacin de aFileChooserController utilizando una vista de icono.
Nuevo en la versin 1.9.0.
classkivy.uix.filechooser.FileChooserListLayout( kwargs) Bases: kivy.uix.filechoose
r.FileChooserLayout
selector de archivos de diseo utilizando una vista de lista.
Nuevo en la versin 1.9.0.
classkivy.uix.filechooser.FileChooserIconLayout( kwargs) Bases: kivy.uix.filechoose
r.FileChooserLayout
selector de archivos de diseo utilizando una vista de icono.
Nuevo en la versin 1.9.0.
classkivy.uix.filechooser.FileChooser( kwargs) Bases: kivy.uix.filechooser.FileChoo
serController
Ejecucin de un FileChooserController que admite la conmutacin entre mltiples, sincr
oniza las vistas de diseo.
FileChooser puede ser usado como sigue:
BoxLayout:
Orientacin: Vertical
BoxLayout:
tamao_y_HINT: Ninguna altura: sp(52)
Botn:
texto: icono on_pulse: fc.view_mode = icono
493
Botn:
texto: "Vista de lista" en_press: fc.view_mode = list
FileChooser:
id: fc FileChooserIconLayout FileChooserListLayout
nuevo en la versin 1.9.0.
Manager Referencia a instancia theScreenManager.
manager es anObjectProperty.
ver_List Lista de vistas agregadas a esta FileChooser.
ver_list es anAliasProperty de typelist.
ver_mode el modo de vista de diseo actual.
ver_mode es anAliasProperty de typestr.
classkivy.uix.filechooser.FileChooserController( kwargs) Bases: kivy.uix.relativela
yout.RelativeLayout
Base para implementar un FileChooser. No utilice esta clase directamente, pero p
refiere usar una apli- cacin como theFileChooser,FileChooserListView orFileChoose
rIconView.
Eventos en_entry_aadi: entrada, parentFired cuando una entrada de nivel raz se aade
a la lista de archivos.
En_entries_clearedFired cuando las entradas de la lista se borra, generalmente c
uando la raz se actualiza.
on_subentrada_para_entrada: entrada, parentFired cuando un sub-entrada se agrega
a un existir- ing entrada o cuando se eliminan entradas desde una entrada como,
por ejemplo, cuando un nodo est cerrado.
En_submit: seleccin, touchFired cuando un archivo ha sido seleccionada con un dob
le toque.
Cancel( largs) Cancelar cualquier fondo accin iniciada por filechooser, tales como
la carga de un nuevo directorio.
Nuevo en la versin 1.2.0.
dirselect determina si los directorios son las selecciones vlidas o no
es dirselect aBooleanProperty y el valor predeterminado es False.
Nuevo en la versin 1.1.0.
_entrada liberada(Entrada, toque) (interno) Este mtodo debe ser llamado por la pl
antilla cuando una entrada es tocado por el usuario.
Nuevo en la versin 1.1.0.
_entrada tocado(Entrada, toque) (interno) Este mtodo debe ser llamado por la plan
tilla cuando una entrada es tocado por el usuario.
archivo_codificaciones posibles codificaciones para decodificar un fichero a Uni
code. En el caso de que el usuario no tiene un494
clase de diseo de flotacin. Consulte la documentacin del mdulo para obtener ms inform
acin.
36.20 Superficie gesto
de tamao mnimo de reconocimiento (anchura/altura < 5, o con- slo sists nico punt
o strokes).
find_colisionando_GESTURE(touch) comprueba si un toque x/y choca con el cuadro d
elimitador de un gesto existente. Si es as, devolverlo (de lo contrario devuelve
ninguno)
get_GESTURE(touch) Devuelve GestureContainer asociados con el contacto dado
init_GESTURE(touch) Crear un nuevo gesto de tocar, es decir, es la primera en su
perficie, o no estaba lo suficientemente cerca para cualquier gesto existentes (
an)
merge_gestos(g, otros) combina dos gestos juntos, una de las ms antiguas se conse
rva y el ms reciente obtiene theGesture- Container.fue fusionada_flag planteadas.
En_TOUCH_down(touch) Cuando un nuevo toque est registrado, lo primero que hacemos
es probar si colisiona con el cuadro delimitador de otro conocido gesto. Si es
as, se supone que es parte de ese gesto.
on_TOUCH_move(touch) Cuando un toque se mueve, podemos aadir un punto a la lnea en
el lienzo de manera que el camino est actualizado. Tambin debemos comprobar si el
nuevo punto choca con el cuadro bouonding de otro gesto - si es as, deben ser fu
sionadas.
classkivy.uix.gesturesurface.GestureContainer(touch,
kwargs) Bases: kivy.event.Eve
ntDispatcher,
objeto contenedor que almacena informacin sobre un gesto. Tiene varias propiedade
s que son actualizados por GestureSurface como dibujo avanza.
Argumentos touchTouch objeto (como recibida por el_TOUCH_down) utilizado para in
icializar el gesto contenedor. Requerida.
Propiedades activeSet en False cuando el gesto es completa (conoce a max_stroke
ajuste o Ges- tureSurface._ventana temporal)
es activo aBooleanProperty
500
501
clase de diseo de cuadrcula. Consulte la documentacin del mdulo para obtener ms infor
macin.
col_default_width predeterminado mnimo tamao para una columna.
Nuevo en la versin 1.0.7.
col_default_width es aNumericProperty y predeterminados a 0.
col_force_default Si es True, ignorar el ancho y tamao_HINT_x del nio y use el anc
ho de columna predeterminado.
Nuevo en la versin 1.0.7.
col_force_default es aBooleanProperty y
cols. El valor predeterminado es False. Nmero de columnas de la cuadrcula.
Ha cambiado en la versin 1.0.8: Cambia de una a BoundedNumericProperty NumericPro
perty.
Ya no puede establecer un valor negativo.
cols es aNumericProperty y
cols. El valor predeterminado es 0._dict mnimo de anchura mnima para cada columna.
El diccionario claves son los nmeros de columna, por ejemplo
0, 1, 2...
Nuevo en la versin 1.0.7.
_cols aDictProperty es mnima y predeterminados a {}.
minimum_height calcula automticamente la altura mnima necesaria para contener a to
dos los nios.
Nuevo en la versin 1.0.8.
_height es aNumericProperty mnimo y el valor predeterminado es 0. Es de slo lectur
a.
tamao_mnimo calcula automticamente el tamao mnimo necesario para contener todos los n
ios.
Nuevo en la versin 1.0.8.
_size es mnimo (mnimo de aReferenceListProperty_width,MINIMUM_height) propiedades.
Es de slo lectura.
minimum_width calcula automticamente la anchura mnima necesaria para contener a to
dos los nios.
Nuevo en la versin 1.0.8.
_width es aNumericProperty mnimo y el valor predeterminado es 0. Es de slo lectura
.
504
.escape_markup():
texto = "Este es un mensaje importante [1] l = etiqueta(text="[b] + Esc_markup
(texto) + [/b] , la marca=True)
las etiquetas siguientes estn disponibles:
[b][/b] Activar negrita [i][/i] Activar cursiva [u][/u] texto subrayado [s][/s]
texto tachado
[font= <str>][/font] cambiar la fuente [size= <integer>][/size] Cambiar el tamao
de la fuente [color=# <color>][/COLOR] Cambia el color del texto
[ref= <str>][/ref] Aadir una zona interactiva. La referencia + cuadro delimitador
dentro de la referencia estar disponible inLabel.Refs [anchor= <str>] poner un a
nclaje en el texto. Usted puede obtener la posicin de su anclaje en el texto.anch
ors withLabel [SUB][/sub] muestra el texto en un subndice posicin relativa al text
o antes de ella.
[sup][/sup] mostrar el texto en superndice posicin relativa al texto antes de ella
.
Si desea procesar el texto de marcado con un [ o ] o carcter &, necesita esca
par de ellos. Hemos creado una sencilla sintaxis:
[-> &bl; ] -> &br; & -> &;
entonces usted puede escribir:
"[size=24]Hola &bl;Mundo&bt;[/size]"
36.23.4 zona interactiva en el texto
nuevo en la versin 1.1.0.
Ahora usted puede tener definibles "links" con texto marcado. La idea es ser cap
az de detectar cuando el usuario hace clic en parte del texto y a reaccionar. La
etiqueta[ref=xxx] se utiliza para eso.
En este ejemplo, estamos creando una referencia sobre la palabra "mundo". Cuando
esta palabra es pulsado, el functionprint_ser llamado con el nombre de la refere
ncia:
def print_(ejemplo, valor):
print( user , haga clic en el botn valor) widget = etiqueta(text= Hola [ref=mundo
]Mundo[/ref] , la marca=True) widget.bind(on_REF_pulse=print_it)
para bonita representacin, puede agregar un color de referencia. Reemplace el tex
to= en el ejemplo anterior con:
510
Hola [ref=mundo][color=0000ff]Mundo[/COLOR][/ref]
36.23.5 Catering para idiomas Unicode
la fuente kivy utiliza no contiene todos los caracteres necesarios para la visua
lizacin de todos los idiomas. Cuando utilice el built-in widgets, esto se traduce
en un bloque se dibuja donde te espera un carcter.
Si desea mostrar estos caracteres, usted puede escoger una fuente que les apoya
e implementarla universalmente a travs de kv:
<Label>:
-font_name: / <path>/ <to>/<font>
Tenga en cuenta que esto debe hacerse antes de tus widgets se cargan como kv nor
mas slo se aplican en el momento de la carga.
36.23.6 Ejemplo de uso en
el siguiente ejemplo se marcan los anclajes y referencias contenidas en una etiq
ueta:
de kivy.app App importacin de kivy.uix.label etiqueta de importacin de kivy.reloj
reloj de importacin de kivy.Importacin de grficos de color,
clase Rectangle TestApp(App):
@staticmethod def get_x(ETIQUETA, REF_x):
0,5 + ref_x
""" devolver el valor x de la ref/anchor en relacin al lienzo """ la
etiqueta de devolucin.centro_x - etiqueta.textura_size[0]
@staticmethod def get_y_ref, etiqueta(s):
0.5 - ref_y """ el valor y retorno de la ref/anchor en relacin al lienzo """ # no
disabled_outline_color El color del contorno del texto cuando el widget est desac
tivada, en la (r, g, b) el formato.
Nota: Esta caracterstica requiere SDL2 proveedor de texto.
Nuevo en la versin 1.9.2.
disabled_outline_color es aListProperty y predeterminados a [0, 0, 0].
font_blended si combina o procesamiento de fuentes slidas deben utilizarse.
Nota: Esta caracterstica requiere SDL2 proveedor de texto.
Nuevo en la versin 1.9.2.
fuente_blended es aBooleanProperty y su valor predeterminado es True.
font_insinuando lo insinuando opcin para utilizar para procesamiento de fuentes.
Puede ser normal , light , mono o Ninguno.
Nota: Esta caracterstica requiere SDL2 proveedor de texto.
Nuevo en la versin 1.9.2.
fuente_insinuando es anOptionProperty y predeterminados a normal .
font_kerning si el kerning est habilitada para procesamiento de fuentes.
Nota: Esta caracterstica requiere SDL2 proveedor de texto.
Nuevo en la versin 1.9.2.
fuente_kerning es aBooleanProperty y su valor predeterminado es True.
font_name Nombre de la fuente que se va a utilizar. La ruta puede ser absoluta o
relativa. Las rutas relativas son resueltas por theresource_find().
Advertencia: Dependiendo de su proveedor de texto, el archivo de fuente puede se
r ignorada. Sin embargo, usted puede utilizar esta mayormente sin problemas.
Si la fuente que se utiliza carece de los pictogramas de la lengua particular/smb
olos que estn utilizando, ver [] cuadro en blanco en lugar de los caracteres rea
les de glifos. La solucin es usar una fuente
que tiene los glifos que necesita para mostrar. Por ejemplo, para mostrar , util
ice una fuente como freesans.ttf que tiene el glifo.
nombre_font es aStringProperty y predeterminados a "Roboto".
513
Nota: Esto slo funciona con texto de marcado. Usted needmarkup establecida en Tru
e.
acortar indica si la etiqueta debe intentar acortar su contenido textual en la m
edida de lo posible si atext_size es dada. Al definir este valor como True sin u
n adecuado tamao_settext conducir a resultados inesperados.
36.25.1 Introduccin
listas son partes centrales de muchos proyectos de software. El enfoque de Kivy
listas incluye soluciones para las listas simples, junto con un importante marco
para la construccin de listas de moderada a avanzada com- tipo de impresin. Para
un usuario nuevo, puede ser difcil de ramp up, desde simples hasta avanzados. Por
esta razn, Kivy proporciona un amplio conjunto de ejemplos (con el paquete Kivy)
que es posible que desee ejecutar en primer lugar, para obtener un sabor de la
gama de funcionalidades ofrecidas. Usted puede decirle a partir de los nombres d
e los ejemplos que ilustran el "subir" de lo simple a lo avanzado:
kivy/examples/widgets/lists/lista_simple.py
kivy/examples/widgets/lists/lista_simple_en_kv.py kivy/examples/widgets/lists/li
sta_simple_en_kv_2.py kivy/examples/widgets/lists/lista_master_detail.py
kivy/examples/widgets/lists/lista_DOS_up.py
kivy/examples/widgets/lists/lista_kv.py
kivy/examples/widgets/lists/lista_composite.py kivy/examples/widgets/lists/lista
_reset_data.py kivy/examples/widgets/lists/lista_cascade.py
kivy/examples/widgets/lists/lista_cascade_dict.py
kivy/examples/widgets/lists/lista_cascade_images.py
kivy/examples/widgets/lists/lista_ops.py
muchos de los ejemplos de seleccin de funcin, algunos restringir la seleccin a la s
eleccin individual, donde slo un elemento a la vez puede ser seleccionado y otros,
permitiendo la seleccin de varios elementos. Muchos de los ejemplos ilustran cmo
la seleccin en una lista puede ser conectado a las acciones y selecciones en otra
opinin u otra lista.
Encontrar su propia manera de leer la documentacin aqu, examinar el cdigo fuente de
las aplicaciones de ejemplo y ejecutar los ejemplos. Algunos prefieren leer la
documentacin a travs de la primera, otros pueden querer ejecutar los ejemplos y ve
r su cdigo. No importa lo que hagas, yendo y viniendo probablemente ser necesaria.
36.25.2 Ejemplo bsico
en su forma ms simple, hacemos un listview con 100 elementos:
de kivy.uix.listview importacin de kivy ListView.base importar
clase runTouchApp MainView(ListView):
def __init__(self,
kwargs):
super(MainView, auto).__init__( item_strings=[str(index) para el ndice en Range(1
00)])
si __name__ == "__main__ :
runTouchApp(MainView())
o podemos declarar el listview utilizando el idioma: KV
520
vy.adaptadores.simplelistadapter
<MyListView>:
:
adaptador ListView:
sla.SimpleListAdapter( datos=["Item #{0}".Format(i) for i in range(100)],
521
Cls=label.Label) """)
clase MyListView(BoxLayout):
pass
si __name__ == "__main__ :
runTouchApp(MyListView())
y DictAdapter ListAdapter 36.25.4
Para la mayora de los casos de uso, los datos es ms compleja que una simple lista
de cadenas. Funcionalidad de seleccin tambin es a menudo necesario. TheListAdapter
andDictAdapter cubrir estas necesidades ms complejas.
Es la clase base TheListAdapter forDictAdapter, as que podemos empezar con ella.
Consulte theListAdapter docs para obtener ms detalles, pero aqu es una sinopsis de
sus argumentos:
Datos: cadenas, las instancias de clase, dicts, etc. que forman la base de datos
para crear instancias de opiniones.
Kivy cls: una opinin de que hay que crear instancias para cada elemento de la lis
ta. Hay varios tipos integrados disponibles, incluyendo ListItemLabel y ListItem
Button, o usted puede hacer su propia clase que mezcla la requiredSelectableView
.
plantilla: el nombre de un lenguaje de Kivy (KV) la plantilla que define la vist
a Kivy para cada elemento de la lista.
Nota: Elegir slo uno, cls o plantilla, para ofrecer como un argumento.
_args convertidores: una funcin que toma un objeto de elemento de datos como entra
da y lo utiliza para construir y devolver un dict args, listo para ser utilizado
en una llamada para crear instancias de punto de vista usando el elemento Ver c
ls o plantilla. En el caso de CLS, los argumentos de constructor kwargs dict se
convierte en un argumento. Para una plantilla, es tratada como un contexto (ctx)
pero es esencialmente similar en forma al uso kwargs.
seleccin_mode: una cadena con el valor single , multiple u otros.
Permitir_empty_selection: Un valor booleano que, si es False (predeterminado), f
uerzas all para ser siempre una seleccin si hay datos disponibles. Si es True, la
seleccin slo ocurre como resultado de una accin del usuario.
En narrativa, podemos resumir como sigue:
un listview s adaptador toma elementos de datos y utiliza una funcin del converti
dor_args para transformarlas en argumentos para crear elemento de lista Ver inst
ancias, ya sea mediante un cls o una plantilla de kv.
En un grfico, un resumen de la relacin entre un listview y sus componentes pueden
resumirse de la siguiente manera:
522
DataItem clase(object):
524
Un convertidor de 525_args debe ser construida que va junto con una plantilla de
kv. Por ejemplo, para utilizar la plantilla de kv arriba:
list_item_args_Convertidor = \ lambda row_index, rec: { texto : rec[ texto ], e
s_selected": rec[ is_selected ], tamao_y_HINT : Ninguno, la altura : 25} entero
s_dict = \ { str(i): { texto : Str(i), es_selected : False} for i in range(100)
}
dict_adapter = DictAdapter(SORTED_keys=[str(i) for i in range(100)], data=entero
s_dict, args_converter=list_item_args_converter, plantilla= CustomListItem )
lista_view =(adaptador ListView=dict_adapter)
un adaptador dict se crea con 1..100 como cadenas de enteros ordenados_keys, ent
eros y un_dict como datos. inte- gers_dict tiene el entero cadenas como claves y
dicts con texto y es_propiedades seleccionadas. La CustomLis- tItem definida an
los tres primeros elementos, texto, tamao_HINT_y y la altura, son argumentos para
el propio CompositeListItem. Despus de que usted vea un cls_dicts lista que cont
iene argumento se establece para cada uno de los Estados widgets para este compo
s- ite: 2 y un ListItemLabel ListItemButtons. Este es un enfoque similar a utili
zar una plantilla de kv descritos anteriormente.
Para obtener detalles sobre cmo funciona CompositeListItem, examinar el cdigo, bus
cando cmo analizar los cls_kwargs dicts lista y el procesamiento se realiza.
36.25.10 utiliza para la seleccin
Qu hacemos con la seleccin? Combinar la seleccin con el sistema de enlaces de Kivy,
podemos construir una amplia gama de diseos de interfaz de usuario.
Podramos hacer que los elementos de datos que contienen los nombres de razas de p
erro, y conecte la seleccin de la raza del perro a la visualizacin de detalles en
otro punto de vista, que se actualizar automticamente en la seleccin. Esto se reali
za a travs de un enlace a elen_selection_evento change:
lista_Adapter.bind(en_change_selection=callback_function)
donde callback_function() se pasa como argumento el adaptador y hace lo que sea
necesario para la actualizacin. Vea el ejemplo denominado lista_master_detail.py,
y me imagino que la lista de la izquierda puede ser una lista de razas de perro
, y el detalle de la vista de la derecha puede mostrar detalles de un perro de r
aza seleccionada.
En otro ejemplo, podramos definir la seleccin_mode de un listview a multiple , y
cargar con una lista de respuestas a una pregunta de opcin mltiple. La cuestin podra
tener varias respuestas correctas. Un muestrario de colores vista podra estar en
lazado a cambio de seleccin, como en el caso anterior, de modo que se vuelve verd
e tan pronto como se hacen las opciones correctas, a menos que el nmero de pulsac
iones sobrepasa un lmite, entonces la respuesta de sesiones podra terminarse.
Vea los ejemplos que ofrecen imgenes en miniatura para obtener algunas ideas, por
ejemplo, lista_cascade_dict.py.
En un ejemplo ms involucrados, podramos encadenar tres listviews, donde la seleccin
en la primera controla los elementos que aparecen en el segundo y la seleccin en
frontera el ancho del borde alrededor de la pgina actual se utiliza para mostrar
la pgina anterior/siguiente swipe reas cuando sea necesario.
Es la frontera aNumericProperty y predeterminados a 50dp.
pgina La pgina mostrada actualmente.
pgina es aNumericProperty y predeterminados a 0.
swipe_Umbral El thresold utilizados para provocar deslizamientos como porcentaje
del tamao del widget.
swipe_threshold es aNumericProperty y predeterminados a .5.
36.28 Popup
nuevo en la versin 1.0.7.
ThePopup widget es utilizado para crear los elementos emergentes. Por defecto, l
a ventana emergente se cubren la totalidad de la ventana "padre". Cuando se crea
un popup, debe al menos establecer aPopup.title andPopup.contenido.
Recuerde que el tamao predeterminado del tamao de un widget_HINT=(1, 1). Si no des
ea que el popup a pantalla completa, o bien utilizar el tamao sugerencias con val
ores inferiores a 1 (por ejemplo size_HINT=(.8, .8) o desactivar el tamao_hint y
utilizar atributos de tamao fijo.
Ha cambiado en la versin 1.4.0: clase hereda fromModalView ThePopup ahora. ThePop
up ofrece un diseo predeterminado con un ttulo y una barra de separacin.
36.28.1 Ejemplos
Ejemplo de un simple 400x400 Hello world:
popup popup = Popup(title= prueba emergente, contenido=Label(text= Hola mundo )
, tamao_HINT=(Ninguno, Ninguno), size=(400, 400)
532
transformaciones de coordenadas
Widget proporciona 4 funciones para transformar coordenadas entre los distintos
sistemas de coordenadas.
Por ahora, suponemos que la palabra clave relativa de estas funciones es falso.
A_widget() toma las coordenadas expresadas en las coordenadas de la ventana y lo
s devuelve en local (widget) coordenadas.
A_window() toma las coordenadas expresadas en coordenadas locales y los devuelve
en la ventana co-ordinate. A_parent() toma las coordenadas expresadas en coorde
nadas locales y los devuelve en las coordenadas principales. A_local() toma las
coordenadas expresadas en coordenadas primarias y los devuelve en coordenadas lo
cales.
Cada una de las 4 funciones de transformacin toma un parmetro relativo. Cuando el
parmetro relativo es True, las coordenadas se devuelven o se originan en verdader
as coordenadas relativas - relativo a un sistema de coordenadas con sus (0, 0) e
n la esquina inferior izquierda del widget en cuestin.
36.33.2 escollos comunes
como todas las posiciones dentro de aRelativeLayout son relativos a la posicin de
la presentacin en s, la posicin del diseo nunca debe ser usado para determinar la p
osicin de la sub-widgets o el diseo slienzo.
Tome el siguiente cdigo kv por ejemplo:
Fig. 36.1: resultado esperado
FloatLayout:
Widget:
size_HINT: Ninguno, Ninguno Tamao: 200, 200 pos: 200, 200
canvas:
Color:
rgba: 1, 1, 1, 1 Rectngulo:
pos: self.pos tamao: self.Tamao
:
538 RelativeLayout
ultitouch usando dos o ms dedos). Esto fue hecho para que la aplicacin se podra
539
optimizado y evitar la dispersin de los clculos ms pesados (por ejemplo, matriz inv
ersa, recaculating varias propiedades etc.)
.relativelayout classkivy.uix.RelativeLayout( kw) Bases: kivy.uix.floatlayout.Float
Layout
RelativeLayout clase, consulte la documentacin del mdulo para obtener ms informacin.
36.34 renderer reStructuredText
nuevo en la versin 1.1.0.
reStructuredText es fcil de leer, lo que se ve es lo que se obtiene de la sintaxi
s de marcado de texto simple y sistema del analizador.
Advertencia: este widget es altamente experimental. Todo el diseo y ejecucin no so
n estables hasta que esta advertencia se ha eliminado.
36.34.1 Uso con texto
texto = """ .. _top:
Hola mundo ==============
Este es un texto emphased
, algunos texto interpretado .
Y esta es una referencia al comienzo_::
$ print("Hello world")
""" el documento = RstDocument(text=texto)
la representacin dar salida:
36.34.2 Uso con fuente
tambin puede procesar un archivo utilizando theRstDocument rst.Fuente:
documento de propiedad = RstDocument(fuente= index.rst")
540
36.35 Sandbox
nuevo en la versin 1.8.0.
Advertencia: Esto es experimental y sujetos a cambios mientras este aviso est pre
sente.
Este es un widget que se ejecuta por s mismo y todos sus hijos en un Sandbox. Est
o significa que si un nio plantea una excepcin, ser capturado. El sandbox se ejecut
a su propio reloj, cache, etc.
El widget de SandBox es an experimental y requerido para el diseador de Kivy. Cuan
do el usuario disea su propio widget, si hacen algo malo (valor de tamao incorrect
o, no vlido El cdigo Python), ser capturado correctamente sin romper toda la aplica
cin. Porque ha sido diseado de esa manera, seguimos mejorando este widget y el kiv
y.contexto mdulo. No utilizarla a menos que sepa lo que est haciendo.
classkivy.uix.sandbox.Sandbox( kwargs) Bases: kivy.uix.floatlayout.FloatLayout
widget Sandbox, utilizado para atrapar todas las excepciones planteadas por nio w
idgets.
on_context_creado() invalidar este mtodo para cargar su archivo de kv ni hacer na
da con el contexto recin creado.
on_exception(excepcin, _rastreo=None) invalidar este mtodo para capturar todas las
excepciones de los nios.
Si devuelve True, no reraise la excepcin. Si devuelve False, la excepcin ser elevad
o a los padres.
En_TOUCH_down(touch) reciben un toque evento.
Contacto: MotionEvent classTouch parmetros recibidos. El toque est en su coordi- p
adre coordenadas. Seerelativelayout para una discusin sobre los sistemas de coord
enadas.
Returnsbool. Si es True, el envo del evento tctil se detendr. Si es False, el event
o continuar a ser expedidos al resto del widget de rbol.
En_TOUCH_move(touch) reciben un toque evento move. El toque est en las coordenada
s principales.
Seeon_TOUCH_down() para ms informacin.
on_TOUCH_up(touch) recibe un toque de evento. El toque est en las coordenadas pri
ncipales.
Seeon_TOUCH_down() para ms informacin.
36.36 Scatter
Scatter se utiliza para crear widgets interactivos que se pueden traducir, rotar
y escalar con dos o ms dedos sobre un sistema multitouch.
Dispersin tiene su propia transformacin de matriz: la matriz modelview es cambiado
antes de que los nios se dibujan y la matriz anterior se restaura cuando el dibu
jo est acabado. Que permite realizar la rotacin, el escalado y la traduccin a lo la
rgo de todo el rbol de los nios sin cambiar cualquier widget propiedades. Comporta
miento especfico que hace que la dispersin nica, pero hay algunas ventajas / limita
ciones que usted debe considerar:
543
1. Los nios son colocados con relacin a la dispersin de forma similar a un Relative
Layout. As que cuando arrastra la dispersin, la posicin de los nios no cambian, slo l
a posicin de los smbolos de Scatter.
2. El tamao de la dispersin no tiene ningn impacto en el tamao de sus hijos.
3. Si desea cambiar el tamao de la dispersin, utilice la escala, no el tamao (leer
#2). Transformaciones de escala tanto a la dispersin y a sus hijos, pero no cambi
a de tamao.
4. La dispersin no es un diseo. Debe administrar el tamao de los nios usted mismo.
Para eventos tctiles, la dispersin de la matriz matriz convierte a la matriz de di
spersin automticamente en on_TOUCH_down/mover/eventos. Si usted est haciendo las co
sas de forma manual, tendr que utilizar a_parent() ypara_local().
36.36.1 Uso
Por defecto, la dispersin no tiene una representacin grfica: es slo un contenedor. L
a idea es combinar la dispersin con otro widget, por ejemplo anImage:
dispersin dispersin =() = Imagen Imagen(source= sol.jpg ) scatter.add_widget(image
n)
36.36.2 para controlar las interacciones
de forma predeterminada, todas las interacciones estn habilitados. Puede deshabil
itar selectivamente mediante la rotacin, do_do_traduccin y do_propiedades de escal
a.
Deshabilitar la rotacin:
= Scatter Scatter(do_rotation=false)
slo permiten la traduccin:
Nota: Esta matriz refleja el estado actual de la matriz de transformacin pero dejn
dolo di- rectamente borrar las transformaciones aplicadas anteriormente. Para apl
icar una transformacin considerando el contexto, por favor utilice theapply_mtodo
transform.
transform_inv inversa de la matriz de transformacin.
transform_inv se anObjectProperty y predeterminados a la matriz de identidad. La
traduccin_toca determinar si la traduccin fue desencadenada por un nico o varios to
ques. Esto slo tiene efecto whendo = True._Translation
_toques es aNumericProperty traduccin y el valor predeterminado es 1.
Nuevo en la versin 1.7.0.
classkivy.uix.dispersin.ScatterPlane( kwargs) Bases: kivy.uix.dispersin.
Esta dispersin es esencialmente un widget de dispersin ilimitada. Es una clase de
conveniencia para que sea ms fcil manejar infinitos planos.
36,37 Presentacin de dispersin
nuevo en la versin 1.6.0.
Este diseo se comporta como un RelativeLayout. Cuando se agrega un widget con pos
icin = (0,0) a un widget ScatterLayout, el nio tambin se mover cuando se cambia la p
osicin del ScatterLayout. El nio del widget permanecen las coordenadas (0,0), ya q
ue son relativos a los padres sentar fuera.
Sin embargo, desde ScatterLayout se aplica mediante un widget de dispersin, tambin
puede trasladar, rotar y escalar el diseo mediante toques o clics, al igual que
en el caso de una distribucin normal, y el nio widget widgets se comportar como se
espera.
En contraste con una dispersin, el diseo favorece la "sugerencia" de propiedades,
<SettingScreen>:
BoxLayout:
Botn:
texto: Mi configuracin Botn Botn:
texto: Back to Menu en_press:
root.Manager.transition.direccin = Right root.Manager.Corriente = Menu """)
36.38.3 Uso avanzado
de 1.8.0, ahora puede cambiar dinmicamente a una nueva pantalla, cambiar las opci
ones de transicin y retirar la anterior por usingswitch_to():
sm = ScreenManager() = [Pantalla pantallas(name= ttulo {} .Format(i)) for i in Ra
nge(4)]
sm.Switch_A(pantallas[0]) # posteriormente sm.Switch_A(pantallas[1], direccin= ri
ght )
Tenga en cuenta que este mtodo agrega la pantalla a instancia theScreenManager y
no debe utilizarse si las pantallas ya se han agregado a esta instancia. Para ca
mbiar a una pantalla que ya est agregado, debe usar la propiedad actuales.
36.38.4 Cambiar las transiciones
que tiene varias transiciones disponibles por defecto, tales como:
SM.add_widget(Screen(name= Segundo ))
# por defecto, la primera pantalla aadida ser mostrado. Si desea mostrar # otro, e
stablezca la propiedad actual .
sm.Corriente = segundo
es de transicin y predeterminados a aSlideTransition anObjectProperty.
Ha cambiado en la versin 1.8.0: Transicin predeterminada ha cambiado a SlideTransi
tion fromSwapTransition.
exceptionkivy.uix.screenmanager.ScreenManagerException Bases: Excepcin
clase de transicin que utiliza un sombreado para animar la transicin entre 2 panta
llas. De forma predeterminada, esta clase no asignar cualquier fragmento/Vertex
Shader. Si desea crear su propio fragmento shader para la transicin, necesita dec
larar el cabezal a s mismo e incluir la "t", "tex_EN" y "tex_out" uniforme:
# Crear su propia transicin. Este shader implementa un "Fading" # transicin.
muestreador uniforme2D tex_en; uniforme sampler2D tex_out; ;t fs = """$encabezad
o flotacin uniforme
void main(void) { vec4 cin = Texture2D(tex_en, tex_coord0); vec4 cout = Texture2
D(tex_out, tex_coord0); gl_FragColor = mezcla(cout, cin, t); } """
# y crear su transicin tr = ShaderTransition(fs=fs) SM = ScreenManager(transicin=t
r)
Establece el color de clearcolor ClearColor Fbo.
Nuevo en la versin 1.9.0.
Se aListProperty clearcolor y predeterminados a [0, 0, 0, 1].
fs Fragment shader para utilizar.
fs es aStringProperty y predeterminados a Ninguno.
vs Vertex Shader para utilizar.
vs aStringProperty y predeterminados a Ninguno.
classkivy.uix.screenmanager.SlideTransition Bases: kivy.uix.screenmanager.Transi
tionBase
transicin de diapositivas, puede utilizarse para mostrar una nueva pantalla desde
cualquier direccin: izquierda, derecha, arriba o abajo.
nfiguracin:
[widgets] scroll_timeout = 250 scroll_distancia = 20 de
nuevo en la versin 1.1.1: ahora ScrollView anima el desplazamiento en Y cuando se
utiliza un mousewheel.
555
Este mdulo proporciona una completa y marco extensible para aadir una interfaz de
configuracin para su ap licacin. De forma predeterminada, la interfaz utiliza aSet
tingsWithSpinner, que consta de aSpinner (arriba) para cambiar entre paneles de
ajustes individuales (abajo). Ver distintos diseos de panel para algunas alternat
ivas.
Un SettingsPanel representa un grupo de opciones configurables. TheSettingsPanel
.title prop- pobreza es utilizada por ajustes cuando se aade un panel: determina
el nombre del botn de la barra lateral. Set- tingsPanel aConfigParser controles d
e instancia.
El panel puede ser calculado automticamente a partir de un archivo de definicin de
JSON: usted describe la configuracin que desee y las correspondientes secciones
y claves en la instancia ConfigParser... y listo!
Ajustes tambin estn integrados en la clase theApp. UseSettings.add_kivy_panel() pa
ra configurar el ncleo Kivy ajustes en un panel.
36.40.1 crea un panel de JSON
para crear un panel de un archivo JSON, necesita dos cosas:
instancia aConfigParser con valores predeterminados
un archivo JSON
Advertencia: El kivy.config.ConfigParser es obligatorio. No puede utilizar la co
nfiguracin predeterminada- Parser desde bibliotecas de Python.
Debe crear y manejar theConfigParser objeto. SettingsPanel leer los valores de la
instancia ConfigParser asociado. Asegrese de que ha configurado los valores pred
eterminados (usingsetdefaults) para todas
acin.
Ver use_kivy_settings() para obtener informacin sobre la activacin/desactivacin aut
omtica panel kivy.
crear_JSON_panel(title, config, filename=none, data=None) Crear newSettingsPanel
.
Nuevo en la versin 1.5.0.
Verificar la documentacin ofadd_JSON_panel() para ms informacin.
interface (interno) Referencia al widget que va a contener, organizar y mostrar
el panel configu- racin de widgets del panel.
interfaz es anObjectProperty y predeterminados a Ninguno.
562
ario utilizarlo.
563
SettingBoolean(..., valores=[ no , s ])
Advertencia: Se necesita un mnimo de dos valores, el ndice 0 se utilizar como False
y el ndice 1 como verdaderos
valores es aListProperty y predeterminados a [ 0 , 1 ]
classkivy.uix.settings.SettingNumeric( kwargs) Bases: kivy.uix.settings.SettingStri
ng
Aplicacin de un valor numrico en la parte superior de aSettingString. Se visualiza
con aLabel como widget que, cuando se hace clic en l, se abrir con aTextinput aPo
pup as el usuario puede introducir un valor personalizado.
classkivy.uix.settings.SettingOptions( kwargs) Bases: kivy.uix.settings.SettingItem
classkivy.uix.settings.InterfaceWithSidebar( args,
kwargs) Bases: kivy.uix.boxlayout
BoxLayout.
La configuracin predeterminada de la clase de interfaz. Se muestra un men de la ba
rra lateral con los nombres de los paneles de configuracin disponibles, que puede
n ser utilizados para cambiar lo que se muestra actualmente.
Vea Agregar_panel() para obtener informacin sobre el mtodo que debe implementar si
crea su propia interfaz.
Esta clase tambin distribuye un evento on_close , que se activa cuando el botn Ce
rrar del men de la barra lateral es liberado. Si est creando su propia interfaz wi
dget, tambin debe enviar un evento que ser automticamente capturados bySettings y u
tilizarse para desencadenar su propia on_close .
add Event_PANEL (panel, nombre uid) Este mtodo es utilizado por los ajustes para
aadir nuevos paneles de visualizacin posible. Cualquier sustitucin de ContentPanel
debe implementar este mtodo.
Parmetros panel - Un SettingsPanel. Debe ser almacenado y la interfaz debe proporc
ionar una forma de cambiar entre paneles.
Nombre: El nombre del grupo como una cadena. Puede ser utilizado para representar
el panel pero no es necesariamente nico.
- Un nico uid int identificando el grupo. Debe utilizarse para identificar y cambi
ar entre los paneles de
contenido (interno) una referencia a la visualizacin del panel Widget (aContentPa
nel). El
contenido es anObjectProperty y predeterminados a Ninguno.
valor_normalizado es anAliasProperty.
valor_pos posicin del cursor interno, basado en el valor normalizado.
valor_pos es anAliasProperty.
36,4 Spinner
nuevo en la versin 1.4.0.
Spinner es un widget que proporciona una manera rpida de seleccionar un valor de
un conjunto. En el estado predeterminado, una tejedora demuestra su valor selecc
ionado actualmente. Tocar el spinner muestra un men desplegable con todos los otr
os valores disponibles a partir de la cual el usuario puede seleccionar una nuev
a.
Ejemplo:
de kivy.base de importacin de kivy runTouchApp.uix.spinner importar Spinner
spinner Spinner =( # valor predeterminado se muestra texto= Home , disponible #
valores valores=( Home , Trabajo , Otro , Custom ) # slo para posicionamiento
en nuestro ejemplo size_HINT=(Ninguno, Ninguno), size=(100, 44), pos_HINT={ cent
ro_x : .5, center_y : .5})
def show_selected_value(spinner, texto):
print( El spinner , spinner, texto , texto)
Spinner.bind(text=show_selected_value)
runTouchApp(spinner)
classkivy.uix.Spinner.Spinner( kwargs) Bases: kivy.uix.button.Button
569
a el Spinner.
dropdown_cls es toDropDown anObjectProperty y valores predeterminados.
Ha cambiado en la versin 1.8.0: Si se establece un valor de tipo string, theFacto
ry ser utilizada para resolver la clase.
is_abierta por defecto, el hilandero no est abierto. Se establece en True para ab
rirlo.
is_open es aBooleanProperty y el valor predeterminado es False.
Nuevo en la versin 1.4.0.
option_Cls clase usada para mostrar las opciones de la lista desplegable que se
muestra en el girador.
La propiedad text de la clase se utiliza para representar el valor.
Esta clase de opcin requiere:
una propiedad de texto, que se utiliza para mostrar el valor.
un on_evento release, utilizado para activar la opcin cuando se pulsa o tocado.
asize_HINT_y de Ninguno.
laaltura.
option_cls es toSpinnerOption anObjectProperty y valores predeterminados.
Ha cambiado en la versin 1.8.0: Si se establece un valor de tipo string, theFacto
ry ser utilizada para resolver la clase.
sync_height cada elemento de una lista desplegable utiliza de forma predetermina
da/altura suministrados por el usuario. Se establece en True para propa- gate el
Spinner el valor de altura a cada elemento de la lista desplegable.
Nuevo en la versin 1.9.2.
sync_height es aBooleanProperty y su valor por defecto es false.
text_autoupdate indica si el spinner stexto debera actualizarse automticamente con
el primer valor de la propiedad de valores. Si se establece en True har que el s
pinner para actualizar itstext propiedad cada vez attr:valores han cambiado.
Nuevo en la versin 1.9.2.
text_autoupdate es aBooleanProperty y su valor por defecto es false.
valores valores que pueden ser seleccionados por el usuario. Debe ser una lista
de cadenas.
Los valores se aListProperty y predeterminados a [].
classkivy.uix.Spinner.SpinnerOption( kwargs) Bases: kivy.uix.button.Button
Botn especial utilizado en el Spinner lista desplegable. De forma predeterminada,
esto es slo un botn con un tamao_HINT_y de ninguno y una altura de48DP.
36,43 Splitter
nuevo en la versin 1.5.0.
570
Diseo de pila 573 clase. Consulte la documentacin del mdulo para obtener ms informac
in.
minimum_height altura mnima necesaria para contener a todos los nios. Es automticam
ente ajustado por el diseo.
Nuevo en la versin 1.0.8.
_height es akivy.properties.NumericProperty mnimo y el valor predeterminado es 0.
minimum_size El tamao mnimo necesario para contener todos los nios. Es automticament
e ajustado por el diseo.
Nuevo en la versin 1.0.8.
_size es mnimo (mnimo de aReferenceListProperty_width,MINIMUM_height) propiedades.
minimum_width anchura mnima necesaria para contener a todos los nios. Es automticam
ente ajustado por el diseo.
Nuevo en la versin 1.0.8.
_width es mnima akivy.properties.NumericProperty y predeterminados a 0.
Orientacin Orientacin del diseo.
Orientacin es anOptionProperty y predeterminados a lr-tb .
Orientaciones vlidas son "lr-tb , tb-lr , RL-tb , tb-rl , lr-bt , bt-lr , R
L-bt y bt-rl .
Ha cambiado en la versin 1.5.0: orientacin controla ahora correctamente todas las
combinaciones vlidas de lr , rl , tb , Bt . Antes de esta versin slo "lr-tb y t
b-lr fueron apoyados, y "tb-lr fue mal llamada y coloca los widgets de arriba
a abajo y de derecha a izquierda (invertido en comparacin con lo que era de esper
ar).
Nota: "LR" de izquierda a derecha. rl significa de derecha a izquierda. "tb" s
ignifica la parte superior a la inferior. BT significa la parte inferior a la
superior. el
Relleno Relleno entre la caja y la presentacin de nios: [el relleno, el relleno_Le
ft_top_right, el relleno, el relleno_Bottom].
padding tambin acepta un argumento dos [formulario relleno, el relleno_HORIZONTAL
_vertical] y un solo argumento forma [relleno].
Ha cambiado en la versin 1.7.0: Se reemplaz la NumericProperty con VariableListPro
perty.
padding es aVariableListProperty y predeterminados a [0, 0, 0, 0]. El
espaciado el espaciado entre los nios: [el espaciado horizontal_spacing_
espaciado vertical]. tambin acepta un nico argumento forma [Espacio]. El
espaciado es aVariableListProperty y predeterminados a [0, 0].
36.45 Ver Galera
Nuevo en la versin 1.0.4.
574
""")
clase Test(TabbedPanel):
pase la
clase TabbedPanelApp(App):
def construir(self):
volver Test()
si __name__ == "__main__ :
TabbedPanelApp().run()
Nota: un nuevo classTabbedPanelItem ha sido introducida en la versin 1.5.0 para m
ayor comodidad. Ahora uno puede simplemente agregar a aTabbedPanelItem theTabbed
PanelItem aTabbedPanel y contenido como en el ejemplo anterior.
577
TabbedPanelItem:
BoxLayout:
Etiqueta:
texto: Segundo tab content area Botn:
texto: "Botn que no hace nada"
581
clase FloatInput(TextInput):
Pat = re.compile( [^0-9] ) def insert_text(self, substring, desde_undo=false):
Pat = self.pat si . en self.texto:
s = re.sub(pat, , substring) else:
s = . .join([re.sub(pat,
s) de s en la subcadena.split( . ,1)]) volver super
(FloatInput, auto).insert_text(s, desde_undo=de_undo)
36.48.4 accesos
directos Los accesos directos predeterminados Descripcin mueva el cursor a la izq
uierda, izquierda, derecha, mueva el cursor hacia la derecha hasta mover el curs
or para mover el cursor arriba y abajo para mover el cursor abajo en casa al pri
ncipio de la lnea fin mueve el cursor al final de la lnea repg desplazar el cursor
a 3 lneas antes Avpg mueva el cursor hasta 3 lneas despus retroceso eliminar la sele
ccin o el carcter antes del cursor Supr Borrar la seleccin de carcter despus del curs
or Shift + <dir>Iniciar una seleccin de texto. Dir pueden estar Arriba, Abajo, Iz
quierda o Derecha, Control + C Copiar la seleccin Control + X Cortar seleccin Cont
rol + p pegar la seleccin Control + A Seleccionar todo el contenido Control + Z +
r Control Deshacer Rehacer
Nota: Para habilitar los mtodos abreviados de teclado de estilo Emacs, puede useE
macsBehavior.
classkivy.uix.textinput.TextInput( kwargs) Bases: kivy.uix.behaviors.focus.FocusBeh
avior,kivy.uix.widget.Widget
clase TextInput. Consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_text_validateFired slo en modo multiline=False cuando el usuario pulse
intro .
Esta ser tambin la textinput unfocus.
on_doble_tapFired cuando ocurre un doble toque en la entrada de texto. Los probl
emas de comportamiento, se selecciona el texto alrededor de la posicin del cursor
. Ms info en on_doble_toca().
on_triple_tapFired cuando un triple punteo ocurre en la entrada de texto. El fal
lo de comportamiento selecciona la lnea alrededor de la posicin del cursor. Ms info
en on_triple_toca().
on_quad_touchFired cuando cuatro dedos estn tocando la entrada de texto. El compo
rtamiento predeterminado, se selecciona todo el texto. Ms info aton_quad_touch().
584
e aceptan nmeros. Si es "float" tambin aceptar un nico perodo. Por ltimo, si es exigib
le que se llama con dos parmetros; la cadena ser aadido y un bool que indica si la
cadena es un resultado de deshacer (True).
La exigible nuevo debera devolver una subcadena que se utilizar en su lugar.
insert_text(subcadena, desde_undo=false) Insertar nuevo texto en la posicin actua
l del cursor. Reemplazar esta funcin con el fin de pre-proceso para la validacin d
e entrada de texto.
keyboard_sugerencias Si True proporciona auto sugerencias sobre la parte superio
r del teclado. Esto slo funcionar ifinput_type se ajusta al texto.
Nuevo en la versin 1.8.0.
keyboard_sugerencias es aBooleanProperty su valor predeterminado es True.
line_height Altura de una lnea. Esta propiedad se calcula automticamente a partir
del nombre_font, font_size. Cambiando la lnea_height no tendr ningn impacto.
Nota: la lnea_height es la altura de una sola lnea de texto. Use el mnimo_height, q
ue tambin incluye un relleno, hasta conseguir la altura necesaria para mostrar el
texto correctamente.
line_height es aNumericProperty, es de slo lectura.
line_spacing espacio entre lneas.
Nuevo en la versin 1.8.0.
line_spacing es aNumericProperty y predeterminados a 0.
minimum_height altura mnima del contenido dentro de la TextInput.
Nuevo en la versin 1.8.0.
_height es un mnimo readonlyAliasProperty.
Advertencia: MINIMUM_width es el ancho calculado sobre la base de cdigo como este
, por lo tanto, dar lugar a un bucle infinito:
<FancyTextInput>:
Altura: self.MINIMUM_Altura Anchura: self.height
multiline Si es True, el widget ser capaz de mostrar varias lneas de texto. Si es
False, el "enter" ser el desenfoque keypress textinput, en lugar de agregar una n
ueva lnea.
multiline aBooleanProperty y su valor predeterminado es True.
on_doble_toca() Este evento se distribuye cuando un doble toque ocurre dentro de
l componente TextInput. El comportamiento predeterminado de
589
node.nivel
treeview.width - treeview.guin_start - treeview.guin_level
puede tener algunos problemas con eso. Es la responsabilidad del desarrollador p
ara manejar correctamente la adaptacin de la representacin grfica de nodos, si es n
ecesario.
classkivy.uix.TreeView treeview.( kwargs) Bases: kivy.uix.widget.Widget
clase TreeView. Consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_node_expand: (nodo, )dispararon cuando un nodo se est ampliando en_nod
e_colapso: (nodo, )dispararon cuando un nodo se derrumb add_Node (Nodo, padre=Non
e) agrega un nuevo nodo al rbol.
Nodo parmetros: instancia de aTreeViewNodeNode agregar en el rbol primario: instan
cia de aTreeViewNode, por omisin a nodo NoneParent tach el nuevo nodo. Si ninguno
, se agrega al nodo raz.
Returnsthe node.
get_node_en_pos(pos) obtener el nodo en la posicin (x, y).
Ocultar_root Utilice esta propiedad para mostrar/ocultar el nodo raz inicial. Si
es True, el nodo raz aparecer como un nodo cerrado.
hide_root es aBooleanProperty y su valor por defecto es false.
guin_level ancho utilizado para la sangra de cada nivel, excepto en el primer nive
l.
Clculo de guin para cada nivel del rbol es:
guin_level guin = guin_start +
guin nivel_level es aNumericProperty y predeterminados a 16.
guin_start ancho de sangra del nivel 0 / nodo raz. Esto es principalmente el tamao i
nicial para dar cabida a un icono de rbol (contrae / ampliado). Ver guin_level par
a obtener ms informacin sobre el clculo del nivel de indentacin.
guin_start est aNumericProperty y predeterminados a 24.
iterar_all_nodes(node=None) Generador para iterar a travs de todos los nodos desd
e el nodo y si o no expandido. Si el nodo es Ninguno, la puesta en marcha del ge
nerador withroot.
iterar_open_nodes(node=None) Generador para iterar sobre todos los gastados nodo
s empezando desde el nodo y hacia abajo. Si el nodo es Ninguno, la puesta en mar
cha del generador withroot.
Para obtener todos los nodos abiertos:
treeview TreeView =() # ... aadir nodos ...
para el nodo en treeview.iterar_open_nodes():
print(node)
load_func retrollamada para uso de carga asincrnica. Si se establece, ser automtica
mente carga asincrnica
595
hecho. El callback debe actuar como una funcin de generador de Python, usando yie
ld para enviar los datos de nuevo al treeview.
El callback debe tener el siguiente formato:
def callback(treeview, nodo):
por nombre de tema ( 1 , 2 ):
rendimiento TreeViewLabel(texto)
load=nombre_func es aObjectProperty y predeterminados a Ninguno.
minimum_height altura mnima necesaria para contener a todos los nios.
Nuevo en la versin 1.0.9.
_height es akivy.properties.NumericProperty mnimo y el valor predeterminado es 0.
minimum_size El tamao mnimo necesario para contener todos los nios.
Nuevo en la versin 1.0.9.
_size es mnimo (mnimo de aReferenceListProperty_width,MINIMUM_height) propiedades.
minimum_width anchura mnima necesaria para contener a todos los nios.
Nuevo en la versin 1.0.9.
_width es mnima akivy.properties.NumericProperty y predeterminados a 0.
anotaciones 36.52.1
si desea mostrar texto en un momento determinado y por un cierto tiempo, conside
re la posibilidad de anotaciones. Una anotacin archivo tiene una extensin ".jsa".
El reproductor se carga automticamente el archivo de anotacin asociada, si existe.
Un archivo de anotacin est basado en JSON, proporcionando una lista de elementos d
el diccionario de etiqueta. La clave y el valor debe coincidir con uno de los el
ementos VideoPlayerAnnotation. Por ejemplo, aqu hay una versin corta de la JSA arc
hivo que usted puede encontrar en los ejemplos/widgets/softboy.jsa:
[ {"Inicio": 0, 2: "duracin", "text": "Este es un ejemplo de anotacin"}, {"Inicio"
: 2, "Duracin": 2, "bgcolor": [0.5, 0.2, 0.4, 0.5], "text": "Se puede cambiar el
color de fondo"} ]
softboy.avi Para nuestro ejemplo, el resultado ser:
Si desea experimentar con los archivos de anotacin, prueba con:
python -m kivy.uix videoplayer.Ejemplos/widgets/softboy.avi
Fullscreen 36.52.2
El video player puede reproducir el vdeo a pantalla completa, ifVideoPlayer.allow
_fullscreen es activado por un doble toque en el vdeo. De forma predeterminada, s
i el vdeo es ms pequea que la ventana, no habr estirado.
Puede permitir el estiramiento por pasar opciones personalizadas para aVideoPlay
er Ejemplo:
601
notacin. La
duracin es aNumericProperty y predeterminados a 1.
inicio la hora de inicio de la anotacin.
inicio es aNumericProperty y por defecto es 0.
604
36.53 VKeyboard
nuevo en la versin 1.0.8.
VKeyboard es un teclado en pantalla para Kivy. Su funcionamiento est destinado a
ser transparente para el usuario.
Usar el widget directamente no es recomendable. Lea la seccin Solicitar teclado e
n primer lugar.
36.53.1 Modos
este teclado virtual tiene un acoplado y el modo libre:
Modo acoplado (VKeyboard.docked = True) generalmente se utiliza cuando slo una pe
rsona est utilizando la computadora, como una tableta o computadora personal, etc
.
El modo libre: VKeyboard.docked = False) principalmente para superficies multito
uch. Este modo permite que varios teclados virtuales para ser utilizados en la p
antalla.
Si el modo acoplado cambios, necesita llamar manualmente VKeyboard.setup_mode()
de lo contrario, el cambio no tendr ningn impacto. Durante esa llamada, el VKeyboa
rd, aplicado en la parte superior de aScatter, cambiar el comportamiento de la di
spersin y la posicin del teclado, cerca de la meta (si el destino y el modo acopla
do).
Los diseos de 36.53.2
El teclado virtual es capaz de cargar un diseo personalizado. Si se crea un diseo
nuevo y coloque el JSON en <kivy_data_dir>/teclados/ <layoutid>.json, puedes car
garlo estableciendo VKeyboard.diseo a su iddediseo.
El JSON deben estructurarse como este:
{ "ttulo": "Ttulo de su diseo", "Descripcin": "Descripcin del diseo", "cols": 15, "fil
as": 5,
...
}
entonces, es necesario describir las teclas en cada fila, ya sea para un "normal
", "shift" o un "especial" (aadida en la versin 1.9.0) Modo. Teclas para esta fila
de datos debe ser denominado normal_ <row>, shift_ <row>Y SPE605
cial_ <row>. Sustituir la fila con el nmero de la fila. Dentro de cada fila, se d
escribir la clave. Una clave es un elemento 4 de la lista en formato:
[ <text displayed on the keyboard>, <text to put when the key is pressed>, <text
that represents the keycode>, <size of cols>]
Aqu son ejemplos claves:
# f clave ["f", "f", "f", 1] # capslock ["", " ", "tab", 1,5]
Finalmente, complete el formato JSON:
{ ...
"normal_1": ["", "", "", 1], ["1", "1", "1", 1], ["2", "2", "2", 1], ["3", "3",
"3", 1], ["4", "4", "4", 1], ["5", "5", "5", 1], ["6", "6", "6", 1], ["7", "7",
"7", 1], ["8", "8", "8", 1], ["9", "9", "9", 1], ["0", "0", "0", 1], ["+", "+",
"+", 1], ["=", "=", "=", 1], ["", null "retroceso", 2] ],
"shift_1": [ ... ], "normal_2": [ ... ], "special_2": [ ... ], ...
}
36.53.3 Solicitud
Como elen_TOUCH_up() mtodo inserta widgets en el ndice 0 por defecto, esto signifi
ca que el evento va desde el recientemente aadido widget vuelve al primero agrega
do. Considere lo siguiente:
casilla de verificacin = BoxLayout().add_widget(Label(text="a") box_widget.add(La
bel(text="b") box_widget.add(Label(text="c")
la etiqueta con el texto "c" obtiene el primer evento, "b", segunda y ltima "a".
Puede invertir este orden especificando manualmente el ndice:
casilla de verificacin = BoxLayout().add_widget(Label(text="a"), index=0) cuadro.
add_widget(Label(text="b"), index=1) Caja.add_widget(Label(text="c"), index=2)
Ahora el orden sera "a", "b" y "c". Una cosa a tener en cuenta cuando se usa kv e
s que declarar un widget utiliza theadd_widget() mtodo de insercin. Por consiguien
te, el uso de
BoxLayout:
MyLabel:
texto: "un" MyLabel:
texto: "b" MyLabel:
texto: "c"
resultar en el caso de orden "c", "b" y luego "a", "c" fue en realidad el ltimo aad
ido widget. As pues, tiene el ndice 0, "b" y un "ndice 1" ndice 2. Efectivamente, el
nio es el orden inverso de su orden enumerado.
Esta serie es el mismo para elen_TOUCH_move() ydel_TOUCH_up() eventos.
A fin de detener esta propagacin de eventos, un mtodo puede devolver True. Esto in
dica Kivy el evento ha sido manipulados y las paradas de propagacin de eventos. P
or ejemplo:
clase miwidget(Widget):
def sobre_TOUCH_down(self, tctil):
Si <some_condition>:
# Hacer cosas aqu y matar el evento devolver True else:
volver super(Miwidget, auto).en_TOUCH_down(touch)
Este enfoque le ofrece un buen control sobre exactamente cmo los eventos son envi
ados y gestionados. Algunas veces, sin embargo, es posible que desee para que el
evento se propagan por completo antes de tomar accin. Puede utilizar theClock ay
udarle aqu:
clase miwidget(etiqueta):
def sobre_TOUCH_down(self, toque, despus=false):
si despus:
print "dispararon despus de que el caso ha sido enviado!" else:
de otro hermano widgets. Para una discusin completa del ndice y widget theWidgets
jerarqua, consulte la Gua de programacin.
Nuevo en la versin 1.0.5.
canvas: str, por omisin NoneCanvas para agregar el lienzo de widget.
[ <class BoxLayout >, <class Widget >, <class Button >, <class Widget >, <cl
ass GridLayout >, <class Button >] >>> # Ahora con bucle y restringir
el falso falso >>> [tipo(widget) para el widget en caja.walk()] [ <cla
ss BoxLayout >, <class Widget >, <class Button >, <class Widget >] >>&
gt; # Ahora con restringir el verdadero >>> [tipo(widget) para el widge
t en caja.caminar(restrict=true)] [ <class BoxLayout >, <class Widget >, <clas
s Button >]
Nuevo en la versin 1.9.0.
a pie_reverse (loopback=false) iterador que recorre el rbol widget atrs comenzando
con el widget antes de esto, y yendo hacia atrs volviendo widgets en el orden in
verso en el que mostrar los diseos de ellos.
Este camina en la direccin opuesta ofwalk(), as que una lista del rbol generado wit
hwalk() ser en el orden inverso en comparacin a la lista generada con esta, siempr
e el loopback es True.
Parmetros: bool loopback, por omisin FalseIf True, cuando el superior en la raz del
rbol es alcanzado, podr volver al ltimo bucle widget y comenzar a caminar hacia at
rs hasta despus de que nos golpe de nuevo widget. El valor predeterminado es False.
Generador ReturnsA que recorre el rbol, regresando de widgets en el orden de diseo
inverso.
Por ejemplo, dado un rbol con la siguiente estructura:
GridLayout:
botn BoxLayout:
id: box Widget Widget de botn
caminar este rbol:
>>> # Llamar a pie de cuadro con cierto bucle >>> [tipo(widget
) para el widget en caja.walk_reverse (loopback=true)] [ <class Button >, <clas
s GridLayout >, <class Widget >, <class Button >, <class Widget >, <class B
oxLayout >] >>> # Ahora con falsas loopback >>> [tipo(widget)
para el widget en caja.walk_reverse()] [ <class Button >, <class GridLayout >]
>>> avance = [w w en caja.caminar(loopback=true)] >>> atrs = [
w w en caja.walk_reverse (loopback=true)] >>> avance hacia atrs ==[::-1]
Verdadero
nuevo en la versin 1.9.0.
Ancho el ancho del widget.
width es aNumericProperty y predeterminados a 100.
Advertencia: Tenga en cuenta que la propiedad width est sujeto a la lgica de diseo
y que esto no ha ocurrido todava en el momento de el widget __init__ Mtodo.
619
Parte V
Apndice
El Apndice contiene la informacin sobre licencias y una enumeracin de los distintos
mdulos, clases, funciones y variables disponibles en Kivy.
621
622
CAPTULO
THIRTYSEVEN
Kivy licencia se libera y se distribuye bajo los trminos de la licencia MIT a par
tir de la versin 1.7.2. Las versiones ms antiguas todava estn bajo la LGPLv3.
Usted debera haber recibido una copia de la licencia MIT Kivy junto a su distribu
cin. Consulte el archivo de licencia en la carpeta raz de Kivy. Una versin en lnea d
e la licencia se puede encontrar en:
https://github.com/kivy/kivy/blob/master/LICENSE
en una cscara de nuez, la licencia permite utilizar Kivy en sus propios proyectos
, independientemente de si son open source, de cdigo cerrado, comercial o gratuit
o. Incluso si la licencia no lo requiere, agradeceramos mucho cuando realice camb
ios en el propio cdigo fuente Kivy, compartir esos cambios con nosotros!
Para obtener una lista de autores, consulte el archivo de autores que acompaa la
distribucin de cdigo fuente Kivy (junto a la licencia).
Kivy - Copyright 2010-2015, los autores Kivy.
623
624