Você está na página 1de 392

USE_SDL2=1 set USE_GSTREAMER=1

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

Haga doble clic en el mtodo


si slo tiene uno instalado Python, puede asociar todos los archivos .py con el pyt
hon, si no lo es ya, y, a continuacin, ejectelo haciendo doble clic. O slo puede ha
cerlo una vez si desea poder elegir cada vez:
1. Haga clic con el botn derecho sobre el archivo Python (.py) extensin de archivo
de la aplicacin que desea iniciar
2. Desde el men de contexto que aparece, seleccione Abrir con 3. Navegar por el d
isco duro y encontrar el filepython.exe que desea utilizar. Seleccione.
4. Seleccione "Siempre abrir el archivo con..." si no quiere repetir este proced
imiento cada vez que haga doble clic en un archivo .py.
5. Usted est hecho. Abra el archivo.
El mtodo de envo
puede iniciar un archivo .py con nuestro Python usando el men Enviar a:
1. Busque thepython.exe que desea utilizar. Haga clic con el botn derecho del ratn
sobre l y copiarlo.
2. Abra Windows Explorer (Explorador de archivos en Windows 8), y al ir a la dir
eccin 'shell:sendto". Usted debe obtener el directorio especial de Windows
3 SendTo. Pegue el archivo.exe copiedpython previamente como un acceso directo.
#. Cmbiele el nombre a python <python-version>. Por ejemplo python27-x64 ahora pu

ede ejecutar su aplicacin haciendo clic derecho sobre el archivo .py -&gt; "Envia
r a" -&gt; "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

$ sudo mv Kivy2.app /Aplicaciones/Kivy.app


4. Crear un enlace simblico llamado kivy para iniciar fcilmente aplicaciones con k
ivy venv:
$ ln -s /Aplicaciones/Kivy.app/Contents/Resources/script /usr/local/bin/kivy
5. Ejemplos y todas las herramientas de kivy normal estn presentes en la Kivy.app
/Contents/Resources/kivy directorio.
Ahora debera tener una kivy secuencia de comandos que puede utilizar para iniciar
su kivy app desde el terminal.
Usted puede simplemente arrastrar y soltar su principal.py para ejecutar su apli
cacin tambin.
Instalacin de mdulos
el SDK de Kivy en OS X utiliza su propio env virtual que se activa cuando se eje
cute su aplicacin utilizando el comando kivy. Para instalar cualquier mdulo que us
ted necesita para instalar el mdulo de la siguiente manera:
$ pip install kivy -m <modulename>
Dnde estn los mdulos/archivos instalados?
Dentro del venv porttil dentro de la aplicacin en:
Kivy.app/Contents/Resources/venv/
Si instala un mdulo que instala un binario por ejemplo como kivy-jardn. Ese binari
o slo estar disponible a partir del venv encima, como en despus de hacer:
kivy instalar kivy pip -m-jardn
jardn lib slo estar disponible cuando se activa este
origen env: /Aplicaciones/Kivy.app/Contents/Resources/venv/bin/activate jardn ins
talar mapview desactivar
para instalar los archivos binarios
slo copiar los binarios en el directorio /Aplicaciones/Kivy.app/Contents/Resource
s/venv/bin/.
Para incluir otros marcos
Kivy.app viene con SDL2 y Gstreamer marcos proporcionados. Para incluir marcos d
istintos de los proporcionados haga lo siguiente:
git clone Http://github.com/tito/osxrelocator export PYTHONPATH=~/ruta/a/osxrelo
cator cd /Applications/Kivy.app osxrelocator python -m -r . /Library/Frameworks/
<Framework_name>.marco/ \ @ejecutable_path/../Frameworks/ <Framework_name>.marc

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

iniciar cualquier aplicacin Kivy


puede ejecutar cualquier aplicacin Kivy simplemente arrastrando el archivo princi
pal de la aplicacin en el icono Kivy.app.
Slo intente esto con cualquier archivo python en la carpeta Ejemplos.
Iniciar desde la lnea de comandos
si desea utilizar Kivy desde la lnea de comandos, haga doble clic en Make Symlink
s script despus de haber arrastrado el Kivy.app en la carpeta Aplicaciones. Para
probar si funcionaba:
1. Abra Terminal.app y escriba:
$ kivy
usted debe recibir un aviso de Python.
2. All, escribir:
&gt;&gt;&gt; import kivy
si slo va a la lnea siguiente sin errores, funcion.
3. Kivy ejecuta cualquier aplicacin desde la lnea de comandos ahora es simplemente
una cuestin de ejecutar un comando como el siguiente:
$ kivy yourapplication.py
con pip
Alternativamente puedes instalar Kivy mediante los siguientes pasos:
1. Instalar los requisitos utilizando homebrew:
$ brew22 instalar SDL SDL SDL_image2_ttf2 sdl_mixer gstreamer
2. Instalar cython 0,23 y kivy utilizando el pip:
$ pip install -i Cython==0,23 $_USE_MARCOS OSX=0 pip instalar kivy
Para instalar la versin de desarrollo, utilizar este en el segundo paso:
$_USE_MARCOS OSX=0 pip instalar Https://github.com/kivy/kivy/archive/master.zip
1.1.3 Instalacin en Linux
utilizando paquetes de software
para instalar paquetes .deb relativa distribucin/.rpm/...
Ubuntu / Kubuntu / Xubuntu / Lubuntu (insolente y anterior)
1. Agregue uno de los PPA como prefiera
estable genera $ sudo add-apt-repository ppa:kivy-team/kivy compilaciones noctur
nas $ sudo add-apt-repository ppa:kivy-team/kivy-diariamente
11

2. Actualice su lista de paquetes usando el administrador de paquetes $ sudo apt


-get update
3. Instalar
Python Kivy2 - python-kivy $ sudo apt-get install python-kivy Python3 - python3kivy $ sudo apt-get install python3-kivy
opcionalmente los Ejemplos - ejemplos de kivy $ sudo apt-get install kivy- ejemp
los de
Debian (Jessie o ms reciente)
1. Agregue uno de los PPA a su sources.list de APT manualmente o a travs de Synap
tic
Jessie/Testing:
estable construye deb Http://ppa.launchpad.net/kivy-team/kivy/ubuntu fiel princi
pales compilaciones diarias deb ubuntu Http://ppa.launchpad.net/kivy-team/kivy-d

aily/ fiel principales


Sid/Unstable:
estable construye deb Http://ppa.launchpad.net/kivy-team/kivy/ubuntu utpico princ
ipales compilaciones diarias deb ubuntu Http://ppa.launchpad.net/kivy-team/kivydaily/ utpica
Aviso principal: sibilante no es compatible - necesitar actualizar a Jessie por l
o menos!
2. Agregue la clave GPG a su anillo de claves de apt ejecutando
como usuario:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A863D2D6
como root:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A863D2D6
3. Actualice su lista de paquetes e instalar python-kivy y/o python3-kivy y opci
onalmente el ex- encontrados en muestras de kivy ejemplos
Linux Mint
1. Averiguar en qu versin de Ubuntu se basa en la instalacin, el uso de esta descri
pcin.
2. Continuar como se describe para Ubuntu anterior, dependiendo de la versin que
se basa en la instalacin.
Bodhi Linux
1. Averige qu versin de la distribucin que se est ejecutando y utilice la siguiente t
abla para saber en que Ubuntu LTS se basa.
Bodhi 1 Ubuntu 10.04 LTS Lucid aka (ningn paquete, slo instalacin manual) 2 Bodhi U
buntu 12.04 LTS aka precisa

Bodhi 12 3 Ubuntu 14.04 LTS aka fiel


2. Continuar como se describe para Ubuntu anterior, dependiendo de la versin que
se basa en la instalacin.
OpenSuSE
1. Para instalar kivy vaya a http://software.opensuse.org/package/python-Kivy y
usar el "1 Haga clic en Instalar" para su versin de OpenSuse. Es posible que nece
site realizar la ltima versin kivy aparecen en la lista haciendo clic en "Mostrar
paquetes inestables". Preferimos utilizar paquetes por " de- vel:idiomas:python"
.
2. Si desea acceder a los ejemplos, seleccione python-Kivy-ejemplos en la prxima
asistente de instalacin.
Fedora Core
1. Agregar el repositorio a travs de la terminal:
Fedora 18
$ sudo yum-config-manager --add-repo=Http://download.opensuse.org\ /repositorios
:/home/thopiekar:/kivy/Fedora_18/home:thopiekar:kivy.repo
Fedora 17
$ sudo yum-config-manager --add-repo=Http://download.opensuse.org\ /repositorios
:/home/thopiekar:/kivy/Fedora_17/home:thopiekar:kivy.repo
Fedora 16
$ sudo yum-config-manager --add-repo=Http://download.opensuse.org\ /repositorios
:/home/thopiekar:/kivy/Fedora_16/home:thopiekar:kivy.repo
2. Utilice el paquete preferido-manager para actualizar tu packagelists
3. Instalar python-Kivy y opcionalmente los ejemplos, como las que se encuentran
en python-Kivy
gentoo-ejemplos
1. Hay un ebuild kivy kivy (versin estable)
emergen Kivy
2. Use disponibles son:
El Cairo: bandera estndar, permiten utilizar kivy cairo bibliotecas grficas. cmara:
Instalar las bibliotecas necesarias para apoyar la cmara. doc: Estndar bandera, t

e har construir la documentacin localy. Ejemplos: Estndar bandera, le dar ejemplos k


ivy programas. jardn jardn: Instalar herramienta para administrar usuario mantenid
o widgets.
gstreamer: bandera, kivy estndar ser capaz de utilizar streaming audio/video bibli
otecas. hechizo: bandera estndar, ofrecen encantar usar ortografa de kivy apps.
13

1.1.4 La instalacin en un entorno virtual


comn
Cython dependencias
distintas versiones de Kivy slo se han probado hasta una determinada versin Cython
. Puede o no puede trabajar con una versin posterior.
Kivy Cython 0.20.2 0.21.2 1.8 1.9 1.9.1 0.23
dependencias con SDL2
Ubuntu ejemplo
# Instalar los paquetes necesarios del sistema sudo apt-get install -y \ pythonpip build-essential \ \ \ \ python git python-dev ffmpeg \ \ \2-dev libsdl libsd
l2-image-dev \ libsdl-mezclador2-dev \ libsdl-ttf2-dev-dev libportmidi \ \ \ lib
avformat libswscale-dev-dev \ libavcodec-dev \ zlib1g-dev
Nota: Dependiendo de su versin de Linux, usted puede recibir mensajes de error re
lacionados con el "ffmpeg" pa- quete. En este escenario, utilice "libav-tools" e
n lugar de "ffmpeg " (arriba), o utilizar un PPA (como se muestra a continuacin):
sudo add-apt-repository ppa:mc3man/fiel-media: sudo apt-get update: sudo apt-get
install ffmpeg
instalacin
# Asegrese de Pip, y Setuptools Virtualenv se actualizan sudo pip install --upgra
de setuptools virtualenv pip
# Crear un virtualenv virtualenv --no-site-packages kivyinstall
# Introduzca el virtualenv . kivyinstall/bin/activate
# Usar correcta versin Cython aqu
14

pip instalar Cython==0,23


# instalar la versin estable de Kivy en el pip virtualenv instalar kivy # Para la
versin de desarrollo de Kivy, use el siguiente comando # instalar git+Https://gi
thub.com/kivy/kivy.git@master pip
Python 3
Si desea utilizar Python 3 instalar "python3" y "python3-dev" y, a continuacin, p
asar "P3" para Python Virtualenv.
Las dependencias con legado PyGame
Ubuntu ejemplo
# Instalar los paquetes necesarios del sistema sudo apt-get install -y python-pi
p \ \ \ build-essential mercurial, git \ \ \ python python-dev \ \ ffmpeg-image1
.2 libsdl-dev libsdl-mixer1.2 \ \-dev-ttf2.0 libsdl-dev-dev libsmpeg \ \ \ libpo
rtmidi libsdl1.2-dev-dev \ \ libavformat libswscale-dev-dev \ libavcodec-dev \ z
lib1g-dev
Fedora
$ sudo yum install mercurial hacer \ \ \ \ \ automake gcc gcc-c++ \ SDL_ttf-deve
l \ SDL_mixer-devel-devel khrplatform \ \ \ libGLES mesa-mesa-libGLES-devel \ gs
treamer-plugins-buena \ \ gstreamer gstreamer-python-devel mtdev \ \
15

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

Iniciar desde la lnea de comandos


Enviamos algunos ejemplos que estn listos para ejecutar. Sin embargo, estos ejemp
los son embalados en el interior del pa- quete. Esto significa que usted debe pr
imero saber dnde easy_install ha instalado su paquete kivy actual y, a continuacin
, vaya al directorio de ejemplos:
$ python -c "import pkg_recursos; print(pkg_resources.resource_filename('kivy',
'../share/kivy-ejemplos")"
y debe tener una ruta similar a:
/usr/local/lib/python2.6/dist-packages/Kivy-1.0.4_beta-py2.6-linux-x86_64.egg/sh
are/examples/-kivy
entonces usted puede ir a el directorio de ejemplo y ejecute:
# lanzar touchtracer $ cd <path to kivy-examples>$ cd demo/touchtracer $ python
main.py
# iniciar pictures $ cd <path to kivy-examples>$ cd demo/imgenes $ python main.py
si est familiarizado con Unix y enlaces simblicos, puede crear un vnculo directamen
te en tu directorio de inicio para facilitar el acceso. Por ejemplo:
1. Obtener la ruta de acceso de ejemplo desde la lnea de comandos anterior
. 2. Pegar en la consola:
$ ln -s <path to kivy-examples>~/
3. A continuacin, puede acceder a ejemplos de kivy directamente en tu directorio
home:
$ cd ~/kivy-ejemplos
si desea iniciar su Kivy programas como scripts (escribiendo ./main.py) o hacien
do doble clic en ellos, se desea definir la versin correcta de Python vinculando
a ella. Algo como esto:
$ sudo ln -s /usr/bin/python2.7 /usr/bin/kivy
o, si se ejecuta dentro de un virtualenv Kivy, enlace con el intrprete Python par
a ella, como:

$ sudo ln -s /home/su_nombre_de_usuario/Envs/kivy/bin/python2.7 /usr/bin/kivy


entonces, dentro de cada main.py, agregue una nueva primera lnea:
#!/usr/bin/kivy
Nota: Ten cuidado de Python archivos almacenados con Windows-estilo finales de ln
ea (CR-LF). Linux no ignorar el <CR>Y tratar de utilizar como parte del nombre de
archivo. Esto hace que mensajes de error confusos. Convertir a los finales de lne
a de Unix.
1.1.5 Instalacin en Android
Kivy es un framework de Python, y simplemente instalarlo en un dispositivo Andro
id del mismo modo que en una mquina de escritorio no har nada. Sin embargo, usted
puede compilar una aplicacin Kivy a un estndar de Android APK que se ejecutan como
una aplicacin java normal (ms o menos) de cualquier dispositivo.
Ofrecemos varias herramientas que le ayudarn a ejecutar cdigo en un dispositivo An
droid, Android cubierto totalmente en el embalaje de la documentacin. Estos inclu
yen la creacin de una completamente independientes que pueden ser liberados de la
APK
17

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" &gt;&gt; ~/.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

sudo pip install cython


6. Instalar Kivy globalmente en el sistema:
sudo pip install git+Https://github.com/kivy/kivy.git@master

7. 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" &gt;&gt; ~/.profile source ~/
.profile
KivyPie
KivyPie distribucin es compacta y ligera, y distribucin basado Raspbian que viene
con Kivy instalado y listo para funcionar. Es el resultado de aplicar los pasos
de instalacin manual descrito anteriormente, con un poco ms de herramientas extra.
Puede descargar la imagen de Http://kivypie.mitako.eu/kivy-download.html e inic
iarlo en un Raspberry PI.
Ejecutar la demostracin
vaya a su carpeta de ejemplos/kivy, tendrs toneladas de demo usted puede probar.
Usted podra comenzar el escaparate:
cd kivy/examples/demo/showcase python main.py
mono 3d demo es tambin muy divertido ver:
cd kivy/examples/3Drendering python main.py
cambiar la pantalla predeterminada a usar
puede definir una variable de entorno namedKIVY_BCM_DISPMANX_ID con el fin de ca
mbiar la pantalla utilizada para ejecutar Kivy. Por ejemplo, forzar la pantalla
HDMI, utilice:
KIVY_BCM_DISPMANX_ID=2 python main.py
Compruebe la gua/medio ambiente documentacin para ver todos los valores posibles.
Uso diario RPi pantalla tctil
si se utiliza el diario Raspberry Pi pantalla tctil, necesita configurar Kivy par
a usarlo como una fuente de entrada. Para ello, edite el archivo ~/.kivy/config.
ini y vaya a la seccin [Input]. Aadir esto:
ratn = ratn mtdev_%(name)s = probesysfs,Provider=mtdev hid_%(name)s ==hidinput pro
besysfs,proveedor
para obtener ms informacin acerca de la configuracin de Kivy, seeConfigure Kivy
19

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 &lt;/pong.kv&gt; [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

vo. Contine con la siguiente seccin.


Compruebe si hay problemas con su
primera instalacin PyGame, compruebe que dispone de una versin de trabajo de PyGam
e.
Inicie el intrprete Python interactivo e intente importar pygame:
$ python Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) [GCC 4.2.1 (bu
ild 5666) Apple Inc. (DOT 3)] en Darwin, escriba "help", "copyright", "crditos" o
"licencia" para obtener ms informacin.
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) Tipo "copyright", "crdit
os" o "licencia" para obtener ms informacin.
&gt;&gt;&gt; import pygame
si puede importar pygame sin problemas y, a continuacin, saltar a la siguiente se
ccin.
Pero si obtiene un error, entonces PyGame no est funcionando como debera.
Aqu est un ejemplo de PyGame error:
ImportError Rastreo (llamada ms reciente en ltimo lugar) <ipython-input-1-4a415d16
fbed>En <module>() ----&gt; 1 import pygame
20

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" ---&gt; 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>() ----&gt; 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

$ sudo apt-get install python-setuptools python-pygame python-opengl \ python-gs


t0,10 python-enchant gstreamer0.10-plugins-buena python-dev \ build-essential li
bgl1-mesa-dev-LTS-quantal libgles2-mesa-dev-LTS-quantal\ python-pip
para Ubuntu 15.04 y versiones anteriores a la 12.04, ste debera funcionar:
$ sudo apt-get install python-setuptools python-pygame python-opengl \ python-gs
t0,10 python-enchant gstreamer0.10-plugins-buena python-dev \ build-essential li
bgl1-mesa-dev libgles2-mesa-dev zlib1g-dev python-pip
Kivy requiere una versin reciente de Cython, as que es mejor usar la ltima versin co
mpatible de pypi:
$ sudo pip install --upgrade Cython==0,23
OS X
sin utilizar brew puede instalar las dependencias de kivy por pegar manualmente
las siguientes rdenes en un terminal:
curl -o -L https://www.libsdl.org/release/SDL2-2.0.4.dmg curl -OH -L https://www
.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.dmg curl -o -L https://w
ww.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.dmg curl -o -L https:/
/www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.13.dmg curl -o -L Http://g
streamer.freedesktop.org/data/pkg/osx/1.7.1/gstreamer-1.0-1.7.1-x86_64.pkg curl
-o -L Http://gstreamer.freedesktop.org/data/pkg/osx/1.7.1/gstreamer-1.0-devel-1.
7.1-x86_64.pkg hdiutil adjuntar SDL2-2.0.4.dmg sudo cp -a /Volumes/SDL2/SDL2.fra
mework /Library/Frameworks/
esto debera pedirle su contrasea de root, proporcionar y, a continuacin, pegar las
siguientes lneas en su terminal:
hdiutil adjuntar SDL2_image-2.0.1.dmg sudo cp -a /Volumes/SDL2_image/SDL_image2.
framework /Library/Frameworks/ hdiutil adjuntar2 SDL_ttf-2.0.13.dmg sudo cp -a /
Volumes/SDL2_ttf2/SDL_ttf.framework /Library/Frameworks/ hdiutil adjuntar SDL2_m
ixer-2.0.1.dmg sudo cp -a /Volumes/SDL2_mixer/SDL_mixer.Marco2 /Library/Framewor
ks/ sudo -installer package gstreamer-1.0-1.7.1-x86_64.pkg -objetivo / instalado
r sudo -paquete gstreamer-1.0-devel-1.7.1-x86_64.pkg -target / pip install --upg
rade --user cython almohada
Ahora que tienes todas las dependencias de kivy, usted necesita asegurarse de qu
e tiene las herramientas de lnea de comandos instalados:
xcode --install-seleccione
Ir a un apropiado como dir:
mkdir ~/cdigo cd ~/Cdigo
Ahora puede instalar kivy s:
git clone cd Http://github.com/kivy/kivy kivy hacer
esto debera compilar kivy, para hacerla accesible en su punto justo env python su
PYTHONPATH a este dir:
22

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

otolora Droid 2 [INFO ] ] [screen size=480x854 ppp densidad=240=1,5=orientacin re


trato [INFO ] [Kivy ] v1.9.1-STABLE [INFO ] ] [Python v2.7.10 (por defecto, 23 O
ct 2015, 18:05:06) [LLVM GCC 4.2.1 Compatible Apple 7.0.0 (rechinamiento-700.0.5
9.5)]
Si utiliza mtodo de brew Instalar kivy luego instale los requisitos utilizando ho
mebrew:
$ brew22 instalar SDL SDL SDL_image2_ttf2 sdl_mixer gstreamer
Windows
vea Usar el desarrollo Kivy.
1.2.2 Instalacin de Kivy para el desarrollo
Ahora que has instalado todas las dependencias requeridas, es el momento de desc
argar y compilar una versin de de- sarrollo
Kivy Kivy: Descargar desde GitHub:
$ git clone git://Github.com/kivy/kivy.git $ cd kivy
compilar:
$ Python setup.py build_ext --inplace -f
si tienes themake comando disponible, tambin puede utilizar los siguientes mtodos
abreviados para compilar (hace lo mismo que el ltimo comando):
$ make
Advertencia: De forma predeterminada, las versiones 2.7 a 2.7.2 de Python utiliz
a el compilador gcc que se incluye con versiones anteriores de XCode. A partir d
e la versin 4.2, slo el estruendo se despacha con el compilador por defecto de XCo
de.
Esto significa que si usted construye utilizando XCode 4.2 o anterior, necesitar
asegurarse de que usted tiene al menos Python 2.7.3 instalado, pero preferibleme
nte la ltima versin (2.7.5 en el momento de la escritura).
Si desea modificar el propio cdigo Kivy, configurar la variable de entorno PYTHON
PATH apunta a tu clon. De esta manera, usted no tendr que instalar (setup.py inst
all) tras cada pequea modificacin.
En lugar de importar Kivy Python desde su clon.
Alternativamente, si no desea realizar ningn cambio a la propia Kivy, tambin puede
ejecutar (como admin, por ejemplo
con sudo):
$ Python setup.py install
si desea contribuir con cdigo (parches, nuevas funciones) a la Kivy codebase, lea
contribuir.
23

1.2.3 Ejecuta el conjunto de pruebas


para ayudar a detectar problemas y cambios de comportamiento de Kivy, un conjunt
o de unittests son proporcionados. Una buena cosa a hacer es ejecutarlas justo d
espus de su instalacin Kivy, y cada vez que va a empujar un cambio. Si usted piens
a que algo estaba roto en Kivy, quizs una prueba mostrar esto. (Si no, podra ser un
buen momento para escribir uno.)
Las pruebas se basan en Kivy nosetest, que puede instalar desde el administrador
de paquetes o utilizar pip:
$ pip install nariz
para ejecutar la suite de prueba, hacer:
$ make test
1.2.4 Desinstalando Kivy
si mezclar mltiples instalaciones de Kivy, usted podra ser confundido acerca de dnd
e se encuentra cada versin Kivy. Por favor tenga en cuenta que usted puede ser qu
e necesite para seguir estos pasos varias veces si tiene varias versiones de Kiv
y instalado en la ruta de la biblioteca de Python. Para encontrar la versin actua
lmente instalada, puede usar la lnea de comandos:
$ python -c "import kivy; print(kivy.__path__)'
y, a continuacin, quite ese directorio de forma recursiva.

Si ha instalado Kivy con easy_install en linux, el directorio puede contener un


directorio "huevo". Re- mover tan bien:
$ python -c "import kivy; print(kivy.__path__)'' [/usr/local/lib/python2.7/distpackages/Kivy-1.0.7-py2.7-linux-x86_64.huevo/kivy'] $ sudo rm -rf /usr/local/lib
/python2.7/dist-packages/Kivy-1.0.7-py2.7-linux-x86_64.El huevo
si tiene instalado con apt-get, hacer:
$ sudo apt-get remove --purge python-kivy
24

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 &amp; Touch controla
dores slo trabajan con Kivy. En OS X se puede utilizar dispositivos con capacidad

multitctil de Apple, tales como ratones y trackpads. En Linux, puede utilizar ev


entos de entrada del kernel hid. Adems, apoyamos TUIO tangibles (objetos) de la i
nterfaz de usuario y un nmero de otras fuentes de entrada.
2.1.4 Concentrado
Kivy est centrado. Puede escribir una aplicacin sencilla con unas pocas lneas de cdi
go. Programas Kivy se crean utilizando el lenguaje de programacin Python, que es
increblemente verstil y potente y fcil de usar. Adems, hemos creado nuestra propia d
escripcin idioma, el idioma de Kivy, para crear interfaces de usuario ms complejas
. Este lenguaje permite configurar, conectar y organizar los elementos de la apl
icacin rpidamente.
Creemos que lo que le permite centrarse en la esencia de su aplicacin es ms import
ante que obligarle a toquetear la configuracin del compilador. Tomamos esa carga
fuera de sus hombros.
2.1.5 financiado
Kivy est activamente desarrolladas por profesionales en su campo. Kivy es una com
unidad-influenciado, profesin- aliado desarrollado comercialmente y respaldado la
solucin. Algunos de nuestros desarrolladores principales desarrollar Kivy para v
ivir. Kivy est aqu para quedarse. No es un pequeo proyecto estudiantil de fuga.
2.1.6 Free
Kivy es de uso gratuito. No tienes que pagar por ello. Ni siquiera tienes que pa
gar por l si ests haciendo dinero con la venta de una aplicacin que utiliza Kivy.
26

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 &amp; 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!

Si te sientes, tambin puede intentar resolver el problema, y contribuir envindonos


el parche :) Leer la siguiente seccin para saber cmo hacerlo.
27

3.3 Contribuciones de cdigo


contribuciones de cdigo (parches, nuevas funciones) son la manera ms obvia para ay
udar con el desa- rrollo del proyecto. Puesto que esto es tan comn le pedimos que
siga nuestro flujo de trabajo ms eficaz de trabajar con nosotros.
Adhiriendo a nuestro flujo de trabajo asegura que su contribucin no ser olvidado o
perdido. Adems, su nombre ser siempre asociado con el cambio realizado, lo que bsi
camente significa eterno fama en nuestro cdigo de la historia (puede opt-out si n
o quiere).
3.3.1 El estilo de codificacin
Si no lo ha hecho todava, lea el PEP8 acerca del estilo de la codificacin en pytho
n.
Activar el PEP8 compruebe en git comete como esto:
hacer hook
Este pasar el cdigo agregado a la zona de ensayo de Git (a punto de ser cometido)
a travs de un pep8 programa verificador cuando haces un commit, y asegurar que no
se introducen errores de Pep8. Si no, la confirmacin ser rechazado: corrija los e
rrores e intntelo de nuevo.
3.3.2 Rendimiento
Tenga cuidado de los problemas de rendimiento: lectura Python rendimiento consej
os
partes de Kivy intensivas de la cpu estn escritos en cython: si ests haciendo un m
ontn de computacin, considere la posibilidad de utilizar tambin.
3.3.3 Git &amp; GitHub
utilizamos git como nuestro sistema de control de versin de nuestra base de cdigo.
Si nunca has usado git DVCS o similar (o incluso cualquier VCS) antes, le suger
imos que eche un vistazo a la excelente documentacin que est disponible para la lne
a de Git. El Git Git Community Book o los vdeos son grandes maneras de aprender g
it.
Confe en nosotros cuando decimos que git es una gran herramienta. Puede parecer d
esalentador al principio, pero despus de un rato te (esperemos) le encanta tanto
como nosotros. La enseanza que git, sin embargo, est ms all del alcance de este docu
mento.
Adems, utilizamos GitHub para alojar nuestro cdigo. En la siguiente vamos a supone
r que usted tiene una cuenta de GitHub (gratis). Si bien esta parte es opcional,
permite una estrecha integracin entre sus parches y nuestra base de cdigo anterio
r. Si no desea utilizar GitHub, asumimos que usted sabe lo que est haciendo.
3.3.4 Flujo de cdigo
Tan aqu es la configuracin inicial para comenzar con nuestro flujo de trabajo (slo
necesita hacerlo una vez para instalar Kivy).
Bsicamente, usted siga las instrucciones de instalacin desde la instalacin de Kivy
para el desarrollo, pero no clonar nuestro repositorio, usted horquilla. Aqu estn
los pasos:
1. Inicie sesin en GitHub
2. Crear un fork del repositorio Kivy haciendo clic en el botn de la horquilla.
3. Clonar su horquilla de nuestro repositorio a su equipo. Su horquilla tendr el
git nombre remoto 'Origen' y usted ser en la rama 'master':
git clone Https://github.com/username/kivy.git
28

4. Compilar y configurar PYTHONPATH Consultar Instalacin de Kivy o instalar (para

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 &amp; 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

versionadded 30 ..:: 1.1.4


.. Nota: Esta nueva caracterstica probablemente Blow Your Mind
.. Advertencia: Por favor tome asiento antes de intentar esta caracterstica
"""
se traducir en:
def mi_new_FEATURE(self, arg): """ nueva caracterstica es impresionante
nuevo en la versin 1.1.4.
Nota: Esta nueva caracterstica probablemente Blow Your Mind
Advertencia: Srvanse tomar asiento antes de intentar esta caracterstica
"""
al referirse a otras partes de la API utilice:
:mod:'~kivy.module" para referirse a un mdulo :clase:'~kivy.module.Class" para re
ferirse a una clase :meth:'~kivy.module.Class.method" para referirse a un mtodo :
doc:'api-kivy.module" para referirse a la documentacin del mdulo (el mismo para un
a clase y un mtodo)
, Obviamente, sustituir el mdulo de clase y de mtodo con su nombre real, y utiliza
ndo '.' para separar mdulos refirindose al imbricado mdulos, e.g:
:mod:'~kivy.uix.floatlayout'
:clase:'~kivy.uix.floatlayout.FloatLayout'
:meth:'~kivy.core.window.WindowBase.toggle_fullscreen'
:doc:'/api-kivy.core.window"
tendr como resultado:
floatlayoutFloatLayouttoggle_fullscreen() Window

: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

3.5.1 pruebas unitarias


Pruebas se encuentran en la carpeta de pruebas/kivy. Si usted encuentra un bug d
e Kivy, bueno puede ser escribir un mnimo caso mostrando la cuestin y preguntar co
re devs si el comportamiento mostrado se destina o un fallo real.
Si usted escribe su cdigo como un unittest , evitar que el error vuelva a aparecer
inadvertido en el futuro y har Kivy un proyecto mejor, ms fuerte. Escribir un uni
ttest puede ser una buena manera de familiarizarse con Kivy haciendo algo til.
Las pruebas unitarias son separados en dos casos:
No grfica de pruebas unitarias: estas son pruebas unitarias estndar que se puede e
jecutar en una consola grfica Pruebas unitarias: estos necesitan un contexto GL y
trabajar a travs de la comparacin de imagen
para poder ejecutar pruebas unitarias, necesita instalar la nariz (Http://code.g
oogle.com/p/python-nose/), y cobertura (http://nedbatchelder.com/code/coverage/)
. Puede utilizar easy_install:
sudo easy_install cobertura nasal
, a continuacin, en el directorio kivy:
hacer probar
cmo funciona
todas las pruebas se encuentran en kivy/pruebas, y el nombre de archivo que comi
ence con test_ <name>.py. Nariz Automation- camente reunir todas las clases y ar
chivos dentro de esta carpeta, y utilizarlos para generar los casos de prueba.
Para escribir una prueba, cree un archivo que respeta la nomenclatura anterior y
, a continuacin, empiece con esta plantilla:
importar
clase unittest XXXTestCase(unittest.TestCase):
def setUp(self):
# import clase y preparar todo aqu.
pase la
prueba de def_YYY(self):
# Coloque el caso de prueba aqu un self.assertEqual = 1(a), 1)
Reemplace XXX con un nombre apropiado que cubre los casos de pruebas y, a contin
uacin, sustituir 'AAA' con el nombre de la prueba. Si tienes dudas, comprobar cmo
las otras pruebas han sido escritas.
A continuacin, para ejecutarlos, simplemente ejecute:
hacer la prueba
si desea ejecutar ese archivo slo, puede ejecutar:
nosetests kivy/tests/test_yourtestcase.py
GL
GL la prueba de la unidad de pruebas unitarias son ms difciles. Usted debe saber q
ue incluso si OpenGL es un estndar, la salida/renderizado no se. Depende de la GP
U y el controlador usado. Para estas pruebas, el objetivo es guardar el resultad

o de la renderizacin en fotograma X, y compararla con una imagen de referencia.


En la actualidad, se generan imgenes en 320x240 pxeles, inpng formato.
32

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.

<classname>_ <funcname>- <r-call-count>.png


r-call-count representa el nmero de veces que se llama auto.Render dentro de la f
uncin de prueba.
Las imgenes de referencia se denominan:
ref_ <classname>_ <funcname>- <r-call-count>.png
puede reemplazar fcilmente la imagen de referencia con uno nuevo si lo desea.
Informes sobre la cobertura la
cobertura se basa en la ejecucin de las pruebas anteriores. Las estadsticas sobre
la cobertura de cdigo se calculan automticamente durante la ejecucin. Puede generar
un informe HTML de la cobertura con el comando:
hacer
a continuacin, abra la cubierta/htmlcov kivy/index.html con su navegador web favo
rito.

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

plataforma 35 caractersticas especficas a travs de Player, incluida la accesibilida


d, Bluetooth de baja energa, acceder y editar contactos, compartir, NFC, in-app,
el explorador Wi-Fi (habilitar, deshabilitar el acceso a los servicios Wi-Fi (Wi
-Fi Direct, la accesibilidad, la red IP actual info en la red, etc.), la captura
de la cmara (vdeo), la pantalla de la cmara, Google Play la integracin, el lanzamie
nto del telfono call interface, interfaz de sms, la geolocalizacin, la interaccin c
on las notificaciones internacionales- izacin (I18N), y todos los que faltan impl
ementaciones de plataforma de caractersticas existentes.
Bajo el cap se utilizar en Android, PyJNIus PyOBJus en OS X e iOS ctypes en Window
s y las API nativas en Linux. Esto probablemente incluira tambin la mejora y PyOBJ
us PyJNIus para manejar interfaces que no pueden ahora.
Referencias:
Https://github.com/kivy/pyjnius https://github.com/kivy/plyer
Https://github.com/kivy/python-for-android
https://github.com/kivy/kivy-ios Https://github.com/kivy/pyobjus
Resultados esperados: un resultado exitoso incluira moviendo el cdigo Java/PyOBJus
de p4a/kivy-ios a player y la implementacin de todas o algunas de las nuevas fac
hadas que se decidi con el estudiante.
los mentores: Akshay Arora, Ryan Pessa Requisitos: Acceso a Linux, Windows, OS X
, iOS Device, dispositivo Android.
nivel de tarea: Intermedio habilidades deseadas: familiaridad con PyJNIus, PyOBJ
us.
Proyectos Avanzados
estos proyectos pueden implicar muy profundo conocimiento de Kivy internals, exi
stente en la peluda. Detalles de la compilacin multiplataforma, u otros temas bas
tante avanzada. Si usted se siente cmodo con las interioridades de Python, trabaj
ando con cdigo C, y utilizando Cython para construir sus propias extensiones en C
estos proyectos podrn apelar a usted.
Kivent: Integracin de azulejos
Descripcin: KivEnt es una entidad modular basado en componentes de motor de juego
construido en la cima de Kivy.
KivEnt proporciona un alto rendimiento enfoque para crear juegos en Python que e
vita algunos de los peores casos de sobrecarga de Python usando construcciones C
ython especializados.

El alumno trabajar para finalizar la creacin de un mdulo de azulejos totalmente fun


cional que soporta la gama completa de tipos de mapas admite: Mosaico hexagonal,
cuadrado, cuadrado isomtrico y azulejos. Esta tarea es probable que involucran e
scribir tanto la lgica de representacin y sistemas de juego. Adems, el estudiante s
er responsable de completar una licencia MIT TMX (mosaico) Formato de archivo par
a su uso en KivEnt cargador.
Referencias:

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

Requisitos: Acceso al menos a una plataforma Kivy.


Tarea: Nivel Avanzado habilidades deseadas: familiaridad con Cython, Python y ga
me dev conceptos matemticos relacionados.
Python para Android: Nuevas caractersticas
Descripcin: Python para Android es un proyecto para crear su propia distribucin de
Python in- cluye los mdulos que desee, y crear un APK incluyendo Python libs y s
u aplicacin.
Esta herramienta fue recientemente reescrito para proporcionar un nuevo, fcil de
usar y la interfaz extendida.
El alumno trabajar para ayudar a traer este nuevo toolchain a paridad de caracters
ticas con el viejo toolchain y mejorarla con nuevas caractersticas como: soporte
de pantalla de bienvenida personalizada in- cluye la animacin, permite personaliz
ar completamente AndroiManifest.xml y trabajar en cosas que faltan conocidos (en
lace a continuacin).
Referencias:
Https://github.com/kivy/python-for-android#known-missing-stuff-from-p4a
Resultados esperados: un resultado exitoso implica el nuevo p4un toolchain en pa
ridad de caractersticas con el viejo toolchain, incluyendo funcionalidad adiciona
l como se describe anteriormente.
los mentores: Alexander Taylor, Ryan Pessa Requisitos: Acceso a Linux y Android.
Tarea: Nivel Avanzado habilidades deseadas: familiaridad con PyJNIus Cython, Pyt
hon y
cmo ponerse en contacto con desarrolladores
Toda comunicacin debe suceder a travs de canales pblicos, correos electrnicos y mens
ajes privados de IRC estn desanimados.
Haz tus preguntas en el foro de usuarios Kivy https://groups.google.com/group/ki
vy-users o enviar un mail a Kivy-users@googlegroups.com
asegrese de unirse al grupo de usuarios de kivy-dev Https://groups.google.com/for
um/#!forum/kivy-dev. demasiado:
Tambin puede intentar ponerse en contacto con nosotros en el IRC (chat), para obt
ener el IRC devs tiradores de la mencionada visita https://kivy.org/#aboutus.
Asegrese de leer las reglas IRC antes de conectar. Conecte al webchat.
La mayora de nuestros desarrolladores estn situados en Europa, India y Amrica del N
orte por lo que debe tener en cuenta horas de vigilia tpica de estas zonas.
Cmo ser un buen estudiante
si desea participar como estudiante y desea maximizar sus posibilidades de ser a
ceptado, comienza a hablar con nosotros hoy y pruebe a solucionar algunos pequeos
problemas para acostumbrarse a nuestro flujo de trabajo. Si sabemos que usted p
uede trabajar con nosotros, usted tendr muchas ms posibilidades de ser seleccionad
o.
Aqu est una lista de comprobacin:
Asegrese de leer a travs de la pgina web y al menos ojear la documentacin.
mirar el cdigo fuente.

Lea nuestra contribucin directrices.


37

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

arjeta grfica, y se debe aceptar.


Si no es as, esto significa que probablemente han desencadenado algunos sin un cdi
go OpenGL OpenGL disponibles con- texto. Si est cargando las imgenes, atlas, media
nte instrucciones grficas, debe generar una ventana primero:
# 1 (mtodo preferido) de kivy.base importar EventLoop EventLoop.Asegurar_window()
mtodo # 2 de kivy.core.Window ventana importar
si no, por favor, un informe detallado del problema en github siguiendo las inst
rucciones en la seccin Reporte de un problema de la contribucin a la documentacin.
Esto es muy importante para nosotros, porque ese tipo de error puede ser muy difc
iles de depurar. Nos dan toda la informacin que pueda dar sobre su entorno y su e
jecucin.
4.1.2
Usted glGenerateMipmap undefined symbol: tarjeta grfica o sus controladores podra
ser demasiado viejo. Actualice sus controladores de grficos a la ltima versin dispo
nible y vuelva a intentarlo.
4.1.3 ImportError: No module named caso
si utiliza Kivy desde nuestra versin de desarrollo, debe compilarlo antes de util
izarlo. En el directorio de kivy, hacer:
fuerza
39

4.2 FAQ Android


4.2.1 no podran extraer datos pblicos,
este mensaje de error puede ocurrir en diversas circunstancias. Asegrese de que:
Usted tiene un telfono con una tarjeta SD
Actualmente no est en "modo de almacenamiento masivo USB"
Usted tiene permisos para escribir en la tarjeta SD
en el caso del "Almacenamiento masivo USB" modo de error, y si no desea mantener
desenchufar el dispositivo, establezca la opcin USB con alimentacin.
4.2.2 Bloqueo en interaccin tctil en Android 2.3.x
ha habido informes de bloqueos en dispositivos basados en 200/205 Adreno. Las ap
licaciones no se ejecutan bien pero fallan cuando interactuaron con/a travs de la
pantalla.
Estos informes tambin mencionan la cuestin se resolvi cuando se mueve a un rom de I
CS o superior.
4.2.3 Es posible tener un quiosco app en Android 3.0 ?
Thomas Hansen han escribi una respuesta detallada en la lista de correo de usuari
os de kivy:
https://groups.google.com/d/msg/kivy-users/QKoCekAR1c0/yV-85Y_iAwoJ
Bsicamente, necesita el dispositivo raz, quite el SystemUI paquete, agregar alguna
s lneas para el xml config- uracin y listo.
4.2.4 Cul es la diferencia entre python para Android de Kivy y SL4A?
A pesar de tener el mismo nombre, Kivy's python para Android no est relacionado c
on el python-para-android proyecto de SL4A, PY4a o Android-python27. Son clarame
nte diferentes proyectos con objetivos diferentes. Puede ser capaz de utilizar p
y4A con Kivy, pero ningn cdigo o se han hecho esfuerzos para hacerlo. El equipo co
nsidera que Kivy nuestro python para Android es la mejor solucin para nosotros de
ahora en adelante, y los intentos de integrar y apoyar py4A no es un buen uso d
e nuestro tiempo.
4.3 Proyecto FAQ
4.3.1 Por qu usar Python? No es lento?
Tratemos de dar una respuesta exhaustiva; por favor, ten paciencia con nosotros.
Python es un lenguaje muy gil que le permite hacer muchas cosas en una (por compa
racin) poco tiempo.
Para muchos escenarios de desarrollo, preferimos escribir nuestra aplicacin rpidam
ente en un lenguaje de alto nivel como Python, probarlo, luego opcionalmente opt
imizarla.

Pero qu acerca de la velocidad? Si se compara la velocidad de ejecucin de las imple


mentaciones para un determinado conjunto de algo- rithms (esp. nmeros) encontrar q
ue Python es mucho ms lento que digamos, C++. Ahora usted puede ser an ms convencid
o de que no es una buena idea en nuestro caso utilizar Python. Dibujo de grficos
sofisticados (y no estamos hablando de su abuela OpenGL aqu) es computacionalment
e muy ex- pensativo y dado que a menudo nos quieren hacer que para experiencias
de usuario enriquecidas, que sera un argumento justo.
Pero, prcticamente en todos los casos su aplicacin termina pasando la mayor parte
del tiempo (por ahora) la ejecucin del

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 &gt;= 2.7 y Python &gt;=
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

el mismo: 41 productoras de aplicaciones de alta calidad para los nuevos interfa


ces de usuario. Es por ello que alentamos a todos a base de nuevos proyectos en
lugar de Kivy PyMT. Desarrollo activo de PyMT se ha estancado.
Revisiones de mantenimiento estn siendo aceptadas.
4.3.5 Acepta parches?
S, nos encantan los parches. A fin de garantizar una buena integracin de tus preci
osos cambios sin embargo, asegrese de leer nuestra contribucin directrices. Obviam
ente no aceptamos cada parche. El parche ha de ser coherente con nuestro gua y, l
o que es ms importante, tiene sentido. Tiene sentido hablar con nosotros antes de
venir para arriba con cambios mayores, especialmente las nuevas caractersticas.
4.3.6 El proyecto Kivy participar en Google Summer of Code ?
Los estudiantes potenciales preguntar si participamos en GSoC. La respuesta es c
lara: en efecto. :-)
si desea participar como estudiante y desea maximizar sus posibilidades de ser a
ceptado, comienza a hablar con nosotros hoy y pruebe a corregir algunos pequeos (
o ms, si puedes ;-) problemas para acostumbrarse a nuestro flujo de trabajo. Si s
abemos que usted puede trabajar con nosotros, eso sera un gran plus.
Aqu est una lista de comprobacin:
Asegrese de leer a travs de la pgina web y al menos ojear la documentacin.
mirar el cdigo fuente.
Lea nuestra contribucin directrices.
Elija una idea que te parezca interesante desde la lista de ideas (vase el enlace
anterior) o proponer su propia idea.
Hacer una investigacin por s mismo. No es GSoC sobre nosotros enseando algo y usted
paga por conseguir eso. Se trata de usted tratando de alcanzar metas acordadas
por usted con nuestro apoyo. La principal fuerza impulsora en este debe ser, obv
iamente, usted mismo. Muchos estudiantes vienen y preguntan qu se debe hacer. Bue
no, no sabemos porque conocemos ni sus intereses ni sus habilidades.
Nos muestran eres serio y de tomar la iniciativa.
Escribir un borrador de propuesta sobre lo que desea hacer. Incluya lo que usted
entiende el estado actual es (ms o menos), lo que le gustara mejorar y 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. Si sus preguntas no reflejan que ya h
as pensado qu ests preguntando, podra no ser bien recibida.
Buena suerte! :-)
42

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&gt;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):

En la lnea 12 en la clase LoginScreen, podemos sobrecargar el mtodo__init__() para


aadir widgets y definir su comportamiento:
def __init__(self,
kwargs):
super(LoginScreen, auto).__init__( kwargs)
No debe olvidar llamar a super a fin de implementar la funcionalidad de la clase
original est sobrecargado. Tenga en cuenta tambin que es una buena prctica para no
omitir el
kwargs mientras se llama super, como a veces se utilizan internamente.
Pasando a la lnea 15 y ms all:
self.cols = 2 self.add_widget(Label(text='Nombre de Usuario') self.username =(Te
xtInput multiline=false) self.add_widget(self.username) self.add_widget(Label(te
xt='password') self.Password = TextInput(password=True, multiline=false) self.ad
d_widget(self.contrasea)
pedimos el GridLayout para administrar sus nios en dos columnas y agregar y aText
Input aLabel como para el nombre de usuario y contrasea.
Ejecuta el cdigo anterior le dar una ventana que debe tener este aspecto:
Intente cambiar el tamao de la ventana y ver que los widgets en pantalla se ajusta
n segn el tamao de la ventana sin que usted tenga que hacer nada. Esto es porque e
l tamao de los widgets utilizan insinuando de forma predeterminada.
El cdigo anterior no maneja la entrada del usuario, no realiza ningn tipo de valid
acin o cualquier otra cosa. Vamos a profundizar en este andWidget tamao y colocacin
en las prximas secciones.
51

6.6 Caractersticas de plataforma


abriendo una aplicacin de terminal y establecer las variables de entorno de kivy.
En Windows, simplemente haga doble clic en el kivy.bat y un terminal se abrir con
todas las nece- sario variables ya establecidos.
En nix sistemas, abrir el terminal de su eleccin y, si no est instalado kivy global
mente:
exportar python=$PYTHONPATH:/ruta/a/kivy_installation
52

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.

SDL_KIVY2_PATH Si se establece, el SDL2 bibliotecas y cabeceras de esta ruta se


utiliza cuando se compila kivy en lugar de los instalados en todo el sistema. Pa
ra utilizar las mismas bibliotecas kivy mientras se ejecuta una aplicacin, esta r
uta debe ser aadido al inicio de la variable de entorno PATH.
Nuevo en la versin 1.9.0.
Advertencia: Este camino es necesario para la compilacin de Kivy. No es necesario
para la ejecucin del programa.
53

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

Nuevo en la versin 1.4.0.


KIVY_Metrics_DENSITY Si se establece, el valor se utilizar forMetrics.Densidad.
Nuevo en la versin 1.5.0.
KIVY_Metrics_FONTSCALE
Si est establecido, el valor se utilizar forMetrics.fontscale.
Nuevo en la versin 1.5.0.
7.5 Grficos
_KIVY GLES_limits si la GLES2 se aplican restricciones (el valor predeterminado,

o si se establece en 1). Si se establece en false, no ser verdaderamente Kivy GL


ES2 compatible.
La siguiente es una lista de las posibles incompatibilidades que resultan cuando
se establece en true.
Si la malla es true, el nmero de ndices en una malla est limitada a 65535 ndices bli
tting textura cuando a una textura, color y los datos (buffer) de formato debe s
er el mismo formato como el blit utilizados en la creacin de texturas. En el escr
itorio, la conversin de color diferente est correctamente manejado por el conducto
r, mientras que en la mayora de los dispositivos Android, dejar de hacerlo. Ref:
Https://github.com/kivy/kivy/issues/1600
nuevo en la versin 1.8.1.
KIVY_BCM_ID_DISPMANX Cambiar la configuracin predeterminada de Raspberry Pi panta
lla para usar. La lista de valor disponible es accesible en vc_dispmanx_types.h.
El valor predeterminado es 0:
0: DISPMANX_ID_principal_LCD 1: DISPMANX_ID_AUX_LCD
2: DISPMANX_ID_HDMI 3: DISPMANX_ID_SDTV
4: DISPMANX_ID_FORCE_LCD 5: DISPMANX_ID_FORCE_TV
6: DISPMANX_ID_FORCE_otros
55

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

9.1 Core proveedores y proveedores de entrada


una idea que es clave para comprender la Kivy internals es el de la modularidad
y la abstraccin. Intentamos resumir las tareas bsicas tales como abrir una ventana
, mostrar imgenes y texto, reproduccin de audio, la obtencin de imgenes desde la cmar
a, correccin ortogrfica y as sucesivamente. Nosotros llamamos a estas tareas bsicas.
Esto hace que la API fcil de usar y fcil de ampliar. Lo que es ms importante, nos
permite utilizar -lo que llamamos - proveedores especficos para las respectivas s
ituaciones en las que su aplicacin se est ejecutando. Por ejemplo, en OSX, Linux y
Windows, hay diferentes las API nativas para las diferentes tareas. Un pedazo d
e cdigo que utiliza una de estas API especficas para hablar con el sistema operati
vo en un lado y en el otro Kivy (actuando como una capa de comunicacin intermedia
) es lo que llamamos un proveedor de ncleo. La ventaja de utilizar proveedores de
ncleos especializados para cada plataforma es que podemos aprovechar al mximo la
funcionalidad expuesta por el sistema operativo y actuar tan eficientemente como
sea posible. Tambin ofrece a los usuarios una eleccin. Adems, mediante el uso de b
ibliotecas que se distribuyen con cualquier plataforma, podemos reducir efectiva
mente el tamao de la distribucin Kivy y fabricar envases ms fcil. Esto facilita tamb
in el puerto Kivy a otras plataformas. El puerto de Android se benefici enormement
e de ello.
Seguimos el mismo concepto con gestin de entrada. Un proveedor de entrada es un f
ragmento de cdigo que agrega soporte para un dispositivo de entrada, como Apple,
TUIO trackpads o un emulador de ratn. Si necesita agregar soporte para un nuevo d
ispositivo de entrada, simplemente puede proporcionar una nueva clase que lee lo
s datos de entrada del dispositivo y los transforma en Kivy sucesos bsicos.
Grficos
los grficos de Kivy 9.2 API es las nuestras derechas de OpenGL. En el nivel ms baj
o, Kivy cuestiones de hardware acelerado utilizando los comandos de dibujo OpenG
L. Escribir cdigo OpenGL sin embargo puede ser un poco confuso, especialmente par
a los recin llegados. Por eso proporcionamos los grficos API que permite dibujar c
osas usando simples metforas que no existe como tal en OpenGL (p. ej. Lienzo, rec
tngulo, etc.).
Todos nuestros propios widgets utilizar esta API de grficos, que se implementa en
el nivel de C por razones de rendimiento.
Otra ventaja de la API de grficos es su capacidad para optimizar automticamente lo
s comandos de dibujo que tu cdigo. Esto es especialmente til si no eres un experto
en tuning OpenGL. Esto hace que el cdigo de dibujo ms eficaz en muchos casos.
Por supuesto, puede usar los comandos de OpenGL raw si lo prefiere. Nuestro obje
tivo es la versin OpenGL 2.0 ES (GLES2) en todos los dispositivos, por lo que si
quiere permanecer en la cruz-plataforma compatible, le recomendamos que slo utili
ce el GLES2 funciona.
9.3 Core
el cdigo en el paquete bsico ofrece las funciones ms utilizadas, tales como: el
reloj se puede utilizar para programar el reloj temporizador de eventos. Ambos t

emporizadores one-shot y los cronmetros peridicos son compatibles.


Cach Cach si necesitas algo que use con frecuencia, puede utilizar nuestra clase p
ara que en lugar de escribir el suyo propio.
Deteccin de gestos enviamos un reconocedor de gestos simples que usted puede util
izar para detectar la vari- ou tipos de trazos, como crculos o rectngulos. Se pued
e entrenar para detectar sus propios trazos.
Kivy Kivy Idioma El idioma usado para describir de forma sencilla y eficaz de in
terfaces de usuario.
60

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 &amp; 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

9.7 Los widgets y entrega de Eventos


El trmino widget se utiliza a menudo en contextos de programacin GUI para describi
r alguna parte del programa que interacta con el usuario. En Kivy, un widget es u
n objeto que recibe los eventos de entrada. No necesariamente tiene que tener un
a representacin visible en la pantalla. Todos los widgets son arreglados en un wi
dget tree (que es una estructura de datos de rbol como se conoce en las clases de
ciencias de la computacin): Un widget puede tener cualquier nmero de widgets hijo
o ninguno. Hay exactamente una raz widget en la parte superior del rbol que no ti
ene padres, y todos los dems widget Widgets son directa o indirectamente a los nio
s de este widget (razn por la cual es llamado la raz).
Cuando se dispone de datos de entrada nuevo, Kivy enva un evento por cada pulsacin
. La raz del rbol widget widget recibe por primera vez el evento. Dependiendo del
estado del tacto, el on_TOUCH_down_TOUCH_, en movimiento o en_TOUCH_up evento se
envi (con el toque como argumento) a la raz widget, lo que se traduce en la raz de
l widget correspondiente en_TOUCH_down_TOUCH_, en movimiento o en_TOUCH_manejado
r de evento que se llama.
Cada widget (esto incluye el widget de raz) en el rbol puede elegir digerir o pasa
r el evento.
Si un controlador de eventos devuelve True, significa que el suceso ha sido dige
rido y se manejan adecuadamente. Ningn procesamiento adicional que ocurrir con ese
evento. De lo contrario, el controlador de eventos pasa el widget a sus propios
hijos llamando a su superclase la implementacin del controlador de eventos respe
ctivos. Esto va todo el camino hasta la base de la clase Widget, que - en su toq
ue controladores de eventos - no hace nada, pero pasan los toques a sus hijos:
# Esto es anlogo para mover/Up:
def sobre_TOUCH_down(self, tctil):
para un nio en self.Los nios[:]:
si el nio.dispatch('on_TOUCH_down', tctil):
return true
esto realmente es mucho ms fcil de lo que parece. Un ejemplo de cmo esto puede ser
usado para crear bonitas apli- caciones rpidamente ser dada en la seccin siguiente.
A veces se desea restringir el rea de la pantalla que un widget de relojes por to
ques. Puede utilizar un widget de colisionar_point() mtodo para lograrlo. Simplem
ente pase el toque la posicin y devuelve True si el contacto est dentro de la zona
de 'observados' o False en caso contrario. Por defecto, este comprueba la regin
rectangular de la pantalla que est descrito por el widget de Pos (Posicin; x e y)
y el tamao (anchura y altura), pero puede invalidar este comportamiento en su pro
pia clase.
62

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

cin son ejemplos de distribuidores de eventos.


Objetos EventDispatcher dependen del bucle principal para generar y gestionar ev
entos.
63

10.2 El bucle principal


como se indica en la ilustracin anterior, Kivy tiene un bucle principal. Este buc
le se ejecuta durante toda la apli- cacin, a lo largo de su vida y slo se cierra a
l salir de la aplicacin.
Dentro del bucle, en cada iteracin, se generan eventos de entrada de usuario, sen
sores de hardware o un par de otras fuentes, y los marcos son prestados a la pan
talla.
Su aplicacin se especifican callbacks (ms sobre esto ms adelante), que son llamados
por el bucle principal. Si una llamada- volver tarda demasiado o no salir en ab
soluto, el bucle principal se rompe y su aplicacin no funcionar correctamente.
En aplicaciones de Kivy, tienes que evitar largas/bucles infinitos o dormir. Por
ejemplo, el siguiente cdigo hace ambas cosas:
while true:
animar_algo() hora.sleep(.10)
Cuando se ejecuta, el programa nunca podr salir de su bucle, evitando Kivy de hac
er todas las otras cosas que necesita hacer. Como resultado, todo lo que ver es u
na ventana negra que usted no ser capaz de interactuar con ella. En su lugar, nec
esita "Schedule" youranimate_algo() se llama repetidamente.
10.2.1 Programar un evento repetitivo
puede llamar a una funcin o un mtodo cada x veces por segundo usingschedule_interv
al(). Aqu est un ejemplo de llamada a una funcin denominada mi_callback 30 veces po
r segundo:
def mi_callback(dt):
imprimir 'My devolucin de llamada', DT Clock.Schedule_interval(mi_callback, 1 / 3
0.)
Usted tiene dos maneras de desprogramar un evento programado anteriormente. La p
rimera sera utilizar desprogramar():
Reloj.desprogramar(mi_callback)
o puede devolver false en la devolucin de llamada, y su evento ser automticamente p
rogramados:
Count = 0 def mi_callback(dt):
conteo global contar += 1 si count == 10:
impresin 'ltima llamada de mi llamada, bye bye !' devolver false print 'My devolucin
de llamada' Clock.Schedule_interval(mi_callback, 1 / 30)
10.2.2 Programar un evento puntual
Usingschedule_once(), puede llamar a una funcin "despus", como en el siguiente fot
ograma, o en X segundos:
def mi_callback(dt):
imprimir 'My devolucin de llamada !' Clock.Schedule_once(mi_callback, 1)
64

Esto callmy_callback en un segundo. El segundo argumento es la cantidad de tiemp


o que se debe esperar antes de llamar a la funcin, en cuestin de segundos. Sin emb
argo, puede obtener algunos resultados con otros valores especiales para el segu
ndo argumento:
Si x es mayor que 0, la devolucin ser llamado en X segundos
Si x es 0, la devolucin de llamada que se llamar despus el siguiente fotograma Si x
es -1, la devolucin ser llamado antes del siguiente fotograma
el -1 se utiliza principalmente cuando usted est ya en un evento programado, y si

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

10.4 Crear eventos personalizados


para crear un evento dispatcher con eventos personalizados, debe registrar el no
mbre del evento en la clase y, a continuacin, crear un mtodo con el mismo nombre.
Vase el siguiente ejemplo: la
clase EventDispatcher(MyEventDispatcher):
kwargs):
def __init__(self,
self.register_event_type('on_test') super(MyEventDispatcher, auto).__init__( kwargs
)
def do_algo(self, valor):
# cuando hacer_algo es llamado, el 'on_test' # evento ser enviado con el valor au
to.dispatch('on_test', valor)
en def_test(self, args):
print "soy enviado", args
10.5 Acople callbacks
para utilizar los eventos, usted tendr que enlazar las devoluciones de llamada pa
ra ellos. Cuando el evento se distribuye, sus callbacks ser llamada con los parmet
ros pertinentes para ese evento concreto.
Un callback puede ser cualquier callable python, pero usted necesita para asegur
arse de que acepta los argumentos que emite el evento. Para ello, suele ser ms se
guro para aceptar el argumento args, que captura todos los argumentos en la lista

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

OptionProperty DictProperty ListProperty ReferenceListProperty BooleanProperty A


liasProperty
10.7 Declaracin de una propiedad
para declarar las propiedades, debe declararlos en el nivel de clase. La clase v
a a hacer el trabajo para instanciar el verdadero atributos cuando se crea el ob
jeto. Estas propiedades no son atributos: son mecanismos para la creacin de event
os en funcin de sus atributos:
class miwidget(Widget):
texto = StringProperty('')
kwargs y usar super() para llamar a los padres
al anular __init__, aceptar siempre
__init__ Mtodo, pasando en tu clase instancia:
def __init__(self,
kwargs):
super(Miwidget, auto).__init__( kwargs)
10.8 enviar un evento propiedad
propiedades Kivy, por defecto, proporcionar un_ <property_name>Evento. Este even
to es llamado cuando el valor de la propiedad ha cambiado.
Nota: Si el nuevo valor de la propiedad es igual al valor actual, entonces el_ <
property_name>Evento no ser llamado.
Por ejemplo, considere el siguiente cdigo:
1 clase CustomBtn(Widget):
2 3 pulsado = ListProperty([0, 0])
4 en 5 def_TOUCH_down(self, tctil):
6 Si self.colisionan_point( touch.pos):
7 auto.presionado = touch.pos
8 return true
9 volver super(CustomBtn, auto).en_TOUCH_down(touch)
10 11 def on_presionado(self, instancia pos):
12 Imprimir ('pulsa en {pos}'.Format(pos=pos)
en el cdigo anterior en la lnea 3:
presionado = ListProperty([0, 0])
Podemos definir la propiedad de tipo ListProperty prensado, dndole un valor prede
terminado de [0, 0]. Desde este punto en adelante, el on_pulsado evento ser llama
do cuando se modifica el valor de esta propiedad.
67

En la Lnea 5:

def sobre_TOUCH_down(self, tctil):


Si self.colisionan_point( touch.pos):
self.presionado = touch.pos devolver True volver super(CustomBtn, auto).en_TOUCH
_down(touch)
Vamos a sobreescribir elen_TOUCH_down(), mtodo de la clase Widget. Aqu, podemos co
mprobar que la colisin de contacto con nuestro widget.
Si el toque cae dentro de nuestro widget, cambiamos el valor de presionado para
tocar.pos y devolver True, lo que indica que hemos consumido el tacto y no desea
que se propaguen ms.
Por ltimo, si el toque cae fuera de nuestro widget, pedimos el evento original us
ando super(...) y devolver el resultado. Esto permite la propagacin de eventos tct
iles para continuar como lo hara normalmente se han producido.
Finalmente en la lnea 11:
def on_presionado(self, instancia pos):
imprimir ('pulsa en {pos}'.Format(pos=pos)
definimos un on_pulsado funcin que ser convocada por la propiedad siempre que se c
ambia el valor de la propiedad.
Nota: Esta en_ <prop_name>Evento es llamado dentro de la clase donde se define l
a propiedad. A MONI- TOR/observar cualquier cambio en una propiedad fuera de la
clase donde se define, debe enlazar la propiedad como se muestra a continuacin.
Enlazar a la propiedad
cmo supervisar los cambios en una propiedad cuando todo lo que usted tiene acceso
a la instancia es un widget? Youbind a la propiedad:
su_widget_instance.bind(property_name=nombre_funcion)
Por ejemplo, considere el siguiente cdigo:
1 clase RootWidget(BoxLayout):
kwargs):
2 3 def __init__(self,
4 super(RootWidget, auto).__init__( kwargs)
5 self.add_widget(Botn(text="btn 1'))
6 cb = CustomBtn()
7 cb.bind(pulsado=self.btn_pulsado)
8 self.add_widget(cb)
9 self.add_widget(Botn(text="btn 2'))
10 11 def btn_presionado(self, instancia pos):
12 Imprimir ('pos: imprime desde root widget: {pos}'.Format(pos=.pos)
si ejecuta el cdigo tal como est, observar dos declaraciones de impresin en la conso
la. Uno de los En_evento que se llama prensado dentro de la clase CustomBtn y ot
ro de la btn_pulsado funcin que enlazamos con el cambio de la propiedad.
La razn por la que ambas funciones se denominan es simple. Enlace no significa el
reemplazo. Habiendo tanto de estas funciones es redundante y por lo general se
debe utilizar slo uno de los mtodos de escuchar- ing/reaccionando a los cambios de
propiedad.
Usted tambin debera tomar nota de los parmetros que se pasan a la_ <property_name>E
l evento o la funcin enlazado a la propiedad.
68

def btn_presionado(self, instancia pos):


El primer parmetro es legtima, que es la instancia de la clase donde esta funcin es
t definida. Puede usar una funcin en lnea como sigue:
1 cb = CustomBtn()
2 3 def _LOCAL_func(ejemplo, pos):
4 Imprimir ('pos: imprime desde root widget: {pos}'.Format(pos=pos)
5 6 cb.bind(pulsado=_local_func)
7 auto.add_widget(CB)
El primer parmetro sera la instancia de la clase se define la propiedad.
El segundo parmetro sera el valor, que es el nuevo valor de la propiedad.
Aqu est el ejemplo completo, derivada de los fragmentos de cdigo anteriores, que se

puede usar para copiar y pegar en un editor para el experimento.


1 de kivy.app importacin
de kivy App 2.uix.Widget Widget
de kivy IMPORTACIN 3.uix.Button Botn importar
4 de kivy.uix.boxlayout BoxLayout importacin
de importacin kivy.properties 5
6 7 clase RootWidget ListProperty(BoxLayout):
8 9 def __init__(self,
kwargs):
10 super(RootWidget, auto).__init__( kwargs)
11 self.add_widget(Botn(text="btn 1')
12 cb = CustomBtn()
13 cb.bind(pulsado=self.btn_pulsado)
14 self.add_widget(cb)
15 self.add_widget(Botn(text="btn 2')
16 17 def btn_presionado(self, instancia pos):
18 Imprimir ('pos: imprime desde root widget: {pos}'.Format(pos=pos)
19 20 clase CustomBtn(Widget):
21 22 presionado = ListProperty([0, 0])
23 24 def sobre_TOUCH_down(self, tctil):
25 si self.colisionan_point( touch.pos):
26 self.presionado = touch.pos
27 # consumimos el toque. return false aqu para propagar
28 # el toque ms a los nios.
29 return true
30 retorno super(CustomBtn, auto).en_TOUCH_down(touch)
31 32 def on_presionado(self, instancia pos):
33 Imprimir ('pulsa en {pos}'.Format(pos=pos)
34 35 clase TestApp(App):
36 37 def construir(self):
38 volver RootWidget()
39 40 41 si __name__ == "__main__':
69

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 -&gt; -&gt; -&gt; 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

Si slo se trata de un evento de movimiento, ser enviado toon_motion()


Si es un evento tctil, (x,y) de la posicin de contacto (rango 0-1) se ajustar al ta
mao de la ventana (ancho/alto), y se ha enviado a:
- sobre_TOUCH_down() - En_TOUCH_move() - sobre_TOUCH_up()
11.2 Movimiento perfiles de eventos
en funcin de su hardware y los proveedores de insumos utilizados, ms informacin, pu
eden estar disponibles para usted. Por ejemplo, una entrada tctil tiene una (x,y)
la posicin, sino que tambin podra tener la informacin de presin de tamao, blob, un ve

ctor de aceleracin, etc.


Un perfil es una cadena que indica qu caractersticas estn disponibles dentro del ev
ento de movimiento. Imaginemos que ests en anon_TOUCH_mtodo move:
def sobre_TOUCH_move(self, tctil):
print(touch.profile) volver super(..., auto).en_TOUCH_move(Touch)
La impresin de salida podra:
['pos', 'ngulo']
Advertencia: muchas personas mezclar el nombre del perfil y el nombre de la prop
iedad correspondiente. Slo porque 'ngulo' est en el perfil disponible no significa
que el objeto de evento tctil tendr un ngulo de propiedad.
Para el 'pos', el perfil propertiespos, X, Y y estar disponible. Con el 'ngulo' de
perfil, la propiedad estar disponible. Como hemos dicho, para eventos tctiles 'po
s' es un perfil obligatorio, pero no 'ngulo'. Usted puede extender su interaccin c
omprobando si el'angle' perfil existe:
def sobre_TOUCH_move(self, tctil):
print('el toque est en la posicin", toque.pos) si 'ngulo' en touch.profile:
print('El ngulo es tctil, toque'.a)
Usted puede encontrar una lista de los perfiles disponibles en themotionevent do
cumentacin.
11.3 Toque Eventos
Un toque es un evento donde el propertyis specializedMotionEvent_touch se evala c
omo True. Para todos los eventos tctiles, usted tiene automticamente las posicione
s X e Y, la escala para el ancho y la altura de la ventana. En otras palabras, t
odos los eventos tctiles tienen el'pos' perfil.
11.3.1 Toque aspectos bsicos del evento
por defecto, eventos tctiles son enviados a todos los widgets mostrados actualmen
te. Esto significa widgets recibe el evento tctil si ocurre dentro de su rea fsica
o no.
72

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

# Si el toque choca con nuestro widget, Let's grab toque.grab(self)


# y aceptar el contacto.
devolver True
def sobre_TOUCH_up(self, tctil):
# aqu, usted no comprueba si el toque choca o cosas as.
# slo necesita comprobar si es un evento tctil agarr si touch.grab_current es legtim
a:
# ok, el toque actual es enviado por nosotros.
# Hacer algo interesante aqu print('hola mundo')
# no olvide soltar nosotros, o usted podra tener efectos secundarios touch.soltar
(self)
# y aceptar la ltima de devolver True
11.3.7 Toque Event Management
para ver cmo eventos tctiles estn controladas y se propag entre widgets, consulte la
seccin eventos tctiles Widget burbujeante.
75

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

12.3 que atraviesa el rbol de


la instancia de la clase Widget'snios propiedad contiene la lista de todos los nio
s. Se puede recorrer fcilmente el rbol haciendo:
root = BoxLayout() # ... aadir widgets a raz ...
para un nio en root.Nios:
print(nio)
Sin embargo, esta debe usarse con cuidado. Si desea modificar la lista de nios co
n uno de los mtodos que se indican en la seccin anterior, debe usar una copia de l
a lista de esta manera:
para un nio en root.Los nios[:]:
# manipular el rbol. Por ejemplo, quite todos los widgets que tienen un # ancho &
lt; 100 si el nio.width &lt; 100:
root.remove_widget(nio)
Widgets no influyen en el tamao/pos de sus hijos por defecto. Atributo Thepos es
la posicin absoluta en coordenadas de pantalla (a menos que usted use therelative
layout. Ms sobre esto ms adelante), es una absoluta andsize tamao.
12.4 Widgets ndice Z
El orden de dibujo de widget se basa en la posicin del widget widget en el rbol. T
headd_widget mtodo toma un parmetro index que puede utilizarse para especificar su
posicin en el rbol de widget:
root.add_widget widget(index),
la inferior se dibujarn widgets indexados por encima de aquellos con un ndice ms al
to. Tenga en cuenta que el valor predeterminado para el ndice es 0, de modo widge
ts aadido posterior son dibujados por encima de los dems, a menos que se especifiq
ue lo contrario.
12.5 organizar con diseos
diseo es un tipo especial de widget que controla el tamao y la posicin de sus hijos
. Hay dif- erentes tipos de diseos, permitiendo diferentes organizacin automtica de
sus hijos. Diseos use size_hint andpos_hint propiedades para determinar thesize
andpos de theirchildren.
BoxLayout: Organiza los widgets en una forma adyacente (vertical o horizontal),
de manera que llene todo el espacio. El tamao_hint propiedad de los nios puede uti
lizarse para cambiar las proporciones permitidas a cada nio, o establecer un tamao
fijo para algunos de ellos.
78

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

boxlayout, por su propia naturaleza, divide el espacio disponible entre itschild


ren igualmente. En nuestro ejem- plo, la proporcin es de 50-50, porque hemos twoc
hildren. Vamos a utilizar el tamao_hint en uno de los nios y ver los resultados.
84

Si un nio especifica tamao_HINT, especifica cunto espacio el widget se llevar a cabo


del tamao dado por el boxlayout. En nuestro ejemplo, el primer botn especifica .5
para tamao_HINT_x. El espacio para el widget se calcula de la siguiente manera:
Primera tamao del nio_hint dividido por primera tamao del nio_HINT + segundo tamao de
l nio_HINT + ...n(No de nios)
.5/(.5+1) = .333...
El resto de los BoxLayout'sancho se divide entre el resto de ellos nios. En nuest
ro ejemplo, esto
significa que el secondButton ocupa el 66,66% de thelayoutwidth.
Experimento withsize_hint para estar cmodo con l.
Si desea controlar la absolutesize de un widget, puede establecer el tamao_HINT_x
/size_HINT_y ambos o ninguno para que el widget'sancho y orheight atributos sern
honrados.
pos_hint es un diccionario, cuyo valor por defecto es vaca. Como forsize_HINT, di
seos honorpos_hint de manera diferente, pero en general, usted puede agregar valo
res a cualquiera de thepos atributos (x,y,izquierda,top,centro_x,centro_y) para
tener una posicin relativa a la itsparent theWidget.
Vamos a experimentar con el siguiente cdigo en kivycatalog a understandpos_HINT:
FloatLayout visualmente:
Botn:
texto: "Haremos" pos: 100, 100, tamao_HINT: .2, .4 Botn:
texto: "wee" Wiill pos: 200, 200 size_HINT: .4, .2
Botn:
texto: "ROCK YOU!!" pos_HINT: {'x': .3, 'y': .6} size_HINT: .5, .2
Esto nos da:
85

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

def update_rect(ejemplo, valor):


ejemplo.rect.pos = instancia.pos ejemplo.rect.Tamao = instancia.tamao
# escuchar los cambios de posicin y tamao layout_instancia.bind(pos=update_rect, s
ize=update_rect)
En kv:
FloatLayout:
canvas.antes:
Color:
rgba: 0, 1, 0, 1 Rectngulo:
# auto aqu se refiere al widget i.e BoxLayout pos: self.pos tamao: self.Tamao
del kv declaracin establece un enlace implcito: las dos ltimas lneas garantizan que
kv thepos andsize valores del rectngulo se actualizar cuando thefloatlayout thepos
de cambios.
Ahora ponemos los fragmentos anteriores en el shell de Kivy App.
Python pura forma:
de kivy.app App importacin de kivy.Importacin de grficos de color, el rectngulo de k
ivy.uix.floatlayout FloatLayout importacin de kivy.uix.Button Botn Importar
clase(FloatLayout RootWidget):
def __init__(self,
kwargs):
# Asegrese de que no estamos anulando cualquier funcionalidad importante super(Ro
otWidget, auto).__init__( kwargs)
# vamos a agregar un widget para este diseo self.add_widget(Botn( text="Hola Mundo
", tamao_HINT=(.5, .5), pos_HINT={'centro_x': .5, 'center_y': .5}))
clase MainApp(App):
def construir(self):
self.root root = = RootWidget() root.bind(size=Auto._update_rect, pos=Auto._upda
te_rect)
con root.Canvas.antes:
Color(0, 1, 0, 1) # verde; los colores varan de 0-1 no 0-255 self.rect = rectngulo
(size=root.tamao, pos=root.pos) volver root
def _update_rect(self, instancia valor):
self.rect.pos = instancia.pos self.rect.Tamao = instancia.tamao
87

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

12.6.1 Aadir un color al fondo de diseos personalizados regla/clase


nuestra manera de agregar un fondo a la instancia del diseo puede rpidamente torna
rse engorroso si necesitamos utilizar varios diseos. Para ayudar con esto, puede
crear una subclase de la disposicin y crear tu propio diseo que agrega un fondo.
Usando Python:
de kivy.app App importacin de kivy.Importacin de grficos de color, el rectngulo de k
ivy.uix.boxlayout BoxLayout importacin de kivy.uix.floatlayout FloatLayout import
acin de kivy.uix.importar imagen
clase AsyncImage RootWidget(BoxLayout):
pase la
clase(FloatLayout CustomLayout):
def __init__(self,
kwargs):
# Asegrese de que no estamos anulando cualquier funcionalidad importante super(se
lf), CustomLayout.__init__( kwargs)
con self.Canvas.antes:
Color(0, 1, 0, 1) # verde; los colores varan de 0-1 en lugar de 0,255 self.rect =
rectngulo(size=auto.tamao, pos=auto.pos)
89

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

size_HINT: 1, .5 pos_HINT: {'centro_x':.5, 'centro_y': .5} ''')

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

Fuente: "../examples/widgets/Sequenced_images/data/images/button_white.png' pos:


self.pos tamao: self.tamao
entonces, cuando ponemos en marcha este fragmento en una app:
de kivy Kivy.app App de importacin.floatlayout kivy.uix FloatLayout importacin de
kivy.lang importar Builder
Builder.load_string(''' <GridLayout>Canvas.antes:
BorderImage:
# BorderImage se comporta como la frontera BorderImage CSS: 10, 10, 10, 10 Fuent
e: "../examples/widgets/Sequenced_images/data/images/button_white.png' pos: self
.pos tamao: self.Tamao
<RootWidget>GridLayout:
size_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 RootWidget(FloatLayout):
pase la
clase MainApp(App):
def construir(self):
retorno RootWidget()
si __name__ == "__main__':
MainApp().run()
El resultado debe parecerse a esto:
92

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/.

.. para utilizar una determinada textura:


Textura: rectngulo: referencia a una textura
que usamos esto para mostrar un fondo animado:
de kivy.app App de importacin.floatlayout kivy.uix FloatLayout importacin de kivy.
uix.gridlayout GridLayout importacin de kivy.uix.imagen imagen de importacin impor
tacin de kivy kivy.properties ObjectProperty.lang importar Builder
Builder.load_string(''' <CustomLayout>Canvas.antes:
BorderImage:
# BorderImage se comporta como la frontera BorderImage CSS: 10, 10, 10, 10 textu
ra: self.background_image.textura pos: self.pos tamao: self.tamao
93

<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

12.7 diseos de anidacin


s! Es muy divertido ver cmo el proceso puede ser extensible.
12.8 Tamao y posicin
predeterminada del Kivy mtricas unidad de longitud es el pxel, de todos los tamaos

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

13.3 las instrucciones de dibujo


dibujo instrucciones van desde muy simples, como el dibujo de una lnea o un polgon
o, ms complejos, como las mallas o curvas Bzier:
con auto.Canvas:
# dibujar una lnea usando el color predeterminado en lnea(puntos=(x1, y1, x2, y2,
x3, y3))
# permite dibujar un cuadrado rojo semi-transparente color(1, 0, 0, .5, mode='rg
ba') rectngulo(pos=auto.pos, size=self.size)
13.4 manipular instrucciones en
algn momento desea actualizar o quitar las instrucciones que usted agrega a un li
enzo, esto puede hacerse de diversas maneras, segn sus necesidades:
puede mantener una referencia a sus instrucciones y actualizarlos:
clase miwidget(Widget):
def __init__(self,
kwargs):
Super(Miwidget, auto).__init__( kwargs) con self.Canvas:
self.rect = rectngulo(pos=auto.pos, size=self.size)
self.bind(pos = self.update_rect) self.bind(size=self.update_rect)
def update_rect(self, args):
self.rect.pos = self.pos self.rect.size = self.tamao
o puede limpiar tu lienzo y empezar de nuevo:
clase miwidget(Widget):
def __init__(self, kwargs):
super(Miwidget, auto).__init__( kwargs) self.draw_my_STUFF()
self.bind(pos = self.draw_MI_STUFF) self.bind(size=auto.draw_my_STUFF)
def draw_MI_STUFF(self):
self.Canvas.clear()
con self.Canvas:
self.rect = rectngulo(pos=auto.pos, size=self.tamao)
Tenga en cuenta que la actualizacin de las instrucciones est considerada como la m
ejor prctica, ya que implica menos sobrecarga y evita la creacin de nuevas instruc
ciones.
98

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:
-&gt; 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 &lt; &gt; 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

root = MyRootWidget() = cuadro cuadro BoxLayout().add_widget(Botn cuadro().add(Bu


tton_widget()) root.add_widget(recuadro)
que puede resultar menos agradable, tanto para leer y escribir.
Por supuesto, en python, puede pasar argumentos a tus widgets en la creacin para
especificar su comportamiento. Por ejemplo, para establecer el nmero de columnas
de agridlayout, haramos:
rejilla = GridLayout(cols=3)
Para hacer la misma cosa en kv, puede establecer las propiedades del nio widget d

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

14.7 Ampliar lienzo


Kv lang puede ser utilizado para definir las instrucciones de lienzo de un widge
t como este:
Miwidget:
canvas:
Color:
rgba: 1, .3, .8, .5 Lnea:
puntos: zip(self.data.x, self.data.y)
y se actualiza cuando cambian los valores de las propiedades.
Por supuesto, usted puede utilizar canvas.antes y canvas.despus.
14.8 hace referencia a los widgets
en un widget tree hay a menudo una necesidad de acceso/referencia otros widgets.
El Kv idioma proporciona una manera de hacer esto usando id's. Piense en ellas
como variables de nivel de clase que slo puede ser utilizado en el lenguaje de kv
.
Considere los siguientes aspectos:
<MyFirstWidget>:
Botn:
id: f_pero TextInput:
texto: f_pero.state
<MySecondWidget>:
Botn:
id: s_pero TextInput:

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

Para mantener vivo el widget, una referencia directa a thelabel_widget widget de


be mantenerse. Esto se logra usingid.___ orlabel_auto_widget_self.___ en este ca
so. La forma correcta de hacer esto sera:
<MyWidget>:
: etiqueta label_widget_widget_self.___
14.9 acceder a widgets definidas dentro de kv lang en su cdigo Python a
considerar el cdigo abajo en mi.kv:
<MyFirstWidget>:
# ambas variables pueden tener el mismo nombre y esto no conduce a la # Un probl
ema con la exclusividad de la id es slo accesible en kv.
txt_inpt: txt_inpt Botn:
id: f_pero TextInput:
id: txt_inpt texto: f_pero.state on_texto: root.check_status(f_pero)
en myapp.py:
...
(MyFirstWidget clase BoxLayout):
txt_inpt = ObjectProperty(Ninguno)
def controlar_status(self, btn):
print('estado de botn es: {state}'.Format(state=btn.state) print('text input de t
exto es: {txt}'.Format(txt=self.txt_inpt)) ...
txt_inpt se define como aObjectProperty inicializado a ninguno dentro de la clas
e.
txt_inpt = ObjectProperty(Ninguno)
en este punto self.txt_inpt es Ninguno. En Kv lang esta propiedad se actualiza p
ara mantener la instancia de
TextInput, referenciado por el id_txt inpt.:
txt_inpt: txt_inpt
desde este punto en adelante, self.txt_inpt mantiene una referencia al widget id
entificado por el id txt_input y puede utilizarse en cualquier lugar de la clase
, como en la funcin check_status. En contraste con este mtodo tambin puede simpleme
nte pasar el identificador de la funcin que necesita para usarla, como en el caso
de f_pero en el cdigo anterior.
Hay una manera ms sencilla para acceder a objetos con etiquetas ID EN KV usando e
l id de objeto de bsqueda. Puede hacerlo de la siguiente manera:
<Marvel>Etiqueta:
id: Loki loki: texto: "Yo soy tu Dios!':
id: hulk texto: "pulse para aplastar a loki" en_release: root.hulk_smash()
en el cdigo Python:

103

class Marvel(BoxLayout):
def_hulk smash(self):
self.ids.hulk.Text = "Hulk: enclenque Dios!" self.ids["loki"].Text = "Loki: &gt;
_<!!!" # 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

lado Python 104.


14.11 Re-Usar estilos en varios widgets
Considere el cdigo abajo en mi.kv:
<MyFirstWidget>:
Botn:
on_pulse: self.text(txt_inpt.text):
id: TextInput txt_inpt
<MySecondWidget>:
Botn:
on_pulse: self.text(txt_inpt.text):
id: TextInput txt_inpt
en myapp.py:
clase MyFirstWidget(BoxLayout):
def text(self, val):
print( text input de texto es: {txt} .Format(txt=val)
clase(MySecondWidget BoxLayout):

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

de kivy.uix.floatlayout FloatLayout importacin de kivy.app App de importacin impor


tacin kivy.properties ObjectProperty, StringProperty
clase controlador(FloatLayout):
Crear un controlador que recibe un widget personalizado desde el archivo lang
kv.
Agregar una accin a ser llamado desde el archivo lang kv.
etiqueta_wid = ObjectProperty() = StringProperty info()
def do_action(self):
self.label_wid.Text = Mi etiqueta despus de presionar el botn Nuevo self.info =
texto info
class ControllerApp(App):
def construir(self):
Controlador de retorno(info= Hola mundo )
si __name__ == "__main__ :
ControllerApp().run()
En este ejemplo, vamos a crear una clase de controlador con 2 propiedades:
Informacin para la recepcin de algn texto etiqueta_wid para recepcin de la etiqueta
widget
adems, estamos creando un do_action() mtodo que utilizar tanto de estas propiedades
. Theinfo cambiar el texto y cambiar texto en thelabel_wid widget.
14.12.2 El diseo entra en el controlador.kv
ejecutar esta aplicacin sin el correspondiente archivo .kv funcionar, pero nada se
r mostrado en la pantalla. Esto es lo que se espera, porque elcontrolador de clas
e no tiene widgets en l, es solo aFloatLayout.
Podemos crear la IU alrededor elcontrolador de clase en un archivo denominado co
ntrolador.KV, el cual ser cargado cuando corremos el ControllerApp. Cmo se hace es
to y qu archivos se cargan est descrito en el kivy.app.App.load_kv() mtodo.
1 #:kivy 1.0
2 3 <Controller>:
4 etiqueta_wid: MI_custom_label
5 6 BoxLayout:
7 Orientacin: Vertical
8 relleno: 20
9 10 Botn:
11 Texto: Mi informacin del controlador es:
+ root.info
12 en_press: root.do_action()

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

zar echo_client_app.py. El servidor responder con simples mensajes de eco para na


da la aplicacin cliente enva cuando usted presiona enter despus de escribir algo en
el Textbox.
15.1.1 Server App
# install_twisted_rector debe ser llamado antes de la importacin y el uso de los
reactores desde kivy.admite la importacin trenzado_instalacin_install_reactor reac
tor_trenzado()
del reactor de importacin twisted.internet
109

del protocolo de importacin


EchoProtocol twisted.internet clase(Protocolo.Protocolo):
def dataReceived(self, datos):
respuesta = self.factory.app.handle_message(data) si respuesta:
self.transport.write(respuesta)
clase EchoFactory(protocol.Factory):
Protocolo = EchoProtocol
def __init__(self, app):
self.app = app
de kivy.app App importacin de kivy.uix.label etiqueta de importacin
clase TwistedServerApp(App):
def construir(self):
self.label = etiqueta(text="server iniciado\n").listenTCP reactor(8000, EchoFact
ory(self) volver self.label
def handle_message(self, Msg
msg): % self.label.Text = "recibidos: %s\n"
si msg == "ping":
msg = "pong" si msg == "plop":
Msg msg msg = % de retorno "rocas" kivy self.Label.text += "respondi: %s\n"
Si __name__ == "__main__ :
TwistedServerApp().run()
15.1.2 Aplicacin cliente
#install_twisted_rector debe ser llamado antes de importar el reactor de kivy.ap
oyo Importacin trenzado_instalacin_install_reactor reactor_trenzado()
#un cliente sencillo que enviar mensajes al servidor de eco de importacin twisted
.internet reactor,
clase de protocolo EchoClient(Protocolo.Protocolo):
def connectionMade(self):
Auto.factory.app.en_connection(self.transporte)
def dataReceived(self, datos):
self.factory.app.print_message(data)
110

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

16.1 Disear su cdigo de aplicacin


CAPTULO
16 LAS
MEJORES PRCTICAS
16.2 Mango de redimensionamiento de la ventana
16.3 La gestin de los recursos
Atlas
Cache
- Imgenes - Texto
16.4 Examen Plataforma
16.5 Consejos y Trucos

desollar usando mdulos


- Monitor - Inspector - Pantalla
Kivy-Remote-Shell
113

114

Captulo
diecisiete
grficos avanzados

17.1 Crear tu propio Shader


17.2 la representacin en un framebuffer
17.3 Optimizaciones
115

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 (&gt;= 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

python -m PyInstaller --name touchtracer --ejemplos de iconos-path\demo\touchtra


cer\icono.ico ejemplos-path\demo\touchtracer\main.py
para ms opciones, consulte el Manual PyInstaller.
3. El archivo spec ser touchtracer ubicado en TouchApp.spec. Ahora tenemos que ed
itar el archivo spec para agregar las dependencias de ganchos para montar correc
tamente el archivo exe. Abra el archivo spec con su editor favorito y aadir estas

lneas al principio de la SPEC (suponiendo sdl2 es utilizado, el default ahora):


De kivy.deps" importar sdl2, glew
, a continuacin, encontrar Collect() y agregar los datos para touchtracer (toucht
racer.KV, partculas.png, ...): cambie la lnea para aadir un rbol(), por ejemplo, rbol
de objetos( ejemplos-ruta\\demo\\touchtracer\\ ).
Este rbol va a buscar y agregar cada archivo encontrado en el directorio touchtra
cer a tu paquete final.
Para agregar las dependencias, antes de la primera palabra argumento en recoger
aadir un rbol ob- jeto de cada ruta de la dependecies. Por ejemplo [rbol(p) para p (
sdl2.dep_bins + glew.dep_bins)], por lo que tendr que buscar algo como:
coll = recoger(exe, rbol( ejemplos-ruta\\demo\\touchtracer\\ ), un.binarios, un.z
ipfiles,.datas, [rbol(p) para p (sdl2.dep_bins + glew.dep_bins)], tira=False, upx=
True, Name= touchtracer")
4. Ahora podemos crear el archivo spec inTouchApp con:
python -m PyInstaller touchtracer.spec
5. El paquete ser compilado en el dist\touchtracer TouchApp\directorio.
18.2.2 empaquetar una aplicacin vdeo con gstreamer
siguientes vamos a modificar ligeramente el ejemplo anterior para empaquetar una
aplicacin que utiliza gstreamer para vdeo. Usaremos el ejemplo videoplayer encont
rados en ejemplos-path\widgets\videoplayer.py. Cree una carpeta en algn lugar lla
mado VideoPlayer y en la lnea de comandos cambia el directorio actual a esa carpe
ta y hacer:
python -m PyInstaller gstvideo ejemplos --nombre-ruta\widgets\videoplayer.py
para crear thegstvideo.archivo spec. Editar como arriba y esta vez incluyen la d
ependencia gstreamer:
de kivy.deps" importar sdl2, glew, gstreamer
y agregar theTree() para incluir los archivos de vdeo, por ejemplo, rbol( ejemplos
-ruta\\widgets ), as como las dependencias de gstreamer, as que debe buscar algo c
omo:
coll = recoger(exe, rbol( ejemplos-ruta\\widgets ), un.binarios, un.zipfiles,.dat
as, [rbol(p) para p (sdl2.dep_bins + glew.dep_bins + gstreamer.dep_bins)], tira=Fa
lse, upx=True, Name= gstvideo )
y, a continuacin, construir el archivo spec inVideoPlayer con:
118

python -m PyInstaller gstvideo.spec


y usted debe encontrar gstvideo.exe en VideoPlayer\Dist\gstvideo, que cuando eje
cute reproducir un vdeo.
Nota: Si ests usando Pygame y necesitan PyGame en sus envases app, tendr que agreg
ar el cdigo de seguimiento a su archivo spec debido a kivy edicin #1638. Despus de
la importacin agregar lo siguiente:
def GetResource(identificador, args,
kwargs):
identifier == pygame_icon.tiff : si
levantar IOError() devuelven _original_GetResource(identificador, args,
kwargs)
import pygame.pkgdata _original_getResource = pygame.pkgdata.getResource pygame.
pkgdata.getResource =
18,3 getResource sobrescribiendo el gancho predeterminado
18.3.1 incluidos/excluidos de vdeo y audio y reducir el tamao de la app
PyInstaller incluye un gancho para kivy aade que, por defecto, todos los mdulos bsi
cos utilizados por kivy, por ejemplo, audio, video, etc (ortografa, usted todava n
ecesita el paquete gstreamer dlls withTree manualmente() - vase el ejemplo anteri
or) y sus dependencias. Si el gancho no est instalada o para reducir el tamao de l
a aplicacin de algunos de estos mdulos pueden ser excluidos, p. ej., si no se usa
de audio/vdeo, con un gancho de alternativas.
Kivy proporciona el gancho alternativo athookspath(). Adems, si y slo si PyInstall
er no tiene el defecto ganchos ganchos_runtime() tambin debe ser proporcionado. A
l sobrescribir el gancho, el cual normalmente no es necesario que se sobrescribe

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

un anlisis =([ ejemplos-ruta\\demo\\touchtracer\\main.py ], ...


hookspath=hookspath(), runtime_ganchos=runtime_ganchos(), ...
get_deps"_minimal(video=none, audio=None))
, por ejemplo, excluir a los proveedores de audio y vdeo y para el resto de mdulos
bsicos utilice slo aquellos cargados.
Los puntos clave es proporcionar el suplente hookspath(), el cual no lista por d
efecto, todos los proveedores de kivy y en su lugar manualmente para aadir el hid
denimports proveedores necesarios durante el desmontaje de la ONU- deseados (aud
io y video en este ejemplo) withget_deps"_minimal().
18.3.2 las instalaciones alternativas en
los ejemplos anteriores se utiliza, por ejemplo, [rbol(p) para p (sdl2.dep_bins + g
lew.dep_bins + gstreamer.dep_bins)], para hacer PyInstaller agregar todas las dl
l utilizada por estas dependencias. Si no se instal kivy utilizando el mtodo rueda
s estos comandos no funcionarn y e.g. kivy.deps".sdl2 fallar para importar. En su
lugar, uno debe encontrar la ubicacin de estos archivos DLL y pasarlos a theTree
manualmente la clase en una manera similar como ejemplo.
18.4 Crear un paquete para Android
puede crear un paquete para Android usando Python para Android project. Esta pgin
a explica cmo descargar y utilizar directamente en su mquina (consulte el embalaje
con python-para-Android), utilice la imagen de mquina virtual de Android Kivy pr
ecompilados, o utilice la herramienta Buildozer para automatizar todo el proceso
. Tambin puede ver el empaquetado de la aplicacin para el Kivy Launcher para ejecu
tar programas de kivy sin compilarlos.
Para los nuevos usuarios, recomendamos el uso de Buildozer como la manera ms fcil
de hacer un full APK. Tambin puedes ejecutar tus Kivy app sin un paso de compilac
in con el lanzador Kivy app.
Kivy aplicaciones pueden ser liberados en el Android Market como el Play store,
con unos pocos pasos adicionales para crear un completo APK firmado.
El proyecto Kivy incluye herramientas para acceder a las API de Android para log
rar la vibracin, acceso al sensor, tex- ting, etc. Estos, junto con informacin de
depuracin en el dispositivo, estn documentadas en la pgina principal de Android.
Nota: Actualmente, los paquetes para Android slo puede generarse con Python 2.7.
Python 3.3+ support est en camino...

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

buildozer 120 Se instalar en su sistema. Despus, vaya al directorio del proyecto y


ejecute:
buildozer init
crea un archivo.spec buildozer controlan la configuracin de la generacin. Debe edi
tar apropiadamente con el nombre de aplicacin, etc. Puede definir variables para
controlar la mayor parte o la totalidad de los parmetros pasados a Python para An
droid.
Por ltimo, conecte su dispositivo Android y ejecutar:
buildozer android debug run
para construir, implementar y ejecutar automticamente el empuje apk en el disposi
tivo.
Buildozer tiene muchas opciones y herramientas disponibles para ayudarle, los pa
sos anteriores son slo la forma ms sencilla para crear y ejecutar el APK. La docum
entacin completa est disponible aqu. Tambin puede comprobar el archivo README en Htt
ps://github.com/kivy/buildozer. Buildozer
18.4.2 Envasado con Python para Android
en esta seccin se describe cmo descargar y utilizar Python para Android directamen
te.
Usted necesitar:
Un ordenador Linux o una mquina virtual
Java
Python 2.7 (no 2.6)
Jinja2 (mdulo python)
Apache Ant Android SDK
Python setup para Android en
primer lugar, instalar los requisitos previos necesarios para el proyecto:
Http://python-for-android.readthedocs.org/en/latest/prerequisites/
luego abrir una consola y teclear:
git clone git://Github.com/kivy/python-for-android
Construya su distribucin
La distribucin es un "Directorio" que contiene un compilado de python especializa
dos para Android, incluyendo slo los mdulos que usted pidi. Usted puede, desde la m
isma python para Android, recopilar varias distribuciones.
Por ejemplo:
uno que contenga un apoyo mnimo sin audio / video
otro que contenga audio, openssl, etc.
Para ello, debe utilizar el script denominado distribuir.sh:
./distribute.sh -m "kivy"
el resultado de la compilacin ser guardado en dist/default. Aqu hay otros ejemplos
de construccin de distribuciones
:
121

./distribute.sh -m "openssl" kivy


./distribute.sh -m "pil ffmpeg kivy"
Nota: El orden de los mdulos proporcionados son importantes, como regla general p
oner dependencias primero y luego
los mdulos dependientes, C libs vienen primero y, a continuacin, mdulos de Python.
Para ver las opciones disponibles para distribuir.sh, escriba:
./distribute.sh -h
Nota: Para utilizar la ltima versin de desarrollo Kivy para construir su distribuc
in, enlace "P4A_kivy_DIR" a
la carpeta kivy variable de entorno a la ubicacin de la carpeta de kivy. En linux
se utilizara el comando exportar, como este:
exportacin de P4A_kivy_DIR=/ruta/a/clonar/kivy/
empaquetar la aplicacin
dentro de la distribucin (dist/default por defecto), usted tiene una herramienta
llamada build.py. Este es el script que crear la APK para usted:
./build.py --dir <path to your app>
--name " <title>" --package <org.of.your.app>--version <human version>--icon <pa
th to an icon to use>--orientacin <landscape|portrait>--permiso <android permissi
on like VIBRATE>(Mltiples permitidos) <debug|release><installd|installr|...>
Un ejemplo del uso de mltiples permisos:
- PERMISO DE INTERNET --permiso write_external_STORAGE
lista completa de permisos disponibles estn documentados aqu: Android Http://devel
oper.android.com/reference//Manifest.Permission.html,
por ejemplo, si suponemos que la demo de Kivy touchtracer est en el directorio ~/
kivy/examples/demo/touchtracer, puede hacer:
./build.py --dir ~/kivy/examples/demo/touchtracer \
--package org.demo.touchtracer \ --name "Kivy Touchtracer" --version 1.1.0 insta
lld depuracin
debe ser consciente de que la versin del SDK de Android de destino predeterminado
para la construccin ser SDK v.8, que es el mnimo requerido para la versin SDK kivy.
Usted debe instalar esta versin de API, o cambiar el AndroidManifest.xml (en dis
t/.../) para satisfacer sus propios requisitos de SDK de destino.
Los binarios de depuracin se generar en bin/KivyTouchtracer-1.1.0-debug.apk. La de
puracin y installd parmetros son comandos desde el propio proyecto de Android. Ins
truyen a build.py para compilar la APK en modo de depuracin e instalar en el prim
er dispositivo conectado.
A continuacin, puede instalar la APK directamente a su dispositivo Android como s
igue:
adb install -r bin/KivyTouchtracer-1.1.0-debug.apk
122

18.4.3 Empaquetar la aplicacin para el lanzador


Kivy Kivy el Launcher es una aplicacin Android que se ejecuta cualquier Kivy ejem
plos almacenados en la tarjeta SD. Para instalar el lanzador Kivy, usted debe:
1. Ir a la pgina del Lanzador Kivy en el Google Play Store
2. Haga clic en Instalar
3. Seleccione su telfono... Y listo!
Si no tienes acceso a Google Play Store en tu telfono/tablet, puede descargar e i
nstalar la APK manualmente desde http://kivy.org/#download.
Una vez que el lanzador Kivy est instalado, usted puede poner su Kivy Kivy aplica
ciones en el directorio en el directorio de almacenamiento externo (a menudo dis
ponible en/sdcard incluso en dispositivos donde esta memoria es interna), por ej
emplo,
/sdcard/kivy/ <yourapplication>
<yourapplication>Debe ser un directorio que contiene:
# Tu archivo principal de la aplicacin:

main.py # Algunas info Kivy requiere acerca de su aplicacin en Android:


Android
Android.txt El fichero.txt debe contener:
title= <Application Title>Autor= <Your Name>Orientacin= <portrait|landscape>
Estas opciones son slo una configuracin muy bsica. Si crea su propio APK usando las
herramientas anteriores, puede elegir muchas otras opciones.
Instalacin de ejemplos
Kivy viene con muchos ejemplos, y estos pueden ser un gran lugar para comenzar t
ratando el lanzador Kivy. Puede ejecutarlos como se indica a continuacin:
#. Descargue "Kivy demos para Android <http://kivy.googlecode.com/files/kivydemo
-for-android.zip> _
#. Descomprimir el contenido y vaya a la carpeta kivydemo-para-android" #. Copi
ar todas las subcarpetas aqu a
/sdcard/kivy
1. Ejecutar el lanzador y seleccionar una de las imgenes, vitrina, Touchtracer, C
ymunk u otras demostraciones...
Versin 18.4.4 en el mercado
si has construido tu propia APK con Buildozer o con Python para Android, puede c
rear una versin de lanzamiento que puede despacharse en la play Store Android u o
tros mercados.
Para ello, debe ejecutar Buildozer con el parmetro RELEASE (liberacin de android b
uildozer por ejemplo), o si est usando Python para Android utilizar la opcin --rel
ease para construir.py. Esto crea un re- lease APK en thebin directorio, que deb
er firmar y zipalign correctamente. El procedimiento para hacerlo se describe en
la documentacin de Android en Http://developer.android.com/guide/publishing/ appfirma.html - todas las herramientas necesarias vienen con el SDK de Android.
123

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 &gt;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 -&gt

; Video", aumentar la RAM de vdeo de 32 MB o superior. Habilitar aceleracin 3d par


a mejorar la experiencia del usuario.
6. Inicie la mquina virtual y siga las instrucciones en el archivo lame en el escr
itorio.
18.5.3 Construyendo la APK
Una vez que la mquina virtual se ha cargado, usted puede seguir las instrucciones
del envase con Python para Android. No necesita descargar con git clone, aunque
, como python-para-android ya est instalado y configurado en la mquina virtual hom
e directory.
18.5.4 Consejos y sugerencias
1. Carpetas compartidas
en general, el entorno de desarrollo y las herramientas estn configuradas en el e
quipo host, pero el APK es construir en su husped. VirtualBox tiene una caracterst
ica llamada Shared carpetas que permite a los huspedes acceso directo a una car
peta en su host.
Si a menudo conveniente utilizar esta caracterstica (generalmente con permanente
y Auto-mount op- ciones) para copiar la APK integrado a la mquina host para q
ue pueda formar parte de su normal entorno dev. Un script sencillo puede fcilment
e automatizar la creacin y el proceso de copiar/mover.
2. Copiar y pegar
124

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 -&gt; General -&gt; 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

de ADB, proporcionada por el SDK de Android. Puede ser necesario habilitar el ad


b en el dispositivo para los desarrolladores de opciones y, a continuacin, conect
e el dispositivo a su ordenador y ejecute:
adb logcat
podrs ver todos los registros, incluyendo su stdout/stderr y Kivy logger.
Si su aplicacin empaquetada con Buildozer, la herramienta adb puede no estar en s
u$PATH y la com- my puede no funcionar. En su lugar, puede ejecutar:
buildozer logcat android
para ejecutar la versin instalada por Buildozer, o encontrar las herramientas del
SDK en $HOME/.buildozer/android/plataforma.
125

tambin puede ejecutar y depurar la aplicacin mediante el lanzador Kivy. Si se ejec


uta la aplicacin de esta manera, encontrar los archivos de registro dentro de la "
/.kivy/logs" sub-carpetas dentro de la carpeta de su aplicacin.
18.6.3 con Android API
Aunque Kivy es un framework de Python, el proyecto mantiene Kivy a utilizar fcilm
ente las herramientas normales de las API de java, para todo, desde los sensores
de vibracin para el envo de mensajes a travs de SMS o correo electrnico.
Para los nuevos usuarios, recomendamos el uso de Player. Para obtener ms avanzada
s o para las API de acceso no est envuelto, puede utilizar Pyjnius directamente.
Kivy tambin proporciona un mdulo para Android Android bsico fun- cionalidad.
Usuario contribuido Android y ejemplos de cdigo estn disponibles en la wiki de Kiv
y.
Player
Player es un pythonic, API de plataforma independiente para utilizar las caracte
rsticas comnmente encontrados en diversas plataformas, especialmente mviles. La ide
a es que la aplicacin puede llamar a una funcin llamada simplemente Player, como p
resentar una notificacin al usuario, y Player se encargar de hacerlo de la manera
correcta, independientemente de la plataforma o sistema operativo. Internamente,
Player utiliza Pyjnius (en Android), Pyobjus (en iOS) y algunas APIs especficos
de la plataforma en plataformas de escritorio.
Por ejemplo, el cdigo siguiente hara su dispositivo Android vibrar, o plantear una
NotImplemented- Error que puede manejar adecuadamente en otras plataformas como
los escritorios que no tengan hardware apropia- do::
de player importar vibrador vibrador.vibrar(10) # vibrar durante 10 segundos
player de la lista de admitidos APIs est creciendo muy rpidamente, usted puede ver
la lista completa en el Player README.
Pyjnius
Pyjnius es un mdulo Python que permite el acceso a clases Java directamente desde
Python, con- argumentos verting automticamente al tipo correcto, y te permite co
nvertir fcilmente los resultados de java a Python.
Pyjnius puede obtenerse en github, y tiene su propia documentacin.
Este es un ejemplo sencillo que muestra Pyjnius la posibilidad de acceder a la
API de vibracin normal de Android, el mismo resultado del player cdigo anterior:
# "autoclass toma una clase Java y Python proporciona un contenedor de importac
in jnius autoclass
# contexto es una clase java normal en el contexto de la API de Android = autocl
ass( Android.content.Context )
# PythonActivity es proporcionada por el bootstrap Kivy app en python para Andro
id PythonActivity = autoclass( org.renpy.android.PythonActivity )
# El PythonActivity almacena una referencia a la que se est ejecutando actualment
e en actividad # Necesitamos esto para acceder a la actividad de servicio = Pyth
onActivity vibrador.mActivity
# Esto es casi idntico al cdigo java para el vibrador vibrador = actividad.getSyst
emService(Context.vibrador
vibrador_SERVICE).vibrar(10000) # el valor en milisegundos - esto es 10s

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

buildozer osx depurar


una vez que la aplicacin est empaquetada, es posible que desee eliminar paquetes i
nnecesarios como gstreamer, si no necesita soporte de video. La misma lgica se ap
lica para otras cosas que no uso, slo reducir el paquete a su estado mnimo que se
necesita para ejecutar la aplicacin.

Como un ejemplo, estamos incluyendo la demostracin ejemplo empaquetada usando est


e mtodo, tanto para Python 2 (9.xMB) y 3 (15.xMB), usted puede encontrar los paqu
etes aqu: Https://drive.google.com/drive/folders/ 0B1WO07-OL50_alFzSXJUajBFdnc .
Eso es todo. A disfrutar!
Ahora usa el derecho Buildozer Kivy SDK para empaquetar la aplicacin. Si desea co
ntrolar ms detalles acerca de su app que ofrece actualmente buildozer entonces pu
ede usar el SDK directamente, como se detalla en la siguiente seccin.
18.7.2 usando el SDK de Kivy
desde la versin 1.9.0, Kivy se libera para el OS X en una plataforma autnoma, dist
ribucin de porttiles.
Las aplicaciones pueden ser empacados y distribuidos con el SDK de Kivy utilizan
do el mtodo descrito a continuacin, haciendo que sea ms fcil incluir marcos como SDL
2 y GStreamer.
1. Asegrese de tener el SDK (Kivy Kivy sin modificar.app) desde la pgina de descar
gas.
2. Ejecute los siguientes comandos:
mkdir &gt; CD &gt; Embalaje Embalaje Embalaje&gt; git clone cd kivy Https://gith
ub.com/kivy/kivy-sdk-packager embalaje&gt;-sdk-packager/osx osx&gt; cp -a /Appli
cations/Kivy.app ./Kivy.app
Nota: Este paso es importante, usted tiene que asegurarse de conservar las rutas
de acceso y permisos. Un comando como cp -rf se copia pero hacer la app inutili
zable y conducir a error ms adelante.
3. Ahora todo lo que necesitas hacer es incluir tu aplicacin compilada en el Kivy
.app ejecutando el siguiente comando:
osx&gt; ./package-app.sh /ruta/a/sus/ <app_folder_name>/
Donde <app_folder_name>Es el nombre de su aplicacin.
Esto copia Kivy.app a <app_folder_name>.app compilado e incluye una copia de la
aplicacin en este paquete.
4. Eso es todo, tu auto-contenida paquete est listo para ser implementado! Ahora
puede personalizar an ms su aplicacin tal como se describe a continuacin.
Instalacin de mdulos
Kivy paquete en osx utiliza su propia env virtual que se activa cuando se ejecut
e su aplicacin utilizando el comando kivy. Para instalar cualquier mdulo que usted
necesita para instalar el mdulo de la siguiente manera:
$ pip install kivy -m <modulename>
128

donde estn los mdulos/archivos instalados?


Dentro del venv porttil dentro de la aplicacin en:
Kivy.app/Contents/Resources/venv/
Si instala un mdulo que instala un binario como, por ejemplo, jardn de kivy ese bi
nario slo estar disponible a partir del venv encima, como en despus de hacer:
kivy instalar kivy pip -m-jardn
jardn lib slo estar disponible cuando se activa este env.
source /Aplicaciones/Kivy.app/Contents/Resources/venv/bin/activate jardn instalar
mapview desactivar
para instalar los archivos binarios
slo copiar el binario a la Kivy.app/Contents/Resources/venv/bin/.
Para incluir otros marcos
Kivy.app viene con SDL2 y Gstreamer marcos proporcionados. Para incluir marcos d
istintos de los proporcionados haga lo siguiente:
git clone Http://github.com/tito/osxrelocator export PYTHONPATH=~/ruta/a/cd osxr
elocator Kivy.app osxrelocator python -m -r . /Library/Frameworks/ <Framework_na
me>.marco/ \ @ejecutable_path/../Frameworks/ <Framework_name>.marco/
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.
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

osx&gt; ./crear-osx-dmg.sh YourApp.app


nota la falta de / al final. Esto debe darle un comprimido de dmg que contribuya
an ms a reducir el tamao de la aplicacin distribuida.
18.7.3 Usando PyInstaller sin
primero instalar Homebrew Kivy y sus dependencias sin utilizar Homebrew como se
menciona aqu Http://kivy.org//docs/instalacin instalacin.html#desarrollo-versin.
Una vez que haya kivy y sus deps" instalado, necesitar instalar PyInstaller.
Supongamos que utilizamos una carpeta como testpackaging:
cd Http://github.com/pyinstaller/pyinstaller testpackaging git clone
crea un archivo llamado touchtracer.spec en este directorio y agregue el siguien
te cdigo:
# -- modo : python -bloquear_cipher = ninguno de kivy.tools.packaging.pyinstaller ganchos_import_get
_all, hookspath deps", runtime_ganchos
un anlisis =([ /ruta/a/tu/carpeta/CON/examples/demo/touchtracer/main.py ], pathex
=[ /ruta/a/tu/carpeta/CON/testpackaging ], binarios=none, win_no_prefieren_redir
ects=False, win_Private_assemblies=False, cipher=block_cipher, hookspath=hookspa
th(), runtime_ganchos=runtime_ganchos(),
get_deps"_all() = PYZ pyz(a.puro, un.zip_
data, cipher=block_cipher) exe = EXE(pyz,.scripts, archivos binarios de exclude_
=True, Name= touchtracer , debug=false, tira=False, upx=True, console=False ) co
ll = recoger(exe, rbol( ../kivy/examples/demo/touchtracer/ ), rbol( /Library/Frame
works/SDL_ttf2.framework/VERSIONES/UN/Frameworks/FreeType.framework").binarios,
un.zipfiles,.datas, tira=False, upx=True, Name= touchtracer ) app = Bundle(Coll,
Name= touchtracer.app", icon=none, paquete_identifier=None)
Cambiar las rutas con su pertinente
anlisis de rutas: a =([ /ruta/a/tu/carpeta/CON/examples/demo/touchtracer/main.py
], pathex=[ /ruta/a/tu/carpeta/CON/testpackaging ],
130

...
...
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: el paquete de su aplicacin en las ms antiguas OS X versin desea admitir.


1. Instalar Homebrew
2. Instalar:
$ Python instalar python brew
Nota: Para utilizar Python 3, brew instalar python3 y sustituir con el pip pip3
en la siguiente gua.
3. (Re)instalar sus dependencias con --build-botella para asegurarse de que pued
an ser utilizados en otras mquinas:
$ brew reinstalar --build-botella de SDL SDL_image222 de sdl_ttf2 sdl_mixer
Nota: Si su proyecto depende de GStreamer o otras bibliotecas adicionales (re)in
stalar con --build-botella como se describe a continuacin <additional libraries_>
_.
4. Instalar y Cython Kivy:
$ pip install -i Cython==0,23 $_USE_MARCOS OSX=0 pip install -U kivy
5. Instalar PyInstaller:
$ pip install -U pyinstaller
6. Empaquetar la aplicacin utilizando la ruta de acceso a su principal.py:
$ pyinstaller -y --clean --windowed --name touchtracer \ --exclude-mdulo _tkinter
\ --exclude-mdulo Tkinter \ --exclude-mdulo enchant \ --exclude-trenzado mdulo \ /
usr/local/share/kivy-ejemplos/demo/touchtracer/main.py
Nota: Esto an no copiar ms archivos de imagen o sonido. Sera necesario adaptar los
creados para ese archivo .spec.
131

El archivo se denomina especificaciones touchtracer.spec y est ubicado en el dire


ctorio donde se ejecut el comando pyinstaller.
Necesita cambiar la llamada Collect() para agregar los datos de touchtracer (tou
chtracer.KV, partculas.png, ...).
Cambie la lnea para aadir un rbol() objeto. Este rbol va a buscar y agregar cada arc
hivo encontrado en el directorio touchtracer a tu paquete final. Recoja su seccin
debe tener este aspecto:
coll = recoger(exe, rbol( /usr/local/share/kivy-ejemplos/demo/touchtracer/ ), un.
binarios, un.zipfiles,.datas, tira=none, upx=True, Name= touchtracer )
Esto agregar los ganchos necesarios, de modo que obtiene el Kivy PyInstaller requ
iere archivos. Hemos terminado. Su especificacin est listo para ser ejecutado.
1. Abra una consola.
2. Vaya al directorio PyInstaller, y construir la especificacin:
$ pyinstaller -y --clean --windowed touchtracer.spec
3. Ejecutar:
$ pushd dist $ ./Touchtracer hdiutil create.dmg -srcfolder touchtracer.app -ov p
opd $
4. Ahora tendr una Touchtracer.dmg thedist disponibles en el directorio.
Si su proyecto depende de GStreamer:
$ brew reinstalar --build-botella gstreamer gst-plugins-{base,bueno,malo,feo}
Nota: Si su proyecto necesita apoyo Ogg Vorbis, asegrese de aadir los--con-libvorb
is opcin para el comando anterior.
Si usted est usando Python desde Homebrew que actualmente necesitan tambin el sigu
iente paso hasta que esta solicitud de extraccin se fusiona:
$ brew reinstalar --with-python --build-botella https://github.com/cbenhagen/hom
ebrew/raw/patch-3/Library/Formula/gst-python.rb
18.8 Crear un paquete para IOS
Nuevo en la versin 1.2.0.
Nota: a partir del 4 de marzo de 2015, el toolchain para iOS ha sido reescrito. L
as instrucciones anteriores no funcionan ya (usando build_all.sh). Le recomendam
os encarecidamente que actualice a la ltima toochain que contiene muchas mejoras,
incluido el soporte para i386, x86_64, Armv7, ARM64 y el iOS emuladores. Si deb
e usar la versin anterior, pruebe el viejo-toolchain etiqueta en git.

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

18.8.4 actualizar un proyecto Xcode


digamos que usted desea agregar a su proyecto numpy, pero usted no tiene compila
do antes de la creacin del proyecto de XCode. En primer lugar, asegrese de que con
struir:
$ ./toolchain.py build numpy
entonces, actualizar su proyecto de Xcode:
$ ./toolchain.py-touchtracer actualizacin ios
/ marcos todas las bibliotecas necesarias para ejecutar todas las recetas compil
adas ser agregado a su proyecto de Xcode.
18.8.5
t mismo puedes personalizar la generacin de muchas maneras:
1. Minimizar la generacin/python/lib/Python27.zip: contiene todos los mdulos de Py
thon. Puede editar el archivo zip y extraer todos los archivos que usted no util
ice (reducir las codificaciones, extraer xml, correo electrnico...)

2. Cambiar el icono, orientacin, etc... Segn la poltica de Apple :)


3. Ir al panel de configuracin &gt; Crear, buscar opciones "strip" y triple-Verif
icar que todas son NO. Desvestido no funciona con Python mdulos dinmicos y elimina
r los smbolos necesarios.
4. Indicar una imagen de lanzamiento vertical/horizontal para iPad con y sin pan
talla de retina.
Se admiten imgenes de lanzamiento. De forma predeterminada, XCode desea construir
una imagen fija. Este es su responsabili- bilidad para llenar todas las imgenes
necesarias para los Juegos, dependiendo de su destino. Sin embargo, Kivy utiliza
r SDL, y tan pronto como se inicia la aplicacin del SDL, el lanzamiento principal
imagen desaparecer. Para prevenir esto, usted necesita tener 2 archivos con el n
ombre Default.png y Default-Landscape.png, y colocarlos en la carpeta de recurso
s en Xcode (no en la carpeta de su aplicacin)
18.8.6 Problemas conocidos
actualmente, el proyecto tiene algunos problemas conocidos (corregiremos estos e
n versiones futuras):
No se puede exportar el proyecto fuera de la kivy-ios directorio porque las bibl
iotecas incluidas en el proyecto son relativas a ella.
Eliminacin de algunas bibliotecas (como SDL_Mixer para audio), actualmente no es
posible porque el proyecto kivy lo requiere.
y mucho ms, slo demasiado tcnico para ser escrito aqu.
18.8.7
aplicacin FAQ cerrar anormalmente!
Por defecto, todas las declaraciones de impresin a la consola y los archivos son
ignoradas. Si usted tiene un problema cuando se ejecuta la aplicacin, puede activ
ar el registro comentando esta lnea en main.m:
putenv("KIVY_NO_CONSOLELOG=1");
a continuacin, debe ver todos los Kivy Xcode logging en la consola.
134

Cmo se puede aceptar una Apple app python ?


Hemos logrado combinar la app binario con todas las bibliotecas en un nico binari
o, llamado libpython. Esto significa que todos los mdulos binarios estn cargados d
e antemano, de modo que nada se carga dinmicamente.
Ya has enviado una solicitud de Kivy a la App Store ?
S, compruebe lo siguiente:
Defletouch en iTunes, ProcessCraft en iTunes
para una lista ms completa, visite el wiki Kivy.
18.9 IOS Requisitos previos
la siguiente gua se supone:
XCode 5.1 o superior OS X 10.9 o superior
tu experiencia puede variar en las distintas versiones.
18.9.1 Introduccin
a fin de presentar cualquier solicitud a la iTunes Store, usted necesitar una lic
encia de desarrollador iOS. Para realizar pruebas, puede usar un dispositivo fsic
o o el emulador de iOS de XCode.
Por favor tenga en cuenta que para la prueba en el dispositivo, tendr que registr
ar estos dispositivos e instalar su "pro- visin perfil" en ellos. Consulte la Gua
de introduccin de Apple para obtener ms informacin.
18.9.2 Homebrew
utilizamos el paquete Homebrew mananger para OSX instalar algunas de las depende
ncias y las herramientas utilizadas por Kivy. Realmente es una herramienta muy ti
l y es un proyecto Open Source alojado en Github.
Debido a la naturaleza de la gestin de paquetes (complicaciones con versiones y s
istemas operativos), este proceso puede ser propenso a errores y provocar fallos
en el proceso de compilacin. El requisito faltante: <pkg>No est instalado! Mensaj
e normalmente es un error de este tipo.

Lo primero es garantizar que se han de ejecutar los siguientes comandos:


brew install autoconf automake libtool pkg-config mercurial brew libtool enlace
enlace brew mercurial sudo easy_install sudo pip pip instalar cython
si sigue recibiendo errores de compilacin, compruebe su Homebrew est en un estado
saludable:
brew mdico
para obtener ms ayuda, consulte el Homebrew wiki.
La ltima, definitiva y desesperado paso para conseguir que las cosas podran ser tr
abajo para quitar Homebrew totalmente, obtenga la ltima versin, instlelo y vuelva a
instalar las dependencias.
135

Cmo desinstalar y quitar Homebrew para Mac OSX


136

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

Si usted ha ledo la gua de programacin, y entender los conceptos bsicos de Widget (u


na simple aplicacin de pintura) y conceptos bsicos del lenguaje (idioma kv kv), pr
obablemente usted puede saltar los primeros 2 pasos e ir directamente al paso 3.
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/
Listo? Dulce, Comencemos!
19.2 Introduccin
Introduccin
empecemos por conseguir una simple app Kivy realmente en marcha. Cree un directo

rio para el juego y un archivo llamado main.py


1 de kivy.app importacin
de kivy App 2.uix.Widget Widget de importacin
3 4 5 clase PongGame(Widget):
6 pass
7 8 9 clase PongApp(App):
10 def construir(self):
11 volver PongGame()
12 13 14 si __name__ == "__main__ :
15 PongApp().run()
Seguir adelante y ejecutar la aplicacin. Solo debe mostrar una ventana negra en e
ste punto. Lo que hemos hecho es crear una muy simple KivyApp, que crea una inst
ancia de la clase Widget ourPongGame y lo devuelve como el elemento raz de la int
erfaz de usuario, las aplicaciones que usted debe pensar en este punto como un rb
ol jerrquico de los Widgets. Kivy coloca este widget-rbol en la ventana predetermi
nada. En el siguiente paso, vamos a dibujar el Pong antecedentes y puntuaciones
widget thePongGame definiendo cmo luce.
19.3 Aadir grficos simples
Creacin de pong.kv
utilizaremos un archivo .kv para definir el aspecto y el tacto de la clase thePo
ngGame. Desde nuestra App clase se llama PongApp, podemos simplemente crear un a
rchivo calledpong.kv en el mismo directorio en el que se cargar automticamente cua
ndo se ejecuta la aplicacin. Para crear un nuevo archivo llamado pong.kv" y aadi
r el siguiente contenido.
1 #:kivy 1.0.9
2 3 <PongGame>:
4 canvas:
5 Rectngulo:
6 pos: self.centro_x - 5, 0
7 Tamao: 10, auto.height
8 9 Etiquetas:
140

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 &lt; y &gt; 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

9 velocidad = ReferenceListProperty(velocidad, velocidad_x_y)


10 11 # mover la funcin mover la pelota de un solo paso. Este
12 # ser llamado en intervalos iguales para animar la bola
13 def mover(self):
14 self.pos = Vector( self.Velocidad) + self.pos
y aqu est el kv regla utilizada para dibujar la bola como un crculo blanco:
<PongBall>:
Tamao: 50, 50 canvas:
elipse:
pos: self.pos tamao: self.size
para hacer todo el trabajo, usted tambin tendr que agregar las importaciones para
la propiedad Properties clases utilizadas y el Vector.
Aqu est todo el cdigo Python actualizado y kv archivo para este paso:
main.py:
1 de kivy.app importacin
de kivy App 2.uix.widget widget importacin
3 de importacin kivy.properties ReferenceListProperty NumericProperty,
4 de kivy.vector Vector de importacin
5 6 7 clase PongBall(Widget):
8 velocity_x = NumericProperty(0)
9_velocity y = NumericProperty(0)
10(velocidad velocidad = ReferenceListProperty_x, velocidad_y)
11 12 def mover(self):
13 self.pos = Vector( self.Velocidad) + auto.pos
14 15 16 clase PongGame(Widget):
pase de 17
18 19 20 clase PongApp(App):
21 def construir(self):
22 volver PongGame()
23 24 25 si __name__ == "__main__ :
26 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
143

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

4 # llamar bola.mueva y otras cosas


5 pass
6 7 clase PongApp(App):
8 9 def construir(self):
10 juego = PongGame()
11 Reloj.Schedule_interval(Game.Update, 1.0/60.0)
12 partido de vuelta
, sin embargo, que todava no cambia el hecho de que no tenemos una referencia al
nio thePongBall widget creado por la regla de kv. Para solucionar esto, podemos a
gregar a la clase PongGame anObjectProperty, y conectarlo con el widget creado e
n el kv regla. Una vez hecho eso, podemos fcilmente una referencia al mtodo theupd

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 &lt; 0) o (self.ball.top &gt; auto.height):
-1 = 9 self.ball.velocity_y
10 11 # rebotan de izquierda y derecha
12 Si (self.ball.x &lt; 0) o (self.ball.derecha &gt; 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 &lt; 0) o (self.ball.top &gt; auto.height):
-1 = 31 Self.ball.velocity_y
32 33 #rebotan de izquierda y derecha
34 Si (self.ball.x &lt; 0) o (self.ball.derecha &gt; 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.

Verificar elen_TOUCH_move handler:


1 def sobre_TOUCH_move(self, tctil):
2 Si touch.x &lt; self.width/3:
3 auto.player1.centro_y = toque.y
si touch 4.x &gt; auto.width - auto.width/3:
5 auto.player2.centro_y = toque.y
mantendremos la puntuacin de cada jugador en aNumericProperty. La puntuacin de eti
quetas thePongGame se mantiene actualizada cambiando el NumericPropertyscore, qu
e a su vez actualiza thePongGame etiquetas hijo propiedad text. Este enlace se p
roduce porque Kivyproperties enlazar automticamente a cualquier referencia en sus
correspondientes archivos de kv. Cuando la pelota sale fuera de los lados, actu
alizaremos la puntuacin y servir el baln de nuevo cambiando el mtodo Update en la c
lase PongGame. La clase PongPaddle tambin implementa un mtodo_Ball Bounce, de modo
que la bola rebota de manera diferente en funcin de donde golpea la raqueta. Aqu
est el cdigo para la clase PongPaddle:
1 clase PongPaddle(Widget)
Puntuacin: 2 3 = NumericProperty(0)
4 5 def_ball bounce(self, bola):
147

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

38 39 def update(self, DT):


40 self.ball.move()
41 42 #
43 paletas de rebote de self.player1._ball bounce(self.bola)
44 self.player2._ball bounce(self.bola)
45 46 #rebotar el baln abajo o arriba
148

47 Si (self.ball.s &lt; self.y) o (self.ball.top &gt; self.superior):


-1 = 48 self.ball.velocity_y
49 50 #iban de un lado a punto de puntuacin?
51 si self.ball.x &lt; self.x:
52 self.player2.puntuacin += 1
53 self.servir_ball(vel=(4, 0)
54 si self.ball.x &gt; self.Anchura:
55 self.player1.puntuacin += 1
56 self.servir_ball(vel=(-4, 0)
57 58 def sobre_TOUCH_move(self, tctil):
59 si touch.x &lt; self.width / 3:
60 self.player1.centro_y = toque.y
61 si touch.x &gt; auto.width - auto.width / 3:
62 self.player2.centro_y = toque.y
63 64 65 clase PongApp(App):
66 def construir(self):
67 juego = PongGame()
68 game.servir_ball()
69 Reloj.Schedule_interval(Game.Update 1.0 / 60.0)
70 partido de vuelta
71 72 73 si __name__ == "__main__ :
74 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 <PongPaddle>:
11 Talla: 25, 200
12
13 canvas: rectngulo:
14 pos:auto.pos
15 tamao:auto.tamao
16 17 <PongGame>:
18 bola: pong_ball
19 player1: player_left
20 player2: player_derecha
21 22
23 canvas: rectngulo:
24 pos: self.centro_x-5, 0
25 Tamao: 10,
26 y 27 de altura self.Etiqueta:
28 font_size: 70
29 centro_x: root.width / 4
149

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

hacer el inicio de la aplicacin potencialmente mucho ms lento. Tambin puede introd


ucir ambigedad en clase y nombres de variable, por lo que generalmente es menospr
eciado en la comunidad de Python. La forma en que lo hacemos es ms rpido y ms limpi
o. . Nota: puede que se pregunte por qu tienen que importar la App y widget por se
parado, en lugar de hacer algo likefrom kivy importar
20.2.2 Aadir comportamiento
aadamos algn comportamiento real al widget, es decir, hacen reaccionar a la entrad
a del usuario. Cambiar el cdigo de la siguiente manera:
1 de kivy.app importacin
de kivy App 2.uix.Widget Widget de importacin
3 4 5 clase MyPaintWidget(Widget):
6 def sobre_TOUCH_down(self, tctil):
7 print(touch)
8 9 10 clase MyPaintApp(App):
11 def construir(self):
12 volver MyPaintWidget()
13 14
152

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

jo a amarillo (color predeterminado el formato RGB, as (1, 1, 0), es de color ama


rillo). Esto es verdad hasta anotherColor est establecido. Piense en ello como mo
jar los pinceles en ese color, que luego puede utilizar para dibujar en un lienz
o hasta que sumergir los cepillos en otro color.
Lnea 11: podemos especificar el dimetro del crculo que vamos a dibujar. Utilizando
una variable para la que es preferible ya que necesitamos para hacer referencia
a ese valor varias veces y no queremos tener que cambiarlo en varios lugares si
queremos que el crculo ms grande o ms pequea.
Lnea 12: Para dibujar un crculo, podemos simplemente dibujar anEllipse con la mism
a anchura y altura. Porque queremos que el crculo para estar preparado cuando el
usuario toca, pasamos el contacto a la posicin de la elipse.
Tenga en cuenta que necesitamos para desplazar la elipse por-D/2 en las direccio
nes x e y (es decir, a la izquierda y abajo) porque la posicin especifica la esqu
ina inferior izquierda del cuadro delimitador de la elipse, y deseamos que se ce
ntra alrededor de nuestro toque.
Eso fue fcil, no es cierto? Se obtiene mejor! Actualizar el cdigo para este aspecto
:
1 de kivy.app importacin
de kivy App 2.uix.Widget Widget
de kivy IMPORTACIN 3.Importacin de grficos de color, Elipse, Lnea
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 touch.ud[ Lnea ] = lnea(puntos=(toque.x.y), tocar)
14 15 def sobre_TOUCH_move(self, tctil):
16 touch.ud[ Lnea ].puntos += [touch.x, toque.s]
17 18 19 clase MyPaintApp(App):
20 21 def construir(self):
22 volver MyPaintWidget()
23 24 25 si __name__ == "__main__ :
26 MyPaintApp().run()
154

Esto es lo que ha cambiado:


Lnea 3: Ahora no slo importan theEllipse instrucciones de dibujo, sino tambin de la
lnea dibujar- ing instruccin. Si usted mira la documentacin de lnea, ver los puntos q
ue acepta un argumento de que tiene que ser una lista de coordenadas de puntos 2
D, como (x1, y1, x2, y2, ..., xN, yN).
Lnea 13: Aqu es donde la cosa se pone interesante.touch.Ud es un diccionario de Py
thon (tipo <dict>) que nos permite almacenar atributos personalizados para un to
que.
Lnea 13: Hacemos uso de la lnea de instruccin que hemos importado y establezca una
lnea para dibujar- ing. Puesto que esto se hace en_TOUCH_down, habr una nueva lnea
por cada nuevo contacto.
Creando la lnea dentro del bloque, el lienzo sabe automticamente sobre la lnea y se
aprovechar de ella. Slo queremos modificar la lnea posterior, por lo que almacena
una referencia a ella en el toque.ud diccionario bajo el escogido arbitrariament
e pero acertadamente denominado tecla lnea . Pasamos la lnea que estamos creando
la pulsacin inicial posicin porque ah es donde nuestra lnea comenzar.
Lneas 15: aadimos un nuevo mtodo a nuestro widget. Esto es similar a la de_TOUCH_do
wn el mtodo, pero en vez de ser llamado cuando se produce un nuevo toque, este mto
do se llama cuando un contacto existente (por whichon_TOUCH_down ya era llamado)
se mueve, es decir, su posi- cin de los cambios. Tenga en cuenta que este es el
sameMotionEvent objeto con atributos actualizados. Esto es algo que nos pareci in

creblemente prctico y que pronto veremos por qu.


Lnea 16: Recuerde: este es el mismo objeto tctil que conseguimos inon_TOUCH_down,
por lo que simplemente podemos acceder a los datos que hemos almacenado en theto
uch.ud diccionario. A la lnea que hemos creado para este toque antes, debemos agr
egar ahora la posicin actual del toque como un nuevo punto. Sabemos que necesitam
os para extender la lnea porque esto sucede en_TOUCH_MOVE, que slo se llama cuando
el contacto se ha movido, que es exactamente la razn por la que queremos actuali
zar la lnea. Almacenar la lnea en el toque.ud hace que sea mucho ms fcil para nosotr
os, ya que no tenemos que mantener nuestro propio toque la lnea de tenedura de lib
ros.
Hasta ahora tan bueno. Esto no es precisamente bella pero, a pesar de todo. Se v
e un poco como los espaguetis a la boloesa. Sobre la forma de dar cada toque su p
ropio color? Estupendo, vamos a hacerlo:
1 aleatorio de importacin
2 de kivy aleatorio.app importar App
3 de kivy.uix.Widget Widget
de kivy IMPORTACIN 4.Importacin de grficos de color, Elipse, Lnea
5 6
155

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 &amp; 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 &amp; 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

kivy.kivy_options = { spelling : ( encantar , osxappkit ), texto : ( pil , sd


l2 , pygame , sdlttf ), Imagen : ( tex , imageio , dds , gif , sdl2 , py
game , pil , ffpy ), clipboard : ( android , winctypes , xsel , xclip , d
busklipper , nspaste , sdl2 , pygame , falsas , gtk3 ), video : ( gstplaye
r , ffmpeg , ffpyplayer , gi , pygst , pyglet , null ), audio : ( gstplay
er , pygame , gi , pygst , ffpyplayer , sdl2 , avplayer ), cmara : ( openc
v , gi , pygst , videocapture , avfoundation , android ), Window ( egl_rp
i , sdl2 , pygame , SDL , x11 )} opciones de configuracin global
.kivy kivy kivy_base_dir = /home/travis/build/kivy/kivy/kivy
.kivy kivy Kivy directorio_modules_dir = /home/travis/build/kivy/kivy/kivy/modu
les Kivy directorio modules

.kivy kivy_data_dir = /home/travis/build/kivy/kivy/kivy/Datos" el directorio de


datos de Kivy
kivy.kivy_shader_dir = /home/travis/build/kivy/kivy/kivy/data/glsl Kivy glsl s
hader
.kivy kivy directorio_icons_dir = /home/travis/build/kivy/kivy/kivy/data/icons/
iconos Kivy config path (no quitar el ltimo )
.kivy kivy_home_dir =
Kivy usuario
kivy home storage directory.kivy_userexts_dir =
directorio de extensiones de
usuario Kivy
kivy.kivy_config_fn =
configuracin Kivy Filename
.kivy kivy_usermodules_dir =
Kivy directorio de mdulos de usuario
21.1 Animacin
Animacin andAnimationTransition se utilizan para animateWidget propiedades. Debe
especificar al menos un nombre de propiedad y el valor del objetivo. Para usar u
na animacin, siga estos pasos:
Configuracin de un objeto de Animacin
Utilice el objeto de animacin sobre un widget
21.1.1 animacin sencilla
para animar un widget de x o y posicin, simplemente especifique los valores x/y d
e destino donde desea el widget situado al final de la animacin:
anim = Animacin(x=100, y=100) anim.start(widget),
la animacin tendr una duracin de 1 segundo a menos que la duracin especificada. Cuan
do anim.start() es llamado, el Widget se mueve suavemente desde la actual posicin
x/y (100, 100).
21.1.2 varias propiedades y transiciones
puede animar varias propiedades y uso integrado o funciones de transicin personal
izado usingtransition (o el mtodo abreviado t=). Por ejemplo, para animar la posi
cin y el tamao utilizando el in_quad transicin:
anim = Animacin(x=50, size=(80, 80), t= in_quad ) anim.start(widget)
Tenga en cuenta que el t= parmetro puede ser el nombre de la cadena de un mtodo en
la clase theAnimationTransition o su propia funcin de animacin.
164

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 &amp; . 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 &amp;=(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.

classkivy.animation.animation( kw) Bases: kivy.event.EventDispatcher,


crear una definicin de animacin que se puede utilizar para animar un widget.
Parmetros de duracin o d: la flotacin, por defecto 1.La duracin de la animacin en seg
undos.
Transicin o t: str o funcTransition funcin para animar propiedades. Puede ser el n
ombre de un mtodo fromAnimationTransition.
paso o s: floatStep en milisegundos de la animacin. El valor predeterminado es 1
/ 60.
Eventos
en_start: widgetFired cuando la animacin se inicia en un widget.
on_completo: widgetFired cuando la animacin est completado o detenido en un wid- c
onsiga.
on_progress: widget, progressionFired cuando la progresin de la animacin est cambia
ndo.
165

ha cambiado en la versin 1.4.0: Aadido s/parmetro Step.


animated_propiedades devuelven las propiedades utilizadas para animar.
Cancel(widget) Cancelar las animaciones aplicadas anteriormente a un widget. El
mismo efecto que detener, excepto el on_evento completo no se activar.
Nuevo en la versin 1.4.0.
_staticcancel todos(widget, largs) cancelar todas las animaciones que conciernen
a un determinado widget / lista de propiedades. Seecancel.
Ejemplo:
anim = Animacin(x=50) anim.start(widget)
# y posterior Animacin.cancel_all(widget, x )
nuevo en la versin 1.4.0.
cancel_property(widget, prop) incluso si se est ejecutando una animacin, quitar un
a propiedad. No ser ms animado. Si fue la nica y ltima propiedad que se anima, la an
imacin ser cancelada (seecancel)
nuevo en la versin 1.4.0.
Volver Duracin La duracin de la animacin.
HAVE_properties_para_animar(widget) devolver True si un widget todava tiene propie
dades para animar.
Nuevo en la versin 1.8.0.
Arrancar(widget) Iniciar la animacin en un widget.
stop(widget) detener la animacin previamente aplicado a un widget, desencadenando
el evento.
staticstop_complete_all(widget, largs) detener todas las animaciones que conciern
en a un determinado widget / lista de propiedades.
Ejemplo:
anim = Animacin(x=50) anim.start(widget)
# y posterior Animacin.stop_all(widget, x )
stop_property(widget, prop) incluso si se est ejecutando una animacin, quitar una
propiedad. No ser ms animado. Si fue la nica y ltima propiedad que se anima, la anim
acin se detendr (seestop)
Retorno de la transicin La transicin de la animacin.
classkivy.animation.AnimationTransition Bases: builtins.object
166

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

Una aplicacin puede ser construida si desea devolver un widget en build(), o si u


sted establezca self.root.
importar kivy kivy.require( 1.0.7 )
de kivy.app App importacin de kivy.uix.Button Botn Importar
clase TestApp(App):
def construir(self):
# devolver un botn() como una raz widget Botn return(text= hola mundo )
si __name__ == "__main__ :
TestApp().run() en
el archivo tambin est disponible en la carpeta Ejemplos atkivy/examples/aplicacin/a
pp_con_build.py.
Aqu, ningn widget rbol fue construido (o si se quiere, un rbol con slo el nodo raz).
Mtodo con kv archivo
tambin puede utilizar el lenguaje Kivy para crear aplicaciones. .kv pueden conten
er reglas y definiciones de widget de raz al mismo tiempo. Aqu est el mismo ejemplo
que el botn en un fichero de kv.
Contenido de test.kv :
#:kivy 1.0
Botn:
texto: "Hello from test.kv
contenido de main.py :
Aplicacin construida a partir de un archivo .Kv =============================
========
Esto muestra cmo utilizar implcitamente un archivo .kv para su aplicacin. Usted deb
e ver una pantalla completa botn etiquetado "Hello from test.kv".
Despus de Kivy crea una instancia de una subclase de App, que implcitamente busca
un archivo .kv. El archivo test.kv es seleccionado porque el nombre de la subcla
se de App es TestApp kivy, lo que implica que debe intentar cargar "test.kv". Di
cho archivo contiene un widget de raz.
importar kivy kivy.require( 1.0.7 )
de kivy.app importar
clase app TestApp(App):
pase
175

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

Android. Puede llamar manualmente App.open_configuracin App.() y close_settings()


si desea controlar manualmente. Cada cambio en el panel es auto- matically guar
dados en el archivo de configuracin.
Tambin puede useApp.build_settings() para modificar las propiedades del panel de
ajustes. Por ejemplo, el panel predeterminado tiene una barra lateral para cambi
ar entre paneles de json cuyo ancho predeterminados a 200DP. Si prefieres que es
to sea ms estrecho, podra agregar:
settings.interface.menu.width = dp(100)
a yourbuild_settings() mtodo.
177

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

config = Ninguno devuelve una instancia de la ConfigParser para la configuracin d


e la aplicacin. Puede usar esto para consultar algunos config tokens en thebuild(
) mtodo.
crear_settings() crea el panel de ajustes. Este mtodo normalmente se llama slo una
vez por cada aplicacin life-tiempo y el resultado se almacena en cach internament
e, pero podra ser llamado de nuevo si se retira el panel cach bydestroy_settings()
.
Por defecto, se crear un panel de ajustes segn settings_Cls, llamada build_setting
s(), agregue un panel Kivy si use_kivy_settings es True, y enlazar a on_close/en
_config_change.
Si desea conectar su propia manera de hacer ajustes, sin el panel de Kivy o cerr
ar/config cambiar eventos, este es el mtodo que desea la sobrecarga.
Nuevo en la versin 1.8.0.
Valores_destroy() nuevo en la versin 1.8.0.
La configuracin actual del panel Dereferences si existe uno. Esto significa que c
uando App.open_settings() es la siguiente ejecucin, un panel nuevo se crea y apar
ece. Esto no afecta el contenido del panel, pero le permite (por ejemplo) actual
izar el diseo del panel de configuracin si ha cambiado la configuracin widget en re
spuesta a un cambio de tamao de pantalla.
Si tienes modifiedopen_settings_settings ordisplay()(), debe ser cuidadoso para
detectar correctamente si los ajustes anteriores widget ha sido destruida. un
directorio nuevo en la versin 1.0.7.
Volver al directorio donde la aplicacin vidas.

display_settings(configuracin) nuevo en la versin 1.8.0.


Mostrar el panel de ajustes. Por defecto, el panel se dibuja directamente en la
parte superior de la ventana. Puede definir otros comportamientos reemplazando e
ste mtodo, como agregarlo a una ScreenManager o emergente.
Debe devolver true si la pantalla es correcta, de lo contrario, False.
Ajustes de parmetros: SettingsYou puede modificar este objeto para modificar los
ajustes de la pantalla.
get_application_config(rutapredeterminada=%(appdir)s/%(appname)s.ini) nuevo en l
a versin 1.0.7.
Ha cambiado en la versin 1.4.0: Personalizar la ruta predeterminada para las plat
aformas iOS y Android.
Aadido un parmetro rutapredeterminada para sistemas operativos de escritorio (no a
plicable para iOS y Android.)
Devuelve el nombre del archivo de configuracin de la aplicacin. Segn la plataforma,
la ap licacin archivo ser almacenado en diferentes ubicaciones:
En iOS: <appdir>/Documents/. <appname>
.ini en Android: /sdcard/. <appname>.ini lo contrario: <appdir>/ <appname>.ini
cuando se distribuye una aplicacin en los escritorios, tenga en cuenta que si la
aplicacin est destinado a ser instalado en todo el sistema, el usuario podra no tie
nen acceso de escritura al

directorio de aplicacin 181. Si desea guardar la configuracin del usuario, debe so


brecargar este mtodo y cambiar el comportamiento predeterminado para guardar el a
rchivo de configuracin en el directorio del usuario.
clase TestApp(App):
def get_application_config(self):
retorno super(TestApp, auto).get_application_config( ~/.%(appname)s.ini )
algunas notas:
La tilda ~ se ampliar al directorio del usuario.
%(appdir)s ser reemplazada con el applicationdirectory %(appname)s ser reemplazada c
on el applicationname
get_application_icon() devuelven el icono de la aplicacin.
get_application_name() devuelve el nombre de la aplicacin.
staticget_RUNNING_app() devuelva la instancia de la aplicacin que se est ejecutand
o en la actualidad.
Nuevo en la versin 1.1.0. El
icono icono de la aplicacin. El icono puede estar ubicado en el mismo directorio
que el archivo principal. Puede establecer esto como sigue:
clase MyApp(App):
def construir(self):
Auto = myicon.Icon.png"
nuevo en la versin 1.0.5.
Ha cambiado en la versin 1.8.0: Icono es ahora aStringProperty. No establece el i
cono que se encuentra en la clase como ya he indicado en la documentacin.
Nota: Para Kivy anteriores a 1.8.0, necesita establecer esto como sigue:
clase MyApp(App):
icono = customicon.png"
recomendada 256x256 o 1024x1024? Para GNU/Linux y Mac OSX 32x32 para Windows7 o
menos. &lt;= 256x256 para Windows 8 256x256 funciona en Windows 8 (por lo menos)
, pero es reducido y no tiene tan buen aspecto como un icono de 32x32.
kv_ruta del directorio del directorio donde se almacena la aplicacin kv, por defe
cto ninguno
nuevo en la versin 1.8.0.
Si un directorio_kv, sta ser utilizada para obtener el archivo inicial de kv. De f
orma predeterminada, se supone que el archivo est en el mismo directorio que el a
rchivo de definicin de aplicacin actual.

kv_File Nombre del fichero a cargar Kv, cambia a Ninguno.


Nuevo en la versin 1.8.0.
182

Si un kv_archivo se establece, ser cargado cuando se inicia la aplicacin. La carga


del archivo "default" kv ser impedido.
config_load() (interno) Esta funcin se utiliza para devolver un ConfigParser con
la aplicacin configura- cin. Hacer 3 cosas:
1.Creacin de una instancia de ConfigParser
2.Cargar la configuracin predeterminada por callingbuild_config() y, a continuacin
,
3.Si existe, se carga el archivo de configuracin de la aplicacin, ya que de lo con
trario se crea uno.
Instancia ReturnsConfigParser
load_kv(filename=None) Este mtodo se invoca la primera vez que la aplicacin se eje
cute si ningn widget rbol ha sido formar antes para esta aplicacin. A continuacin, es
te mtodo busca una coincidencia de kv archivo en el mismo directorio que el archi
vo que contiene la clase Application.
Por ejemplo, supongamos que tiene un archivo llamado main.py que contiene:
clase ShowcaseApp(App):
pase
este mtodo buscar un archivo llamado showcase.kv en el directorio que contiene mai
n.py.
El nombre del archivo tiene que ser kv el nombre en minsculas de la clase, sin el
sufijo APP al final, si existe.
Puede definir reglas y un widget en su raz kv archivo:
<ClassName>: # Esta es una regla ...
ClassName: # Este es un widget de raz ...
Debe haber slo una raz widget. Consulte la documentacin del lenguaje Kivy para obte
ner ms informacin sobre cmo crear archivos de kv. Si el archivo contiene un kv widget de raz, s
er utilizado como auto.root, el widget de raz para la aplicacin.
Nota: Esta funcin se llama desde run(), por lo tanto, cualquier widget cuyo estil
o se define en este archivo y se crea kv beforerun() es llamado (por ejemplo en
el __init__), no tiene su estilo aplicado. Nota thatbuild() es llamado postcarga
_kv ha sido llamado.
Nombre nuevo en la versin 1.0.7.
Devolver el nombre de la aplicacin basada en el nombre de la clase.
on_config_change(config, seccin, clave, valor) controlador de eventos dispararon
cuando un testigo de configuracin ha sido cambiada por la pgina settings.
on_pause() llama al controlador de eventos se solicita el modo de pausa. Debe de
volver true si su aplicacin puede entrar en modo de pausa, de lo contrario devolv
er false y su aplicacin estar parado (el valor predeterminado).
No se puede controlar cuando la aplicacin se va a ir en este modo. Es determinada
por el sistema operativo y se utiliza principalmente para dispositivos mviles (a
ndroid/ios) y para ajustar el tamao.
El valor de retorno es false por defecto.
183

Nuevo en la versin 1.1.0.


_resume() en el controlador de eventos llama cuando su aplicacin se reanuda desde
el modo de pausa.
Nuevo en la versin 1.1.0.
Advertencia: Cuando se reanuda, el OpenGL contexto podran haber sido daados / libe

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 &lt; 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

dados y ajustes. Esta funcin implementa estos convenios.


El <app_name>Directorio es creado cuando la propiedad se denomina, a menos que y
a exista.
En iOS, ~/Documentos/ <app_name>Es devuelto (que se encuentra dentro de la aplic
acin de la sandbox).
En Android, /sdcard/ <app_name>Es devuelto.
En Windows, %APPDATA%/ <app_name>Es devuelto.
En OS X, ~/Library/Application Support/ <app_name>Es devuelto.
En Linux, $XDG_CONFIG_HOME/ <app_name>Es devuelto.
21.3 El cargador de datos asincrnica
es el cargador asincrnica. Se puede utilizar para cargar una imagen y utilizarla,
incluso si los datos no estn an disponibles. Debe especificar un valor predetermi
nado cargando imagen al utilizar el cargador:
de kivy.loader Cargador Import image = Loader( mysprite.image.png")
tambin puede cargar una imagen desde una direccin URL:
image = Loader.image( Http://mysite.com/test.png )
si desea cambiar la configuracin predeterminada de cargar la imagen, puede hacer:
185

Loader.LOADING_image = Imagen( otro_loading.png")


21.3.1 afinando el cargador asncrono de
nuevo en la versin 1.6.0.
Puede ajustar el cargador para proporcionar una mejor experiencia de usuario o ms
rendimiento, dependiendo de las imgenes que se van a cargar. Eche un vistazo a l
os parmetros siguientes:
Loader.num_trabajadores - Definir el nmero de subprocesos de inicio para cargar l
as imgenes.
Loader.max_upload_per_frame - definir la mxima carga de imgenes en el GPU para hac
erlo por trama.
classkivy.loader.LoaderBase Bases: builtins.objeto
base comn para el cargador y las implementaciones especficas. De forma predetermin
ada, el cargador ser la mejor aplicacin del cargador.
El _Update() se llama cada 1 / 25.s o cada fotograma si tenemos menos de 25 fps.
error_image imagen utilizada por error. Puede cambiarla haciendo:
Loader.Error_image = error.png"
ha cambiado en la versin 1.6.0: ya no readonly.
imagen(filename, load_callback=none, post_callback=none,
kwargs) carga una imagen
utilizando el cargador. Un ProxyImage regresa con una carga de imagen. Puede uti
lizarlo como sigue:
de kivy.app App importacin de kivy.uix.image.kivy Importar imagen del cargador ca
rgador de la
clase de importacin TestApp(App):
def _image_loaded(self, proxyImage):
si proxyImage.image.textura:
self.image.textura = proxyImage.image.textura
def construir(self):
proxyImage = Loader("myPic.image.jpg") proxyImage.bind(on_load=Auto._image_loade
d) self.Image = Image() devuelven self.image
TestApp().run()
con el fin de cancelar todos los antecedentes carga, llamada Loader.stop().
Cargar_imagen imagen utilizada para la carga. Puede cambiarla haciendo:
Loader.LOADING_image = loading.png"
ha cambiado en la versin 1.6.0: No readonly ya.
max_upload_per_frame El nmero de imgenes a cargar en cada fotograma. De forma pred
eterminada, vamos a cargar slo 2 imgenes al
186

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>] # ...
} # ...
}

Ejemplo del Kivydata/images/defaulttheme.atlas:


{ "defaulttheme-0.png": { "progressbar_background": [431, 224, 59, 24], "imagendesaparecidos": [253, 344, 48, 48], "filechooser_selected": [1, 207, 118, 118],
"burbuja_btn": [83, 174, 32, 32], # ... y ms ...
} }
En este ejemplo, "defaulttheme-0.png" es una imagen grande, con el pix- els en e
l rectngulo desde (431, 224) a (431, 224 + 59 + 24) utilizable como atlas://data/
images/defaulttheme/_background progressbar en cualquier imagen parame- ter.
21.4.2 Cmo crear un Atlas
Atlas Advertencia: la creacin requiere la almohada biblioteca (o la extinta Imagi
ng/PIL library). Este requisito ser eliminado en el futuro cuando el Kivy Core Im
age es capaz de soportar la carga, blitting y guardar las operaciones.
Ud directamente puede usar este mdulo para crear atlas archivos con este comando:
$ python -m.atlas kivy <basename><size><list of images...>
Digamos que usted tiene una lista de las imgenes que desea poner en un Atlas. El
directorio es namedimages con montones de archivos PNG de 64x64 en el interior:
$ ls imagenes imgenes de CD $
188

$ ls burbuja.png bubble-botn rojo.png.png button-down.png


puede combinar todos los PNG s en un atlas y generar el archivo con:
$ python -m.atlas myatlas kivy 256x256 .png Atlas creados en myatlas.Atlas 1 imag
en ha sido creado $ ls burbuja.png bubble-botn rojo.png.png button-down.png myatl
as.atlas myatlas-0.png
como puedes ver, tenemos 2 nuevos archivos:myatlas.atlas andmyatlas-0.png. myatl
as-0.png es un nuevo 256x256 .png compuesto de todas sus imgenes.
Nota: Cuando utilice este script, el ids referenciados en el atlas son los nombr
es de base de las imgenes sin la extensin. Por lo tanto, si usted va a nombrar un
archivo../images/button.png, el identificador para esta imagen bebutton.
Si necesita informacin de ruta incluido, usted debera includeuse_path como sigue:
$ python -m.atlas kivy use_path myatlas 256 .png,
en cuyo caso el Id../images/button.png se beimages_button
21.4.3 Cmo usar un Atlas
Usualmente, usted tendra que especificar las imgenes, proporcionando la ruta:
Botn =(background_normal= images/button.png", background_abajo= images/button_dow
n.png")
En nuestro ejemplo anterior, hemos creado el atlas con imgenes y ponerlas en imag
es/myatlas.atlas. Puede utilizar la notacin de url para hacer referencia a ellas:
a = Botn(background_normal= Atlas://images/myatlas/botn", background_abajo= Atlas:
//images/myatlas/button_down")
En otras palabras, la ruta de las imgenes se sustituir por el texto siguiente:
atlas://ruta/a/myatlas/ID # buscar el ruta/a/myatlas.Atlas y obtener la image
n id
Nota: En el atlas url, no hay necesidad de agregar la extensin.atlas. Se aade auto
mticamente al nombre del archivo.
21.4.4 uso manual del atlas
&gt;&gt;&gt; de kivy.Atlas Atlas &gt;&gt;&gt; import Atlas Atlas =( ruta/a/myatl
as.atlas ) &gt;&gt;&gt; print(atlas.texturas.keys() [ burbuja , bubble-rojo ,
botn , button-down ] &gt;&gt;&gt; print(atlas[ button ]) <kivy.graphics.texture.
TextureRegion object at 0x2404d10>
189

classkivy.Atlas.Atlas(Filename) Bases: kivy.event.EventDispatcher,


administrar atlas de textura. Consulte la documentacin del mdulo para obtener ms in

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 &lt; 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 &gt;= 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

Clave = objectid instance = etiqueta(text=text) Cach.append( mycache , clave, i


nstancia)
# recuperar la instancia de objeto en cach = Cache.get( mycache , clave)
si la instancia es null, la cach puede tener descart porque no has usado la etique
ta durante 5 segundos y has alcanzan el lmite.
classkivy.cache.Cache Bases: builtins.object
Ver mdulo documentacin para ms informacin.
staticappend(categora, clave obj, timeout=None) Aadir un nuevo objeto en la cach.
Categora parmetros[str] Identificador de categora.
tecla[str] Identificador nico del objeto a almacenar.
obj[object] Objeto a almacenar en la memoria cach.
timeout[doble (opcional)], el tiempo tras el cual se elimina el objeto si no se
ha utilizado. Si ninguno, sin tiempo de espera se aplica.
staticget(categora, clave default=None) Obtiene un objeto desde la cach.
Categora parmetros[str] Identificador de categora.
tecla[str] Identificador nico del objeto en el almacn
predeterminado.[nada, por defecto Ninguno] valor predeterminado que debe devolve

rse si no se encuentra la clave.


staticget_lastaccess(categora, clave default=None) obtiene la hora del ltimo acces
o de objetos en la memoria cach.
Categora parmetros[str] Identificador de categora.
tecla[str] Identificador nico del objeto en el almacn
predeterminado.[nada, por defecto Ninguno] valor predeterminado que debe devolve
rse si no se encuentra la clave.
staticget_timestamp(categora, clave default=None) Obtiene el objeto timestamp en
la cach.
Categora parmetros[str] Identificador de categora.
tecla[str] Identificador nico del objeto en el almacn
predeterminado.[nada, por defecto Ninguno] valor predeterminado que debe devolve
rse si no se encuentra la clave.
staticprint_usage() imprimir el uso del cach de la consola.
191

staticregister(categora, limit=none, timeout=None) Registrar una nueva categora en


la cach con el lmite especificado.
Categora parmetros[str] Identificador de categora.
lmite [int] (opcional) Nmero mximo de objetos permitidos en la cach. Si ninguno, no
se aplica ningn lmite.
timeout[doble (opcional)], el tiempo tras el cual se elimina el objeto si no se
ha utilizado. Si ninguno, sin tiempo de espera se aplica.
staticremove(categora, clave=None) purgar la cach.
Categora parmetros[str] Identificador de categora.
tecla[str (opcional)] Identificador nico del objeto en la tienda. Si este argumen
to no es alimentado, la categora entera sern purgadas.
21.6 objeto de Reloj
El reloj objeto le permite programar una llamada de funcin en el futuro; una vez
o repetidamente a intervalos especificados. Usted puede obtener el tiempo transc
urrido entre la programacin y la llamada de devolucin de llamada a travs de la dt a
rgumento:
# dt significa delta-tiempo def mi_callback(dt):
pase
# llamar mi_callback cada 0,5 segundos Clock.Schedule_interval(mi_callback, 0.5)
# llamar mi_callback en 5 segundos el reloj.Schedule_once(mi_callback, 5)
# llamar mi_callback tan pronto como sea posible (normalmente al fotograma sigui
ente.) Reloj.Schedule_once(mi_callback)
Nota: Si la devolucin de llamada devuelve False, el horario ser eliminado.
Si desea programar una llamada a funcin con argumentos predeterminados, puede uti
lizar el mdulo functools.python parcial:
desde functools importar parcial
def mi_callback(valor, clave largs):
pase
Clock.Schedule_interval (parcial(mi_callback, Mis Valores , mi key ), 0.5)
, Por el contrario, si desea programar una funcin que no acepta el argumento de D
T, puede usar una expresin lambda para escribir una breve funcin que acepta el DT.
Por ejemplo:
def no_args_func():
print("Acepto sin argumentos, as que no me programar el reloj")
192

Clock.Schedule_once(lambda dt: no_args_func(), 0.5)


Nota: no puede desprogramar una funcin annima a menos que usted tenga una referenc

ia a l. Es mejor agregar args a su definicin de funcin, de modo que puede llamarse c


on un nmero arbitrario de parmetros.
Importante: la devolucin de llamada es dbil-referenced: usted es responsable de ma
ntener una referencia a su orig inal- objeto/devolucin de llamada. Si no mantiene
s una referencia, el ClockBase nunca podr ejecutar su devolucin. Por ejemplo: la
clase Foo(object):
def(self) Inicio:
Reloj.Schedule_interval(self.callback, 0,5)
def callback(self, DT):
print( a )
# callback un objeto Foo se crea y se llama al mtodo start.
# porque no se mantiene la referencia a la instancia devuelta desde foo(), el ob
jeto # sern recogidos por el recolector de basura de Python y # la devolucin de ll
amada se llama nunca.
Foo().start()
# as que debe hacer el siguiente y mantener una referencia a la instancia de foo
# hasta que ya no la necesita!
Foo Foo() = foo.start()
21.6.1 Programar antes de que la trama de
nuevo en la versin 1.0.5.
A veces es necesario programar una llamada antes de que el siguiente fotograma.
A partir de 1.0.5, puede usar un tiempo de espera de -1:
Reloj.Schedule_once(mi_callback, 0) # llamada despus del siguiente fotograma Cloc
k.Schedule_once(mi_callback, -1) # Llamar antes del siguiente fotograma
el reloj ejecutar todas las devoluciones de llamada con un tiempo de espera de -1
antes del siguiente fotograma incluso si agrega una nueva devolucin de llamada c
on -1 de una devolucin de llamada. Sin embargo, el reloj tiene un lmite de iteraci
ones para estas devoluciones de llamada: el valor por omisin es 10.
Si usted programar una llamada que planifica una devolucin de llamada que planifi
ca un .. etc ms de 10 veces, dejar el bucle y enviar una alerta a la consola y, a
continuacin, continuar despus de la siguiente trama. Esto se apli- carse para evit
ar errores de bloquea la aplicacin.
Si necesita aumentar el lmite establecido themax_iteracin: propiedad
de kivy.clock Clock de importacin.max_iteracin = 20
21.6.2 desencadena eventos
nuevos en la versin 1.0.5.
193

un evento desencadenado es una forma de aplazar un callback exactamente como Sch


edule_once(), pero con algunos aadidos- nience equipadas. La devolucin de llamada
slo se planificar una vez en cada fotograma, incluso si llama el gatillo dos veces
(o ms).
Este no es el caso withClock.Schedule_once():
# ejecutar el callback dos veces antes del siguiente fotograma Clock.Schedule_onc
e(mi_callback) Clock.Schedule_once(mi_callback)
# ejecutar la devolucin de llamada una vez antes de la prxima trama t = reloj.creat
e_trigger(mi_callback) t() t()
antes de la activacin de eventos, puede haber utilizado este enfoque en un widget
:
def trigger_callback(self, largs):
Reloj.desprogramar(self.callback) Clock.Schedule_once(self.callback)
tan pronto como se llama trigger_callback(), se va a programar correctamente la
devolucin de llamada una vez en el siguiente fotograma. Es ms conveniente para cre
ar y enlazar el evento activado de usingClock.Schedule_once() en una funcin:
de kivy.reloj reloj de importacin de kivy.uix.Widget Widget
muestra la clase de importacin(Widget):
def __init__(self,
kwargs):

Auto._trigger = reloj.create_trigger(self.cb) super(ejemplo, auto).__init__( kwargs


) self.bind(x=Auto._trigger, y=Auto._trigger)
def cb(self, largs):
pase
incluso si x e y cambios dentro de un fotograma, la devolucin de llamada slo se ej
ecuta una vez.
Nota: ClockBase.create_trigger() tambin tiene un parmetro de tiempo de espera que
se comporta exactamente como ClockBase.Schedule_once().
21.6.3 Enhebrado de
nuevo en la versin 1.9.0.
A menudo, otros subprocesos se utilizan para programar callbacks con usingClockB
ase kivy del subproceso principal. - das, es importante saber qu es seguro para l
os subprocesos y qu no lo es.
Todos los ClockEvent ClockBase y mtodos son seguros con respecto a la rosca de ki
vy. Es decir, siempre es seguro llamar a estos mtodos desde un nico subproceso que
no es el subproceso de kivy. Sin embargo, no hay garantas en cuanto al orden en
que estas devoluciones de llamada ser ejecutado.
Llamar a un desencadenador previamente creada a partir de dos hilos diferentes (
incluso si uno de ellos es el kivy thread), o llamando al gatillo y su ClockEven
t.Cancel() mtodo de dos hilos diferentes, al mismo tiempo, no es seguro. Es decir
, aunque no se producir ninguna excepcin, no hay garantas de que llamar el desencad
enador de dos diferentes subprocesos no dar lugar a la devolucin de llamada que se
ejecuta dos veces, o no se ejecuta en absoluto. Asimismo, pueden surgir problem
as cuando llama el gatillo y cancelarla con ClockBase.desprogramar() orClockEven
t.Cancel() de dos hilos simultneamente.
194

Por lo tanto, es seguro llamar a ClockBase.create_trigger(), ClockBase.Schedule_


once(), ClockBase.Schedule_interval() o llamada o cancelar un desencadenador cre
ado previamente desde una rosca externa. El cdigo siguiente, sin embargo, no es s
eguro porque las llamadas o cancela desde dos subprocesos simultane- amente sin
ningn mecanismo de bloqueo:
Evento = reloj.create_trigger(func)
# en el subproceso 1 event() # en el subproceso 2 event() # ahora, el evento pue
de ser programado dos veces o una vez
# El siguiente es tambin inseguro # en el subproceso 1 event() # en el subproceso
2 evento.Cancel() # ahora, el evento puede o no ser programado y una llamada po
sterior # pueden programar dos veces se
nota en el cdigo anterior, el subproceso 1 subproceso 2 o podra ser el hilo kivy,
no solo la rosca externa.
kivy.clock.Clock = Ninguna instancia ofClockBase.
classkivy.clock.ClockBase Bases: kivy.reloj._ClockBase
un reloj objeto con asistencia de eventos.
crear_trigger(callback, timeout=0) crear un evento desencadenante. Mdulo de contr
ol de la documentacin para ms informacin.
Instancia ReturnsAClockEvent. Para programar la devolucin de llamada de esta inst
ancia, puede llamarlo.
Nuevo en la versin 1.0.5.
Nmero de marcos marcos internos (no necesseraly dibujados) desde el inicio del re
loj.
Nuevo en la versin 1.8.0.
Marcos_muestran el nmero de fotogramas mostrados desde el inicio del reloj.
frametime Tiempo transcurrido entre el ltimo fotograma y el fotograma actual (en
segundos).
Nuevo en la versin 1.8.0.
get_arrancar() obtiene el tiempo en segundos desde el inicio de la aplicacin.
get_fps() obtiene la actual FPS promedio calculado por el reloj.

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

get_time() obtiene el ltimo tick hechas por el reloj.


max_iteracin nuevo en la versin 1.0.5: Cuando una programacin_una vez se usa con -1
, puede agregar un lmite de iteracin ser permitido. Que est aqu para evitar demasiado
relayout.
Schedule_interval(la devolucin de llamada, el tiempo de espera) programar un even
to que se llama cada <timeout>Segundos.
Instancia ReturnsAClockEvent. En contraposicin paracrear_trigger(), el cual slo cr
ea el evento desencadenante, este mtodo tambin programaciones.
Schedule_once(callback, timeout=0) Programar una cita en <timeout>Segundos. Si <
timeout>No se ha especificado o es 0, la devolucin de llamada que se llamar despus
el siguiente fotograma se representa.
Instancia ReturnsAClockEvent. En contraposicin paracrear_trigger(), el cual slo cr
ea el evento desencadenante, este mtodo tambin programaciones.
Ha cambiado en la versin 1.0.5: Si el tiempo de espera es -1, la devolucin ser llam
ado antes del siguiente fotograma (tico_draw()).
tick() adelantar el reloj para el siguiente paso. Debe llamarse cada fotograma.
El reloj por defecto tiene un tick() llama al ncleo de marco Kivy.
tick_draw() Marque el dibujo. Contador de
tiempo = functools.partial(&lt;funcin _libc_CLOCK_gettime_wrapper. <locals>._time
en 0x2b55f37dcc80&gt;)
desprogramar(callback, todos=True) quitar un evento programado anteriormente.
Parmetros: ClockEvent callback o llamar.Si es una instancia ClockEvent, entonces
la devolucin de llamada asociada con este evento ser cancelado si est programada. S
i es exigible, entonces el se desprogramar exigible si se programara.
Todos: boolIf verdadero y si la devolucin de llamada es un rescatable, todas las
instancias de este ser exigible no programada (es decir si esta era exigible prev
isto varias veces). El valor predeterminado es True.
Ha cambiado en la versin 1.9.0: Se ha aadido el parmetro all. Antes, se comport como
si todo era verdad.
.ClockEvent classkivy.clock(reloj, bucle, devolucin de llamada, tiempo de espera,
starttime, CID, trigger=false) Bases: builtins.objeto
una clase que describe una retrollamada programada con kivy sreloj. Esta clase n
unca es creado por el usuario; en cambio, kivy crea y devuelve una instancia de
esta clase al programar una devolucin de llamada.
Advertencia: la mayora de los mtodos de esta clase son internos y pueden cambiar s
in previo aviso. La nica excepcin es el botn Cancelar() y__call__() Mtodos.
Cancel() cancela la devolucin de llamada si fue programado para ser llamado.
kivy.clock.mainthread(func) decorador que programar la llamada de la funcin para e
l siguiente fotograma de la mainthread.
Puede ser til cuando usted useUrlRequest o cuando se realice la programacin de sub
procesos: Usted no puede hacer ningn trabajo relacionado con OpenGL en un hilo.
196

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. )

self.req =(UrlRequest url= http://... , on_success=callback)


nuevo en la versin 1.8.0.
21.7 Compatibilidad mdulo para Python 2.7 y &gt; 3,3
kivy.compat.PY2 = False True, si la versin de Python ejecutando es 2.x.
kivy.compat.string_types tipos de cadena que puede ser usada para verificar si u
n objeto es una cadena
alias
21.8 Configuracin
TheConfig ofstr objeto objeto es una instancia de un Python ConfigParser modific
ada. Consulte la documenta- cin ConfigParser para ms informacin.
Kivy tiene un archivo de configuracin que determina los ajustes predeterminados.
Para cambiar estas opciones, puede modificar este archivo manualmente o utilizar
el objeto Config. Por favor, consulte la seccin Configurar Kivy para ms informacin
.
21.8.1 aplicar configuraciones de
control de opciones de configuracin de la inicializacin de theApp. A fin de evitar
situaciones en las que la configuracin no funcionan o no se aplican antes de la
creacin de la ventana (como la configuracin de un tamao inicial de la ventana), Con
fig.set debe usarse antes de importar cualquier otra Kivy mdulos. Idealmente, est
o significa la creacin de ellos justo al comienzo de su principal.py script.
Alternativamente, puede guardar estos ajustes permanentemente usingConfig.set lu
ego Config.Write. En este caso, ser necesario reiniciar la aplicacin para que los
cambios surtan efecto. Observe que este enfoque afectar a todos Kivy apps de todo
el sistema.
21.8.2 El Uso del objeto Config
para leer una configuracin token de una seccin particular:
&gt;&gt;&gt; de kivy import.config Config &gt;&gt;&gt; Config.getint( kivy , sh
ow_fps ) 0
Cambiar la configuracin y guardarla:
&gt;&gt;&gt; Config.set( posprocesamiento , reservar_time , 50 ) &gt;&gt;&gt;
Config.write()
197

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:

- Kivy permiten elegir la mejor opcin para su plataforma actual.


system - teclado real.
"DOCK" - un teclado virtual acoplado a un lado de la pantalla.
multi - un teclado virtual para cada widget solicitud.
"ystemanddock - virtual keyboard plus acoplada la entrada desde el teclado real

.
"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

jitter_ignore_devices: string, separados con comas Lista de dispositivos para om


itir la deteccin de jitter.
retain_distancia: int si el toque se mueve ms de lo indicado por conservar_distan
cia, no ser retenida. Argumento debe ser un entero entre 0 y 1000.
retener int_time: el tiempo permitido para conservar un toque, en milisegundos.
triple_toca_distance: distancia mxima flotacin permiti una triple punteo, normaliza
do en- lado el rango de 0 a 1000.
triple toque_int_time: el tiempo permitido para la deteccin de triple punteo, en
milisegundos. Los
grficos
sin bordes: int , uno de 0 o 1 si se establece en 1, se elimina el borde de la v
entana o la decoracin.
window_state: string , uno de visibles , oculta , maximized o minimized es
tablece el estado de la ventana, cambia a visible . Esta opcin slo est disponible
para SDL2 proveedor de ventana y debe ser utilizado en los sistemas operativos d
e escritorio.
fbo: cadena, uno de hardware , software o Hardware fuerza selecciona la FBO
back end para utilizar.
fullscreen: int o string, uno de 0, 1, falso o auto Activar fullscreen. Si s
e establece en 1, con una resolucin de pxeles de ancho multiplicado por altura ser
utilizado. Si se establece en auto, su resolucin de pantalla actual se utilizar en
su lugar. Esto es ms probable que lo que usted desea. Si desea colocar la ventan
a en otra pantalla, utilice falsas, o establecer la opcin Sin bordes desde la sec
cin de grficos y, a continuacin, ajustar el ancho, la altura superior e izquierda.
altura: int loskits de altura, no se utiliza si fullscreen est establecido en aut
o.
Izquierda: int posicin izquierda de loskits.
maxfps: int, por defecto a 60 FPS mximo permitido.
Advertencia: ajuste a 0 maxfps conducir al mximo el uso de la CPU.
Multisamples : int, predetermina 2 establece el MultiSample Anti-Aliasing (MSAA
).
El aumento de este valor se traduce en grficos ms suaves pero a costa del tiempo d

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

min_state_time: flotacin, predeterminados a 0.035 tiempo mnimo de widgets para most


rar un determinado estado visual. Este atributo es utilizado actualmente por los
widgets como &amp; ButtonBehavior desplegable para asegurarse de que mostrar su
estado visual actual para el momento dado. La
entrada puede crear nuevos dispositivos de entrada utilizando esta sintaxis:
# ejemplo de instancia de proveedor de entrada = yourid providerid,parmetros
# ejemplo de proveedor predeterminado = tuio tuio,127.0.0.1:3333 mitabla = tuio,
192.168.0.1:3334
Ver tambin:
Controlar los proveedores kivy.input.providers para conocer la sintaxis a utiliz
ar dentro de la configura- cin de archivo.
widgets
scroll_distancia: int valor predeterminado de la propiedad scroll_distancia Scro
llView utilizados por el widget. Compruebe la documentacin del widget para obtene
r ms informacin.
scroll_float friccin: valor predeterminado de la propiedad scroll_friccin ScrollVi
ew utilizados por el widget. Compruebe la documentacin del widget para obtener ms
informacin.
scroll_timeout: int valor predeterminado de la propiedad Timeout_scroll utilizad
os por el ScrollView widget. Compruebe la documentacin del widget para obtener ms
informacin.
scroll_tiempo de parada: int valor predeterminado de la propiedad scroll_hora de
interrupcin utilizada por el ScrollView widget. Compruebe la documentacin del wid
get para obtener ms informacin.
Obsoleto desde la versin 1.7.0: Por favor useeffect_Cls.
scroll_int se mueve: valor predeterminado de la propiedad scroll_mueve ScrollVie
w utilizados por el widget. Compruebe la documentacin del widget para obtener ms i
nformacin.
Obsoleto desde la versin 1.7.0: Por favor useeffect_cls en lugar.
Los mdulos se pueden activar mdulos con esta sintaxis:
modulename =
Nada despus del = se pasar al mdulo como argumentos. Compruebe la documentacin del md
ulo especfico para obtener una lista de los argumentos aceptados.
Ha cambiado en la versin 1.9.2: min_state_time se ha aadido a la seccin de grficos.
Ha cambiado en la versin 1.9.0: sin bordes y window_estado han sido aadidos a la s
eccin de grficos. Falso El valor de la opcin de pantalla completa se ha quedado obs
oleta, utilice la opcin sin bordes en lugar. pause_on_MINIMIZE ha sido aadido a la
seccin de kivy.
Ha cambiado en la versin 1.8.0: systemandmulti systemanddock y se ha aadido como v

alores posibles para la tecla- board_mode en la seccin kivy. exit_en_escape ha si


do aadido a la seccin de kivy.
Ha cambiado en la versin 1.2.0: resizable ha sido aadida a la seccin de grficos.
Ha cambiado en la versin 1.1.0: tuio ya no escucha por defecto. Los iconos de la
ventana no se copian al Di- rectorio usuario ya. An puede establecer una nueva ve
ntana icono mediante loskits_icono configuracin config.
Ha cambiado en la versin 1.0.8: scroll_timeout, distancia y scroll_scroll_frictio
n se han aadido, de friccin. lista_list_trigger_distancia y friccin_lista_bound han
quitado. keyboard_tipo y disposicin_teclado han sido eliminados desde el widget.
keyboard_mode_layout de teclado y han sido aadidos a la seccin de kivy.
200

kivy.config.Config = Ninguno predeterminado Configuracin Kivy objeto. Este es un


ejemplo ConfigParser con el nombre kivy .
Config = ConfigParser(name= kivy )
.config.ConfigParser classkivy(name= ) Bases: configparser.RawConfigParser,buil
tins.object
ConfigParser mejorada clase que admite la adicin de secciones predeterminadas y l
os valores por defecto.
De forma predeterminada, la instancia ConfigParser kivy,Config, se llama kivy
y la instancia utilizada por theApp ConfigParser.build_settings mtodo es llamado
app .
Parmetros stringThe name: nombre de la instancia. Seename. Predeterminados a .
Ha cambiado en la versin 1.9.0: Cada ConfigParser puede ahora ser nombrado. Usted
puede obtener el ConfigParser asociado con un nombre usando get_configparser().
Adems, ahora puede controlar los valores de config withConfigParserProperty.
Nuevo en la versin 1.0.7.
Aadir_callback (callback, section=none, clave=None) Agrega una devolucin de llamad
a a ser llamado cuando una seccin especfica o clave ha cambiado. Si no especifica
una seccin o clave, se llamar a la funcin callback para todos seccin/cambios clave.
Callbacks recibir 3 argumentos: la seccin, clave y valor.
Nuevo en la versin 1.4.1.
adddefaultsection(seccin) aadir una seccin si la seccin faltante.
staticget_configparser(name) devuelve la instancia theConfigParser cuyo nombre e
s name, o ninguno si no encontrado.
Parmetros: Name Nombre de instancia theConfigParser stringThe regresar.
getdefault(seccin, opcin, defaultvalue) obtiene el valor de una opcin de la seccin e
specificada. Si no encuentra ninguna, devolver el valor predeterminado.
getdefaultint(seccin, opcin, defaultvalue) obtiene el valor de una opcin de la secc
in especificada. Si no encuentra ninguna, devolver el valor predeterminado. El val
or siempre se devuelve como un entero.
Nuevo en la versin 1.6.0.
El nombre asociado con esta instancia ConfigParser, si no . Predeterminados a
. No se puede modificar dinmicamente o en .
Cuando un ConfigParser es dado un nombre, un objeto de configuracin que pueden se
r recuperados usando get_configparser(). Adems, que la instancia de configuracin t
ambin se puede utilizar con una instancia ConfigParserProperty que establezca su
valor de configuracin para este nombre.
Ajuste en ms de una con el mismo nombre ConfigParser subir un ValueError.
read(Filename) un archivo de slo lectura. En contraste con la original de Python
ConfigParser, ste slo es capaz de leer un archivo a la vez. La ltima lectura del ar
chivo se utilizar para thewrite() mtodo.
Ha cambiado en la versin 1.9.0: read() llama ahora a las devoluciones de llamada
si se leen los valores cambiados.
201

quitar_callback (callback, section=none, clave=None) quita un agregado withadd c


allback_callback(). Quitar_callback() debe ser llamada con los mismos parmetros a
sadd_callback().
Plantea un ValueError si no encontrado.
Nuevo en la versin 1.9.0.
Establezca(seccin, opcin, valor) funciona de forma similar al mtodo Set del PythonC
onfigParser, excepto que el valor se convierte implcitamente en una cadena.
setall(seccin keyvalues) establece varios pares clave-valor en una seccin. keyvalu
es debera ser un diccionario que contiene los pares clave-valor para establecerse
.
setdefault(seccin, opcin, valor) para establecer el valor predeterminado para una
opcin en la seccin especificada.
setdefaults(seccin keyvalues) Establecer varios valores predeterminados de clavevalor en una seccin. keyvalues debera ser un diccionario que contiene la nueva cla
ve-valor predeterminados.
update_config(filename, OVERWRITE=false) actualizar la configuracin basada en un
nuevo archivo de configuracin predeterminada. Sobrescribir los valores existentes
si sobrescribir es True.
write() escribe la configuracin para el ltimo archivo abierto con theread() mtodo.
Devuelve True si la escritura se ha realizado correctamente, false en caso contr
ario.
21.9 contexto
nuevo en la versin 1.8.0.
Advertencia: Esto es experimental y sujetos a cambios mientras este aviso est pre
sente.
Kivy tiene unas pocas instancias "global" que son utilizados directamente por mu
chas piezas del marco: Cach, constructor, el reloj.
TODO: documento este mdulo.
kwargs) Registrar un nuevo contex
kivy.Context.register_contexto(nombre, CLS, args,
to.
kivy.Context.get_current_CONTEXT() devuelven el contexto actual.
21.10 event dispatcher
todos los objetos que producen eventos en Kivy theEventDispatcher accesorio que
proporciona una interfaz coherente para registrar y manipular los controladores
de eventos.
Ha cambiado en la versin 1.0.9: descubrimiento de propiedades y mtodos se han movi
do desde el theWidget EventDispatcher.
classkivy.event.Bases: kivy EventDispatcher.event.ObjectWithUid
202

event dispatcher interfaz genrica.


Consulte el mdulo docstring para su uso.
apply_property() agrega propiedades en tiempo de ejecucin a la clase. La funcin ac
epta argumentos de forma prop_name=prop, donde prop aProperty instancia y prop_n
ame es el nombre del atributo de la propiedad.
Nuevo en la versin 1.9.1.
Advertencia: Este mtodo no es recomendado para el uso comn porque usted debe de- c
lare las propiedades en tu clase en lugar de usar este mtodo.
Por ejemplo:
&gt;&gt;&gt; print(Wid.property( sticks , quiet=true)) Ninguno &gt;&gt;&gt; wid.
apply_property(palos=ObjectProperty(55, max=10) &gt;&gt;&gt; print(Wid.property(
sticks , quiet=true)) <kivy.properties.ObjectProperty object at 0x04303130>
Bind bind() un tipo de evento o una propiedad a una devolucin de llamada.
Uso:
# con propiedades def MI_x_callback(obj, valor):

print( on objeto , obj, x , el valor cambia a) def mi_width_callback(obj, valor


):
print( on objeto , obj, anchura cambia a , valor) self.bind(x=MI_x_callback, wi
dth=mi_width_callback)
# con el evento def mi_PRESS_callback(obj):
print( evento de objeto , obj) self.bind(on_pulse=mi_PRESS_callback)
En general, propiedad callbacks son llamados con 2 argumentos (el objeto y la pr
opiedad del nuevo valor) y las devoluciones de llamada de evento con un argument
o (el objeto). El ejemplo anterior ilustra esto.
El siguiente ejemplo muestra varias maneras de utilizar la funcin bind en una apl
icacin completa:
desde kivy.uix.boxlayout BoxLayout importacin de kivy.app App importacin de kivy.u
ix.Button Botn Importar desde functools importar
clase parcial DemoBox(BoxLayout):
""" Esta clase muestra diversas tcnicas que pueden utilizarse para enlazar a even
tos. Aunque algunas partes me podra hacerse ms ptima, conceptos avanzados de Python
son evitados en aras de la legibilidad y claridad.
""" def __init__(self, ):
super(DemoBox
kwargs auto).__init__( kwargs) self.orientacin = "vertical"

# 203 comenzamos con el enlace a un suceso normal. El nico argumento # pas a la de


volucin de llamada es el objeto que hemos enlazado.
btn = Botn(text="Normal enlace al evento") btn.bind(on_pulse=self.en_event)
# a continuacin, enlazamos a un evento de cambio de propiedad estndar. Esto normal
mente pasa # 2 argumentos: el objeto y el valor Btn2 = Botn(text="enlace normal a
un cambio de propiedad") Btn2.bind(state=self.en_property)
# Aqu utilizamos funciones annimas (tambin conocido como lambdas) para realizar el
enlace.
# Su ventaja es que puede evitar declarar nuevas funciones, por ejemplo,
# ofrecen una forma concisa para "reorientar" callbacks.
Btn3 = Botn(text="Uso de funciones annimas"). Btn3.bind(on_pulse=lambda x: self.en
_evento(Ninguno))
# Tambin puede declarar una funcin que acepte un nmero variable de argumentos posic
ionales y # y uso de introspeccin para determinar # qu se pasa en. Esto es muy til
para depurar y # como funcin re-uso. Aqu empleamos estndar a una funcin de enlace de
evento # que acepta argumentos posicionales y opcional.
Btn4 = Botn(text="Use una funcin flexible") Btn4.bind(on_pulse=self.en_nada)
# Por ltimo, mostramos cmo utilizar funciones parciales. # a veces son difciles de
comprender, pero proporcionan una forma flexible y potente para # reutilizar fun
ciones.
Btn5 = Botn(text="utilizando funciones parciales. Para hardcores"). Btn5.bind(on_
pulse=parcial(self.en_nada, "1", "2"="Monthy Python")
pero en [btn, Btn2, Btn3, Btn4, Btn5]:
self.add_widget(pero)
def on_evento(self, obj):
print("evento tpico de", obj)
en def_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))
clase DemoApp(App):
def construir(self):
retorno DemoBox()
si __name__ == "__main__":
DemoApp().run()
Al enlazar una funcin a un evento o propiedad, akivy.weakmethod.WeakMethod la dev

olucin de llamada se guarda y cuando el envo de la devolucin de llamada se quita si


la referencia de devolucin de llamada se convierte en invlido.
Si una devolucin de llamada ya se ha enlazado a un determinado evento o propiedad
, no se agrega de nuevo.
create_property() crea una nueva propiedad en tiempo de ejecucin.
Nuevo en la versin 1.0.9.
204

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.
::
&gt;&gt;&gt; miwidget = Widget()
&gt;&gt;&gt; miwidget.create_property( custom ) &gt;&gt;&gt; miwidget.custom = T
rue &gt;&gt;&gt; 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

btn.funbind( on_press , self.en_event_con_args, "derecha", rbol= Abedul , Food= a


pple )
Nota: Desde el kv lang utiliza este mtodo para enlazar, uno tiene que aplicar est
e mtodo, en lugar ofbind() cuando se crea una clase basada en nonEventDispatcher
utilizados con el kv lang. Vea un ejemplo observable.
Nuevo en la versin 1.9.0.
Ha cambiado en la versin 1.9.1: La palabra clave ref argumento ha sido aadido.
funbind() similares tofbind().
Al desatarlo, unbind() se desenlaza todas las devoluciones de llamada que coinci
den con la devolucin de llamada, aunque este mtodo slo desvincular el primero.
Para desenlazar, la misma palabra clave posicionales y argumentos pasados tofbin
d() debe ser pasado a funbind.
Nota: es seguro usefunbind() a una funcin vinculada withbind unbind() mientras ni
nguna palabra clave y se proporcionan argumentos posicionales tofunbind().
Nuevo en la versin 1.9.0.
get_propiedad_observadores() devuelve una lista de los mtodos que estn enlazados a
la propiedad/acontecimiento pas como el argumento nombre
_instancia: widget.get_propiedad_observadores( on_release )
Parmetros strThe name: nombre del evento o propiedad.
args: boolWhether para devolver el obligado args. Para mantener la compatibilida
d, slo las funciones de devolucin de llamada y no sus siempre args ser devuelto en

la lista cuando args es falso.


Si el valor es True, cada elemento de la lista es un 5-tupla de (callback, largs
, kwargs, is_ref, uid), donde es_ref indica si es un callback weakref y uid es e
l uid dado byfbind(), o None ifbind() se utiliza. El valor predeterminado es Fal
se.
Lista de bound ReturnsThe callbacks. Ver args para ms detalles.
Nuevo en la versin 1.8.0.
Ha cambiado en la versin 1.9.0: Se ha aadido el parmetro args.
getter() devuelven el getter de una propiedad.
Nuevo en la versin 1.0.9.
_event_type() devolver True si el evento_type ya est registrado.
Nuevo en la versin 1.0.4.
Las propiedades() devuelva todas las propiedades de la clase en un diccionario d
e claves/clase de propiedad. Puede ser usado para la introspeccin.
207

Nuevo en la versin 1.0.9. La


propiedad() obtener una propiedad de instancia desde el nombre de la propiedad.
Si quiet es True, se devuelve NONE, en lugar de elevar una excepcin si el nombre
no es una propiedad. ToFalse predeterminados.
Nuevo en la versin 1.0.9.
ReturnsAProperty derivada correspondiente al nombre de instancia.
Ha cambiado en la versin 1.9.0: tranquila fue agregado.
proxy_ref implementacin predeterminada de proxy_ref, devuelve el auto. ..:: versi
onadded 1.9.0
register_event_type() registrar un tipo de evento con el distribuidor.
Los tipos de evento de registro permite al distribuidor para validar los nombres
de controladores de eventos que estn conectados y buscar objetos conectados a lo
s controladores adecuados. Cada tipo de evento:
1.declaracin debe comenzar con el prefijo en_.
2.Tener un controlador predeterminado en la clase.
Ejemplo de creacin de un evento personalizado:
clase miwidget(Widget):
kwargs):
def __init__(self, super(Miwidget
Auto).__init__( kwargs) self.register_event_type( on_swipe")
def on_swipe(self):
pase
de def_swipe_callback( largs):
print( mi , se llama swipe largs) w = Miwidget() w.dispatch( on_swipe")
setter() devuelven el establecedor de propiedad. Uso: ejemplo.setter( Nombre ).
El establecedor es una cmoda funcin de devolucin de llamada til si desea enlazar dir
ectamente una propiedad a otra. Devuelve una funcin parcial que aceptar (obj, valo
r) args y resultados en la propiedad nombre de la instancia que se establece e
n el valor.
Nuevo en la versin 1.0.9.
Por ejemplo, para enlazar Nmero2 a nmero1 en python que hara:
clase ExampleWidget(Widget):
nmero1 = NumericProperty(Ninguno) nmero2 = NumericProperty(Ninguno)
def __init__(self,
kwargs):
super(ExampleWidget, auto).__init__( kwargs) self.bind(nmero1=self.setter( nmero2"),
esto es equivalente a kv vinculante:
<ExampleWidget>:
nmero2: self.nmero1
208

unbind() desvincular las propiedades de funciones de devolucin de llamada de uso


similar asbind().
Si una llamada se ha enlazado a un determinado evento o propiedad varias veces,
slo el primero ocurrir- rgence ser independiente.
Nota: es seguro useunbind() en una funcin vinculada withfbind() mientras que funcin estaba enlazada originalmente sin ninguna palabra clave y argumentos posicio
nales. De lo contrario, la funcin dejar de ser independiente y debe usefunbind() e
n su lugar.
uid_unbind() usa el uid regres byfbind() para desvincular la devolucin de llamada.
Este mtodo es mucho ms eficiente que funbind(). Si se evala como False uid (p. ej.
0) un ValueError est levantada. Adems, slo callbacks enlazado con fbind() puede ser
independiente con este mtodo.
Desde cada llamada tofbind() generar un nico UID, slo una devolucin de llamada ser el
iminado. Si uid no se encuentra entre las devoluciones de llamada, no se produce
ningn error.
Por ejemplo:
Btn6 = Botn(text="B: Uso de funciones flexibles con args. Para hardcores"). uid =
Btn6.fbind( on_press , self.en_nada, "1", "2", monthy="python") si no la uid:
elevar la excepcin( no vinculante").
...
Btn6.unbind( uid_en_press , UID)
Nuevo en la versin 1.9.0.
unregister_event_types() Eliminar un tipo de evento en el dispatcher.
classkivy.event.ObjectWithUid Bases: builtins.objeto
(interno) Esta clase ayuda a proporcionar identificadores nicos para las instanci
as de la clase. l no destinados al uso directo.
classkivy.event.Bases: kivy observable.event.ObjectWithUid
observable es un ramal clase define los mtodos necesarios para la encuadernacin. E
ventDispatcher (LA) es un ejemplo de una clase que implementa la interfaz de enl
ace. Ver detalles de EventDispatcher.
Nuevo en la versin 1.9.0.
fbind().fbind SeeEventDispatcher().
Nota: Para mantener la compatibilidad con las clases derivadas que pueden haber
heredado de antes, la observable fbind() mtodo fue agregado. La apli- cacin de pre
determinado fbind() es crear una funcin parcial que pasa a enlazar al guardar el
uid y largs/kwargs. Sin embargo,funbind() (y desenlazar_uid()) son bastante inef
icaz puesto que primero tenemos que buscar esta funcin parcial mediante el largs/
kwargs o uid y luego llamar unbind() en la funcin devuelto. Se recomienda para so
brescribir estos mtodos de rived clases para enlazar directamente para obtener un
mejor rendimiento.
209

Igualmente toEventDispatcher.fbind(), este mtodo devuelve 0 en caso de error y un


nico uid positivo sobre el xito. Este uid puede utilizarse withunbind_uid.
funbind()()().andEventDispatcher Seefbind funbind().
uid_unbind()() andEventDispatcher Seefbind.uid_unbind().
21.11 objeto de fbrica
la fbrica puede ser utilizado para registrar automticamente cualquier clase o mdulo
y crear instancias de clases desde cualquier lugar en su proyecto. Se trata de
una implementacin del patrn de fbrica.
La lista de clases y mdulos disponibles son generados automticamente por setup.py.
Ejemplo de registro de una clase o mdulo:
&gt;&gt;&gt; de kivy.fbrica fbrica importacin &gt;&gt;&gt; Factory.register( Widget
, mdulo= kivy.uix.widget ) &gt;&gt;&gt; Factory.register( Vector", mdulo= kivy.ve
ctor )
Ejemplo de uso de la fbrica:

&gt;&gt;&gt; de kivy.fbrica fbrica importacin &gt;&gt;&gt; = Factory.widget widget(


pos=(456,456)) &gt;&gt;&gt; = vector Factory.Vector(9, 2),
por ejemplo usando un nombre de clase:
&gt;&gt;&gt; de kivy.fbrica fbrica importacin &gt;&gt;&gt; Factory.register( MyWidg
et , Cls=Miwidget)
Por defecto, la primera classname registrarse a travs de la fbrica es permanente.
Si desea cambiar la clase registrada, debe anular el registro del classname ante
s de re-asignar:
&gt;&gt;&gt; de kivy.fbrica fbrica importacin &gt;&gt;&gt; Factory.register( MyWidg
et , Cls=Miwidget) &gt;&gt;&gt; = widget Factory.Miwidget() &gt;&gt;&gt; Factory
.unregister( MyWidget ) &gt;&gt;&gt; Factory.register( MyWidget , Cls=CustomWidg
et) &gt;&gt;&gt; customWidget = Factory.Miwidget()
kivy.factory.Factory = <kivy.factory.FactoryBase object>Instancia de fbrica para
utilizar para la obtencin de nuevas clases
21.12 Geometra utilidades
Este mdulo contiene algunas funciones auxiliares para los clculos geomtricos.
kivy.geometry.circumcircle(a, b, c) calcula el circumcircle de un tringulo defini
do por a, b, c. Ver: Http://en.wikipedia.org/wiki/ circunscrita_circle
parmetros
una[iterable que contenga al menos 2 valores (x e y)] El primer punto del tringul
o.
210

b[iterable que contenga al menos 2 valores (x e y)] El 2 punto del tringulo.


c[iterable que contenga al menos 2 valores (x e y)] El tercer punto del tringulo.
Devolver
una tupla que define el crculo :
El primer elemento de la tupla es devuelto al centro como (x, y)
El segundo es el radio (flotacin)
kivy.geometry.delimitador_mnimo_circle(puntos) devuelve el crculo delimitador mnimo
para un conjunto de puntos.
Para obtener una descripcin del problema a ser resuelto, vase el crculo ms pequeo pro
blema.
La funcin utiliza el algoritmo del applet, el tiempo de ejecucin es O(h^3, n), dond
e h es el nmero de puntos en el polgono convexo del conjunto de puntos. Pero se ej
ecuta en tiempo lineal en casi todos los casos del mundo real. Consulte:
parmetros Http://tinyurl.com/6e4n5yb puntos[iterable] una lista de puntos (2 tupl
a con coordenadas x,y)
Volver
una tupla que define el crculo:
El primer elemento devuelto de la tupla es el centro (x, y)
El segundo el radio (flotacin)
21.13
Esta clase de reconocimiento de gestos le permite crear fcilmente nuevos gestos y
compararlos:
desde kivy.gesto gesto de importacin, GestureDatabase
# Crear un gesto gesto g =() g.add_stroke(point_list=[(1,1), (3,4), (2,1)]) g.no
rmalize()
# Aadir a la base de datos gdb gdb GestureDatabase =().add_GESTURE(g)
# y para el siguiente gesto, intenta encontrarlo!
G2 = gesto() # ...
gdb.find(g2)
Advertencia: que realmente no quieres hacer esto: se trata de un ejemplo de cmo c
onstruir gestos dinmicamente. Normalmente, se necesitan muchos ms puntos, por lo q
ue es mejor para grabar los movimientos en un archivo y volverlos a cargar para
comparar posteriormente. Busque en el directorio examples/gestos para ver un eje

mplo de cmo hacerlo.


classkivy.gesto.gesto(tolerancia=None) Bases: builtins.objeto
python implementacin de un algoritmo de reconocimiento de gestos por Oleg Dopertc
houk: http://www.
Gamedev.net/reference/articles/article2039.asp
211

ejecutados por Jehiel Aranal (Chemikhazi@gmail.com), en el dominio pblico.


add_stroke(point_list=None) aade un trazo al gesto y devuelve la instancia de tra
zo. Punto opcional lista_de_argumentos es una lista de los puntos para el trazo
del ratn.
dot_product(comparacin_GESTURE) calcula el punto producto del gesto con otro gest
o.
get_rgido dstpts_rotation (Rotacin) Extraiga el aplicar a un grupo de puntos para
minimizar la distancia a un segundo grupo de puntos. Los dos grupos de puntos se
supone estn centrados. Esta es una versin simple que solo toma un ngulo basado en
el primer punto del gesto.
get_score(comparacin_GESTURE, rotacin_invariante=TRUE) devuelve la puntuacin coinci
dente del gesto contra otro gesto.
normalizar(stroke_SAMPLES=32) ejecuta el algoritmo de normalizacin de gestos y ca
lcula el producto de punto con auto.
classkivy.gesto.GestureDatabase Bases: builtins.objeto
clase para manejar un gesto database.
add_GESTURE(gesto) Agregar un nuevo gesto a la base de datos.
Busque(gesto, minscore=0.9, rotacin_invariante=True) encontrar un gesto coinciden
te en la base de datos.
gesto_to_str(gesto) convertir un gesto en una cadena nica.
str_para_GESTURE(data) Convierte una cadena en un nico gesto.
classkivy.gesto.GestureStroke Bases: builtins.object
gestos, puede estar compuesto de varios trazos.
add_point(x=x_pos, y=y_pos) Aade un punto al trazo.
centro_stroke(offset_x, offset_y) centra el recorrido por los puntos. offseting
normalize_stroke(sample_puntos=32) normaliza los trazos para que cada Trazo tien
e un nmero estndar de puntos. Devuelve True si la apopleja se normalizan, False si
no se normalizan. sample_puntos controla la resolucin del trazo.
Puntos_distance(point1=GesturePoint, point2=GesturePoint) devuelve la distancia
entre dos GesturePoints.
scale_stroke(scale_factor=FLOAT) ampla el trazo hacia abajo por scale_factor.
golpe_length(point_list=None) encuentra la longitud del trazo. Si un punto se da
lista, encuentra la longitud de esa lista.
212

21.14 lanzador interactivo


nuevo en la versin 1.3.0.
Ha cambiado en la versin 1.9.2: El lanzador interactivo ha quedado obsoleta.
La InteractiveLauncher proporciona una sencilla interfaz de shell de python anAp
p, de modo que pueda ser prototipo y depurar de forma interactiva.
Nota: La API de Kivy propone para algunas funciones que slo se ejecute una vez o
antes de las principales EventLoop ha comenzado. Los mtodos que normalmente puede
n ser llamados durante el curso de una aplicacin funcionar como se pretenda, sino e
specficamente sobreescribir mtodos tales ason_touch() de forma dinmica genera probl
emas.
21.14.1 creando un InteractiveLauncher
tome su subclase existente de App (puede ser el cdigo de produccin) y pasar una in

stancia para el constructor InteractiveLauncher.


de importacin de kivy kivy.interactive InteractiveLauncher.app App de importacin k
ivy.uix.Button Botn Importar
clase MyApp(App):
def construir(self):
Botn return(text= Hola ) Shell
launcher = InteractiveLauncher(MyApp()) launcher.run()
despus de pulsar enter, el script devolver. Esto permite que el intrprete para segu
ir funcionando. Inspeccin o modificacin de theApp puede hacerse de forma segura a
travs de la instancia o la InteractiveLauncher SafeMembrane proporcion las instanc
ias de la clase.
Nota: Si desea probar este ejemplo, iniciar Python sin ningn archivo para tener y
a un intrprete, y copiar/pegar todas las lneas. An tendrs el intrprete al final + el
kivy aplicacin ejecutndose.
21.14.2 Desarrollo interactivo
IPython proporciona una forma rpida de aprender el Kivy API. Instancia TheApp y t
odos sus atributos, incluyendo mtodos y todo el widget tree, pueden ser rpidamente
que se muestran mediante el operador . y pulsando la tecla Tab .
Pruebe este cdigo en un shell Ipython.
de importacin de kivy kivy.interactive InteractiveLauncher.app App de importacin k
ivy.uix.Widget Widget de importacin de kivy.Importacin de grficos de color,
clase Ellipse MyPaintWidget(Widget):
def sobre_TOUCH_down(self, tctil):
con auto.Canvas:
Color(1, 1, 0), d = 30.
Elipse(pos=(toque.x - D/2, toque.y - D/2), size=(d, d)
213

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).

TheInteractiveLauncher pueden tener atributos agregados exactamente igual que un


objeto normal y si estos fueron creados desde el exterior de la membrana, no se
rn threadsafe porque las referencias externas a ellos en el intrprete Python no at
raviesan la membrana InteractiveLauncher fromSafeMembrane comportamiento heredad
o.
214

a threadsafe estas referencias externas, simplemente asignarles toSafeMembrane i


nstancias de s mismos como
de importacin kivy.interactive SafeMembrane
interactiveLauncher.atributo = # myNewObject myNewObject es inseguro(myNewObject
SafeMembrane myNewObject =) # myNewObject ahora es seguro. Llame a voluntad.
myNewObject.Method()
Todo
pruebas unitarias, ejemplos y una mejor explicacin de qu mtodos son seguros en una
aplicacin en ejecucin sera bueno. Los tres sera excelente.
Puede ser re-escrita con un contexto-manager, es decir,
con estilo seguro:
foo()
cualquier uso casos adems de compactar el cdigo?
classkivy.interactive.SafeMembrane(ob, args,
kwargs) Bases: builtins.El objeto de
esta ayuda es para un objeto proxy. Desea ayuda en el referente del proxy en su l
ugar? Intente utilizar help( <instance>._ref)
El threadsafe SafeMembrane es un proxy que tambin devuelve los atributos como nue
vos objetos thread-safe y realiza llamadas al mtodo thread-safe, evitando los obj
etos peligrosos de rosca de fuga en el entorno del usuario.
safeIn() proporciona un punto de entrada thread-safe para interactive lanzamient
o.
safeOut() proporciona un thread-safe punto de salida para el lanzamiento interac
tivo.
classkivy.interactive.InteractiveLauncher(app=None, args,
kwargs) Bases: kivy.inter
active.SafeMembrane
proxy a una instancia de la aplicacin que se inicia, en un subproceso y, a contin
uacin, devuelve y acta como un proxy para la aplicacin en la rosca.
21.15 Kivy Basar
Este mdulo contiene core Kivy funcionalidad y no est pensada para usuarios finales
. Sintase libre de mirar bien, pero al llamar a cualquiera de estos mtodos directa
mente bien pueden resultar en comportamientos impredecibles.
La gestin del bucle de eventos 21.15.1
kivy.base.EventLoop = <kivy.base.EventLoopBase object>Instancia EventLoop
classkivy.base.EventLoopBase Bases: kivy.event.EventDispatcher
bucle del evento principal. Este bucle gestiona la actualizacin de entrada y dist
ribucin de eventos.
215

add_event_listener (oyente) Agregar un nuevo detector de eventos para obtener ev


entos tctiles.
add_input_provider (proveedor, auto_remove=false) Agregar un nuevo proveedor de
entrada para escuchar eventos tctiles.
add_posprocesamiento_module(mod) agregar un mdulo de entrada de posprocesamiento
(DoubleTap, TripleTap, DeJitter RetainTouch son predeterminados).
close() salir del bucle principal y detener todos los proveedores de entrada con
figurada.
dispatch_input() llamado por idle() para leer los eventos procedentes de proveed

ores de insumos, pasar eventos de posprocesamiento, y enviar eventos finales.


asegurar_window() asegurar que tengamos una ventana.
exit() cierra el bucle principal y cerrar la ventana.
idle() Esta funcin se llama despus de cada fotograma. Por defecto:
"ticks" del reloj al siguiente fotograma.
lee toda la entrada y distribuye eventos.
los despachos, el ON_UPDATE_draw_flip y eventos a la ventana.
En_pause() en el controlador de eventos_pause que sern despedidos cuando el bucle
de eventos est pausado.
on_start() en el controlador de eventos_start que sern despedidos inmediatamente
despus de la entrada de todos los proveedores han sido arrancado.
on_stop() en el controlador de eventos_stop eventos que sern despedidos inmediata
mente despus de la entrada de todos los proveedores han sido parado.
post_DISPATCH_input(etype, me) Esta funcin es llamada por dispatch_input() cuando
queremos enviar un evento de entrada. El evento se distribuye a todos los oyent
es y si agarrado, es enviado a agarrado widgets.
remove_event_listener (oyente) quitar un detector de eventos de la lista.
remove_input_provider (proveedor) para eliminar un proveedor de entrada.
remove_posprocesamiento_module(mod) quitar un mdulo de posprocesamiento.
run() bucle principal
set_Window (ventana) Configurar la ventana utilizada para el bucle de eventos.
start() debe ser llamada slo una vez antes de run(). Esto inicia todos los provee
dores de entrada configurada.
stop() Detener todo de proveedores de insumos y llame callbacks registrados usan
do EventLoop.add_stop_callback().
216

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.

cm centmetros - Basado en el tamao fsico de la pantalla.


en pulgadas - Basado en el tamao fsico de la pantalla.
DP de densidad de pxeles independientes - unidad abstracta que se basa en la dens
idad fsica de la pantalla. Con una densidad de 1, 1DP es igual a 1px. Cuando se e
jecuta en una pantalla de mayor densidad, el nmero de pxeles utilizados para dibuj
ar 1DP se escala un factor apropiado para la pantalla ppp, y a la inversa para u
na cantidad inferior de ppp. El ratio de DP a pxeles cambiarn con la densidad de l
a pantalla, pero no necesariamente en proporcin directa.
Utilizando la unidad de dp es una sencilla solucin para hacer la vista dimensione
s en su diseo correctamente para cambiar el tamao de pantalla de diferentes densid
ades. En otras palabras, proporciona consistencia para el tamao real de la interf
az de usuario a travs de diferentes dispositivos.
sp independientes de la escala de pxeles - Esto es como el dp unidad, sino que ta
mbin se escala por la preferencia de tamao de fuente del usuario. Le recomendamos
que utilice esta unidad al especificar los tamaos de fuente, por lo que el tamao d
e la fuente se ajustar a la pantalla la densidad y las preferencias del usuario.
21.17.2 ejemplos
aqu es un ejemplo de cmo crear una etiqueta con un sp font_size y ajuste la altura
manualmente con un margen de 10 dp:
#:kivy 1.5.0 <MyWidget>:
Etiqueta:
texto: hola mundo : font_size 15sp size_y_HINT: Ninguna altura: self.textura_
size[1] + Dp(10)
21.17.3 El control manual de la mtrica
La mtrica no puede cambiarse en tiempo de ejecucin. Una vez que un valor se ha con
vertido en pxeles, no podr recuperar el valor original ya. Esto se deriva del hech
o de que el PPP y la densidad de un dispositivo no puede cambiarse en tiempo de
ejecucin.
Ofrecemos algunas variables de entorno para controlar las mtricas:
KIVY_Metrics_Densidad: si se establece, se utilizar este valor fordensity en luga
r de los sistemas.
En Android, el valor vara entre 0.75, 1, 1.5 y 2.
KIVY_Metrics_FONTSCALE: si se establece, se utilizar este valor para fontscale en
lugar de Sys- tem. En Android, el valor vara entre 0,8 y 1,2.
KIVY_PPP: Si se establece, se utilizar este valor fordpi. Por favor tenga en cuen
ta que el PPP no tendr ningn impacto en el DP/sp notacin porque estos se basan en l
a densidad de la pantalla.
Por ejemplo, si desea simular una pantalla de alta densidad (como el HTC One X):
219

ppp_KIVY=320 KIVY_Metrics_DENSITY=2 python main.py --size 1280x720


o una mediana densidad (como el Motorola Droid 2):
KIVY_DPI=240 KIVY_Metrics_DENSITY=1.5 python main.py --size 854x480
tambin puede simular una preferencia de usuario alternativa fontscale como sigue:
KIVY_Metrics_FONTSCALE=1.2 python main.py
kivy.mtricas.Metrics = <kivy.metrics.MetricsBase object>Instancia predeterminada
ofMetricsBase, utilizadas en cualquier parte del cdigo ..:: 1.7.0 versionadded
classkivy.mtricas.MetricsBase Bases: builtins.
clase objeto que contiene los atributos predeterminados para las mtricas. No util
ice esta clase directamente, pero el uso de la mtrica. La
densidad de instancia() devuelven la densidad de la pantalla. Este valor es 1 po
r defecto en los escritorios en Android, pero vara dependiendo de la pantalla.
PPP() devuelven el DPI de la pantalla. Dependiendo de la plataforma, el DPI pued
e ser tomada desde la ventana Proveedor (principalmente) de escritorio o desde u
n mdulo especfico de plataforma (como android/IOS).
ppp_REDONDEAR() devuelven el DPI de la pantalla, redondeado al ms cercano de los
120, 160, 240 o 320.

fontscale fontscale() devuelven la preferencia del usuario. Este valor es 1 por


defecto, pero puede variar entre 0,8 y 1,2.
.kivy metrics.pt(valor) convierte de puntos a pxeles
kivy.mtricas.pulgadas(valor) convertir pulgadas en pxeles
kivy.mtricas.cm(valor) convierte de centmetros a pxeles
kivy.mtricas.mm(valor) Convertir de milmetros a pxeles
kivy.mtricas.dp(valor) convierte de pxeles independientes de la densidad de pxeles
kivy.mtricas.sp(valor) convierte de pxeles independientes de la escala de pxeles
21,18 Multistroke reconocedor de gestos
nuevo en la versin 1.9.0.
Advertencia: Esto es experimental y sujetos a cambios mientras este aviso est pre
sente.
Seekivy/examples/demo/multistroke/main.py para una aplicacin completa de ejemplo.
220

21.18.1 Descripcin conceptual


Este mdulo implementa el transportador el algoritmo de reconocimiento de gestos.
Es la bsqueda de reconocedor/API de base de datos similar a GestureDatabase. Mant
iene una lista de objetos MultistrokeGesture y le permite buscar un usuario-movi
mientos de entrada entre ellos.
ProgressTracker controla el progreso de un reconocedor.reconocer() realiza la ll
amada. Puede ser usado para en- teract reconocedor con la ejecucin de la tarea, p
or ejemplo, obligar a detenerse a mitad de camino, o analizando los resultados a
medida que llegan.
MultistrokeGesture representa un gesto en la base de datos (Reconocedor de gesto
s.db). Es un timo- tainer forUnistrokeTemplate objetos, e implementa la pila per
mutar algoritmo para generar automticamente todas las posibles rdenes de trazo (si
lo desea).
UnistrokeTemplate representa un solo trazo la ruta. Normalmente es instanciado p
or MultistrokeGesture automticamente, pero a veces puede que tenga que crear manu
almente.
Candidato representa un movimiento de entrada de usuario que se utiliza para bus
car en la base de datos de gestos para los partidos. Normalmente se instancian a
utomticamente por callingRecognizer.reconocer().
Ejemplos de uso 21.18.2
Seekivy/examples/demo/multistroke/main.py para una aplicacin completa de ejemplo.
Puede enlazar eventos onRecognizer para rastrear el estado de todas las llamadas
toRecognizer.reconocer().
La funcin de devolucin de llamada, recibir una instancia ofProgressTracker que pued
e utilizarse para analizar y controlar varios aspectos del proceso de reconocimi
ento
de kivy.vector Vector de importacin importacin multistroke kivy.
gdb reconocedor reconocedor =()
def search_start(gdb, pt):
(Pt.tareas) % tareas" d% print("est empezando con una bsqueda
bsqueda def_stop(gdb, pt):
( pt.status, mejor[ name ], mejor[ score ], mejor[ dist ] )) % (score %f, distan
cia %f)" s% # Esto llamar max() en el resultado dictonary. Por lo tanto, es mejor
almacenar # en lugar de llamar 3 veces consecutivas mejor = PT.mejor print("Bsqu
eda termin (%s). Mejor es
# enlazar sus devoluciones de llamada para realizar el seguimiento de todas las
operaciones coincidentes gdb.bind(on_search_start=search_start) gdb.bind(on_sear
ch_complete=search_stop)
# El formato de abajo se denomina strokes , una lista de rutas de carrera.
# Tenga en cuenta que cada ruta se muestra aqu consta de dos puntos, es decir, un
a lnea # recta; si trazarlos parece una T, de ah el nombre.
gdb.add_GESTURE( T , [ [Vector(30, 7), Vector(103, 7)], [Vector(66, 7), Vector(6

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

sobre la garrapata nextClock, comienza el proceso de coincidencia (y, en este ca


so, completa).
Para realizar el seguimiento de llamadas individuales a Recognizer.reconocer(),
utilice el valor de retorno (tambin una instancia ProgressTracker)
# Igual que arriba, pero mantener un seguimiento del progreso mediante valor dev
uelto progreso = gdb.reconocer([ [Vector(45, 8), Vector(110, 12)], [Vector(88, 9
), Vector(85, 95)]])
progreso.bind(on_progreso=mi_other_callback) print(progress.progress) = #
# 0 [ suponiendo una kivy.clock.Clock.tick() aqu ]
print(result.progress) # = 1
Algoritmo 21.18.3 detalles
para obtener ms informacin sobre el algoritmo de coincidencia, vase:
"Transportador: una rpida y precisa del reconocedor de gestos" por Yang Li http:/
/yangl.org/pdf/ transportador-chi2010.pdf
"$N-transportador" por Lisa Anthony y Jacob O. Wobbrock http://depts.washington.
edu/ aimgroup/proj/dlar/ndollar-transportador.pdf
parte del cdigo se deriva de la aplicacin JavaScript aqu: Http://depts.washington.
edu/aimgroup/proj/dlar/ndollar.html
.multistroke classkivy.Recognizer( kwargs) Bases: kivy.event.EventDispatcher
Recognizer proporciona una base de datos de gestos con la coincidencia de las in
stalaciones.
Eventos
en_search_startFired cuando se inicia una nueva bsqueda usando este reconocedor.
on_search_completeFired cuando ejecuta una bsqueda termina, por la razn que sea. (
Utilice ProgressTracker.status para averiguar)
Propiedades
dbAListProperty que contiene los objetos availableMultistrokeGesture.
db es aListProperty y predeterminados a []
add_GESTURE(nombre, trazos
kwargs) Agregar un nuevo gesto a la base de datos. Esto
crea una instancia newMultistrokeGesture con trazos y anexarla a self.db.
Nota: si ya han creado instancias aMultistrokeGesture objeto y desea agregarlo,
anxelo toRecognizer.db manualmente.
export_GESTURE(filename=none, kwargs) MultistrokeGesture exportar una lista de obj
etos. Enva una cadena codificada en Base64 que pueden ser decodificados a una lis
ta de Python con el gesto_parse() o importados directamente a self.db utilizando
Recognizer.import_GESTURE(). Si filename se especifica, la salida se escribe en
disco, de lo contrario devuelve.
Este mtodo acepta optionalRecognizer.filter() argumentos.
222

filter( kwargs) filter() devuelve un subconjunto de objetos en self.db, segn criteri


os dados. Este es utilizado por muchos otros mtodos del reconocedor; los argument
os a continuacin puede utilizarse, por ejemplo, cuando callingRecognizer.reconoce
r() orRecognizer.export_GESTURE().
Normalmente no necesita llamar a esto directamente.
Argumentos nameLimits la lista devuelta a gestos whereMultistrokeGesture.name co
incide con la expresin regular dada(s). Si re.Match(nombre, MultistrokeGes- prueb

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

n lugar de cada plantilla preferidos de


reconocer(trazos goodscore=none, timeout=0, DELAY=0,
kwargs) Bsqueda de gestos traz
os coincidentes. Devuelve aProgressTracker instancia.
Este mtodo acepta optionalRecognizer.filter() argumentos.
Argumentos strokesA lista de rutas de carrera (lista de listas ofVector objetos)
que se conciliar con gestos en la base de datos. Tambin pueden ser aCandidate ins
tancia.
Advertencia: Si la alimentacin manualmente aCandidate que tiene un skip-bandera,
asegrese de que el filtro correcto, los argumentos se establezca. De lo contrario
, el sistema intentar cargar los vectores que no han sido calculados. Por ejemplo
, si establece el valor skip_delimitada y no establezca orientation_sensible a F
alse, se producir una excepcin si una orienta- cin_sensitiveUnistrokeTemplate es en
contrado.
goodscoreIf est establecido (entre 0.0 - 1.0) y un gesto puntuacin es igual o mayo
r que el valor especificado, la bsqueda se detiene inmediatamente y el on_search_
evento complete es despedido (+ el on_evento completo del asociado en postura Pr
ogressTracker-). El valor predeterminado es Ninguno (deshabilitado).
timeoutSpecifies un tiempo de espera (en segundos) para cuando la bsqueda se inte
rrumpe y se devuelven los resultados. Esta opcin se aplica slo cuando max_GPF no e
s 0. El valor predeterminado es 0, lo que significa que todos los movimientos en
la base de datos ser probada, no importa cunto tiempo tome.
max_gpfSpecifies ofMultistrokeGesture el nmero mximo de objetos que pueden ser pro
cesados por trama. Cuando se exceden, causar la bsqueda para detener y reanudar su
labor en el siguiente fotograma. Ajuste para 0 completar la bsqueda inmediatament
e (y bloquear la UI).
224

ADVERTENCIA: Esto no limita el nmero de objetos que coinciden con UnistrokeTempla


te! Si un solo gesto tiene un milln de plantillas, todas ellas sern procesados en
un solo fotograma con max_GPF=1!
DelaySets un retraso opcional entre cada ejecucin del bucle del reconocedor. Norm
almente, una ejecucin est programada para el prximo marco hasta el tasklist est agot
ada. Si se establece esto, habr un retraso adicional entre cada ejecucin (especifi
cado en segundos). El valor predeterminado es 0, resume en el siguiente cuadro.
force_numpointsforces todas las plantillas (y candidato) para estar preparado pa
ra un determinado nmero de puntos. Esto puede ser til por ejemplo si usted est eval
uando las plantillas para una ptima n (no use esto a menos que usted entienda lo
que hace).
transfer_GESTURE(tgt, kwargs) objetos TransfersMultistrokeGesture fromRecognizer.d
b para en- postura anotherRecognizer tgt.
Este mtodo acepta optionalRecognizer.filter() argumentos.
classkivy.multistroke.ProgressTracker(candidato, tareas
kwargs) Bases: kivy.event.
EventDispatcher,
representa un continuo (o completado) operacin de bsqueda. Instanciado y devuelto
por el Reconocedor.reconocer(), mtodo al que se llama. Los resultados atributo es
un diccionario que se actualiza a medida que avanza la operacin de reconocimient
o.
Nota: no es necesario que cree una instancia de esta clase.
Argumentos candidateCandidate objeto a evaluar tasksTotal nmero de gestos en task
list (a prueba contra) Eventos on_progressFired por cada gesto que se procesa en
_resultFired cuando se aade un nuevo resultado, y es la primera coincidencia para
el nombre hasta ahora, o un partido consecutivo con mejor puntuacin.
on_completeFired cuando la bsqueda haya finalizado, por la razn que sea. (Usar Pro
- gressTracker.statusto averiguar) atribuye resultsA diccionario de todos los re
sultados (hasta ahora). La clave es el nombre del gesto (ie UnistrokeTemplate.na
me suelen heredar fromMultistrokeGesture). Cada elemento en el diccionario es un
diccionario con las siguientes entradas:

nameName conciliado de la plantilla (redundante) scoreComputed Puntuacin obtenida


a partir de 1.0 (perfecto) a 0.0 distCosine distancia del candidato a la planti
lla (bajo=closer) gestureTheMultistrokeGesture objeto que corresponda mejor_templ
ateIndex de la mejor plantilla correspondiente (en MultistrokeGesture.plantillas
) template_resultsList de distancias para todas las plantillas. El ndice de la li
sta corresponde a un ndice UnistrokeTemplate en gesto.plantillas.
estado trabajando searchCurrently stopWas parado por el usuario (stop() se llama
) timeoutA se agot el tiempo de espera (timeout= especifica como reconocer()) goo
dscoreThe bsqueda fue parado temprano porque un gesto con una alta puntuacin sufic
iente fue encontrado (especificado como goodscore= reconocer()) complete la bsque
da es completa (todos los gestos filtros coincidentes fueron probados)
mejores
225

Volver la mejor coincidencia encontrada por reconocer() hasta ahora. Devuelve un


diccionario con tres llaves, name , dist" y "core" que representa el nombre d
e la plantilla, la distancia (de candidato ruta) y el valor de puntuacin computar
izada. Esta es una propiedad de Python.
hecho, 1 es de 100%. Esta es una propiedad de Python. %0 el progreso devuelve el
progreso como un float, 0 es el
stop() genera una parada bandera que est marcada por el proceso de bsqueda. Se det
uvo en el siguiente pulso de reloj (si an se est ejecutando).
classkivy.multistroke.MultistrokeGesture(nombre, trazos=none,
kwargs) Bases: built
ins.object
MultistrokeGesture representa un gesto. Mantiene un conjunto de trazos y genera
ieUnistrokeTemplate unistroke (permutaciones) que se utilizan para evaluar a los
candidatos en contra de este ges- tura ms tarde.
Argumentos nameIdentifies el nombre del gesto - es devuelto a usted en los resul
tados de un reconocedor.reconocer() bsqueda. Usted puede tener cualquier nmero de
MultistrokeGes- tura de objetos con el mismo nombre; muchas definiciones de un g
esto. El mismo nombre se da a todas las permutaciones unistroke generado. Requie
re, no predeterminado.
strokesA lista de rutas de acceso que representa el gesto. Una ruta es una lista
de los objetos vectoriales:
gesto = MultistrokeGesture( mi_GESTURE , trazos=[ [Vector(x1, y1), Vector(x2, y2
), ...... ] # trazo 1 [Vector() Vector() Vector() Vector() ] # trazo 2 #, accide
nte cerebrovascular [3], [4], carrera ...
])
para fines coincidentes de plantilla, todos los trazos se combinan en una sola l
ista (unistroke). An debe especificar los trazos individualmente, y setstroke_sen
sitive Verdadero (cuando sea posible).
Una vez hecho esto, permutaciones unistroke inmediatamente se generan y almacena
n en self.plantillas para ms tarde, a menos que defina la permutar bandera falsa.
priorityDetermines whenRecognizer.reconocer() intentar hacer coincidir este templaca inferior de prioridades se evalan primero (slo si se utiliza un filtro de pr
ioridad). Usted debe usar menos prioridad sobre los gestos que es ms probable que
coincidan. Por ejemplo, defina las plantillas de usuario en menor nmero de plant
illas genricas. El valor predeterminado es 100.
El nmero de puntos numpointsDetermines este gesto debe ser remuestreadas a (para
el apareamiento). El valor predeterminado es 16.
Accidente cerebrovascular_sensitiveDetermines si el nmero de trazos (rutas) en es
te gesto debe ser el mismo en el candidato (usuario) gesto durante la coincidenc
ia. Si esto es falso, los candidatos siempre ser evaluado, sin tener en cuenta el
nmero de trazos. El valor predeterminado es True.
Orientacin_sensitiveDetermines si este gesto es la orientacin sensible. Si es True
, se alinea la orientacin indicativa con la base de una de las ocho orientaciones
que requiere menos rotacin.

El valor predeterminado es True.


ngulo_similarityThis es utilizada por theRecognizer.reconocer() cuando un can- di
date es evaluado contra este gesto. Si los ngulos entre ellos son demasiado lejos
, la plantilla se considera un no-match. El valor predeterminado es de 30,0 (gra
dos) permuteIf falso, no utilice montn permutar algoritmo para generar diferentes
rdenes cuando se crea una instancia de trazo. Si establece este falso, un nico co
nstruido UnistrokeTemplate fromstrokes.
add_Stroke (trazo, permutar=false) Aadir un trazo al auto.strokes lista. Si es Tr
ue, thepermute permutar() mtodo es llamado a gener- comi nuevas plantillas unistro
ke
226

get_distancia(CY, TPL, numpoints=None) Clculo de la distancia a un UnistrokeTempl


ate Candiate. Devuelve el coseno distancia entre el trazo caminos.
numpoints preparar tanto la UnistrokeTemplate y candidato ruta n puntos (cuando n
ec- cessary), probablemente no quiera hacerlo.
match_candidato(CY,
kwargs) coincide con un determinado candidato contra este Mult
istrokeGesture objeto. Pondr a prueba contra todas las plantillas e informar de l
os resultados como una lista de cuatro elementos:
ndice 0que mejor se ajustan a la plantilla index (en self.plantillas) index 1dist
ancia calculada a partir de la plantilla al candidato ndice ruta 2Lista de distan
cias para todas las plantillas. El ndice de la lista corresponde a un ndice Unistr
okeTemplate en self.plantillas.
index 3contador de nmero de realizar operaciones coincidentes, ie plantillas comp
arado contra el candidato
permutar() generar todas las posibles permutaciones unistroke de self.trazos y g
uardar la lista resultante de UnistrokeTemplate objetos en self.plantillas.
Cita de Http://faculty.washington.edu/wobbrock/pubs/gi-10.2.pdf
utilizamos Heap permutar [16] (p. 179) para generar todos los pedidos en un traz
o multistroke gesto. Entonces, para generar direcciones de trazo para cada orden
, tratamos a cada componente trazo como una variable dicotmica [0,1]. Hay 2^N com
binaciones para n trazos, as que convertir los valores decimales de 0 a 2^N-1, in
clusive, a representaciones binarias y respecto cada bit como indicacin de avance
(0) o hacia atrs (1). Este algoritmo se utiliza a menudo para generar tablas de
verdad en lgica proposicional.
Consulte la Seccin 4.1: "$n algoritmo" del documento vinculado para obtener ms det
alles.
Advertencia: el uso del montn para permutar los gestos con ms de 3 Golpes puede re
sultar en un gran nmero de plantillas (un 9-stroke gesto = 38 millones de plantil
las). Si se trata de estos tipos de gestos, se debera redactar manualmente todos
los pedidos de trazo deseado.
classkivy.multistroke.UnistrokeTemplate(nombre, puntos=none,
kwargs) Bases: builti
ns.objeto
representa un (uni)Contornear trazado, como una lista de vectores. Normalmente,
esta clase es instanciado por strokeGesture multi- y no por el programador direc
tamente. Sin embargo, es posible componer UnistrokeTemplate manualmente los obje
tos.
Argumentos nameIdentifies el nombre del gesto. Esto normalmente se heredan del o
bjeto strokeGesture multi- cuando una plantilla est generado.
pointsA lista de puntos que representa una ruta unistroke. Normalmente, esta es
una de las posibles permutaciones el orden de los trazos de un
numpointsThe MultistrokeGesture. nmero de puntos esta plantilla debera (idealmente
) remuestreadas a antes de que el proceso de conciliacin. El valor predeterminado
es 16, pero puede utilizar una plantilla de configuracin especfico si que mejora
los resultados.
Orientacin_sensitiveDetermines si esta plantilla es la orientacin sensible (True)
o totalmente invariantes de rotacin (False). El valor predeterminado es True.

Nota: obtendr una excepcin si establece un salto-bandera y luego intentar recupera


r esos vectorsa.
227

add_point(p) Aadir un punto a la unistroke/ruta. Esto invalida todos los vectores


calculada anteriormente.
preparar(numpoints=None) Esta funcin prepara el UnistrokeTemplate para hacer coin
cidir un determinado nmero de puntos de destino (para volver a muestrear). 16 es p
tima.
classkivy.multistroke.candidato(trazos=none, numpoints=16,
kwargs) Bases: builtins
.objeto
representa un conjunto de trazados unistroke de entrada de usuario, es decir, lo
s datos se comparan con un transportador UnistrokeTemplate objeto utilizando el
algoritmo. Por defecto, los datos son precalculadas para coincidir tanto con rot
acin limitada y totalmente invariantUnistrokeTemplate objetos.
Argumentos strokesSeeMultistrokeGesture.strokes por ejemplo de formato. El candi
dato trazos son simplemente combinado a un unistroke en el orden dado. La idea e
s que esto va a coincidir con una de las permutaciones en MultistrokeGesture uni
stroke.plantillas.
Esta es slo una de respaldo no suele utilizarse desde n es impulsada por la Unist
rokeTemplate estamos siendo comparado. ;n predeterminada del candidato numpoints
The
skip_boundedIf verdadero, no generar o almacenar la rotacin limitada vectores ski
p_invariantIf verdadero, no generar o almacenar vectores invariantes de rotacin n
ota que usted va a tener errores si establece un salto-bandera y luego intentar
recuperar los datos.
add_Stroke (trazo) Aadir un trazo al candidato; esto invalida todos los vectores
calculada anteriormente
ngulo_get_similitud(tpl, kwargs) (slo para uso interno) calcular el ngulo la similitu
d entre este candidato y un objeto UnistrokeTemplate. Devuelve un nmero que repre
senta la similitud (ngulo inferior es ms similar).
get_transportador_vector(numpoints, orientacin_sens) (para uso interno solamente)
Volver vector para comparar a un transportador UnistrokeTemplate con
get_start_unit_vector(numpoints, orientacin_sens) (slo para uso interno) Obtener e
l vector de inicio para este candidato, con la ruta remuestreadas a numpoints pu
ntos. Este es el primer paso en el proceso de emparejamiento. Se compara con un
objeto UnistrokeTemplate inicio del vector para determinar el ngulo de similarida
d.
preparar(numpoints=None) Preparar el candidato vectores. auto.strokes se combina
en una sola unistroke conectado (end-to-end), remuestreadas a numpoints puntos
y, a continuacin, los vectores se calculan y almacenan en self.db (para usar get_
distancia y ngulo_get_similitud)
21.19 utilidades parser
funciones auxiliares utilizados para el anlisis.
kivy CSS.parser.parse_color(texto) Analizar una cadena a un color kivy. Formatos
soportados:
RGB(r, g, b) rgba(r, g, b, a) RGB RGBA rrggbb rrggbbaa. Para valores hexadecimales, ca
so tambin utilizar:
#RGB RGBA ##RRGGBB
228

#rrggbbaa
kivy.parser.parse_int alias ofint
kivy.parser.parse_float alias offloat

kivy.parser.parse_string(texto) Analizar una cadena en una cadena (eliminando la


s comillas sencillas y dobles)
kivy.parser.parse_BOOL(texto) Analizar una cadena en un valor booleano, ignorand
o maysculas y minsculas. "true"/"1" es true, "false"/"0" es falso. Otra cosa lanza
una excepcin.
kivy.parser.parse_int2(texto) Analizar una cadena a una lista de exactamente 2 nm
eros enteros.
&gt;&gt;&gt; print(parse_int2("12 54") 12, 54
kivy.parser.parse_float4(texto) Analizar una cadena a una lista de exactamente 4
carrozas.
&gt;&gt;&gt; parse_float4( 54 87. 35 0 ) 54, 87, 35, 0
kivy.parser.parse_filename(Filename) Analizar un nombre y buscar utilizando reso
urce_find(). Si se encuentra, la ruta de recursos es devuelto, otros- sabia devo
lver el nombre de archivo sin modificar (segn lo especificado por el autor de la
llamada).
21.20 Propiedades
Las propiedades clases se utilizan al crear anEventDispatcher.
Advertencia: las propiedades Kivy no deben confundirse con las propiedades de Py
thon (es decir, la propiedad y el decorador@ <property>Tipo).
La propiedad Kivy clases admiten:
Valor de comprobacin/validacin cuando se asigne un nuevo valor a una propiedad, el
valor se compara con restricciones de validacin. Por ejemplo, la validacin de anO
ptionProperty quiere asegurarse de que el valor se encuentra en una lista predef
inida de posibilidades. Validacin aNumericProperty comprobar que el valor es un ti
po numrico. Esto evita muchos de los errores en una etapa temprana.
Patrn Observer. Puede especificar qu debe ocurrir cuando cambia el valor de una pr
opiedad. Puede enlazar su propia funcin como una devolucin de llamada a los cambio
s de una propiedad. Por ejemplo, si desea un trozo de cdigo al que se llama cuand
o un widget spos los cambios de propiedad, usted canbind una funcin.
Gestin de memoria mejorada la misma instancia de una propiedad es compartida entr
e varias instancias de widget.
Comparacin 21.20.1 vs. Python Kivy
ejemplo bsico
comparemos Python y propiedades Kivy creando una clase de Python con a como un
a propiedad float:
229

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 &lt; self.Un_min o valor &gt; 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 &gt; 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

21.20.3 enlazar las propiedades de propiedades.


Al enlazar a una propiedad de una propiedad, por ejemplo, enlazar a una propieda

d de un objeto numrico guardado en una propiedad de objeto, actualizar la propied


ad Object para que apunte a un objeto nuevo no volver a enlazar la propiedad numri
ca para el nuevo objeto. Por ejemplo:
<MyWidget>:
etiqueta:
id: primer texto: "Primera etiqueta etiqueta:
id: segundo texto: Segundo etiqueta:
Etiqueta: primer texto: self.Label.text on_pulse: self.label = segunda
al hacer clic sobre el botn, aunque la etiqueta de propiedad del objeto ha cambia
do a la segunda, el texto del botn de widget no cambiar porque est enlazado a la pr
opiedad text de la primera etiqueta directamente.
En el punto 1.9.0, la opcin de reconexin ha sido introducido que permitir la actual
izacin automtica del texto whenlabel es cambiado, siempre estaba activado. SeeObje
ctProperty.
classkivy.properties.Property Bases: builtins.object
clase base para construir las propiedades ms complejas.
Esta clase se encarga de todos los setters y getters bsico tipo ninguno, la manip
ulacin, el almacenamiento y la lista de observadores de la inicializacin. Esta cla
se no se pueden crear instancias directamente.
De forma predeterminada, siempre aProperty toma un valor por defecto:
clase MyObject(Widget):
hola = Property( hola mundo )
El valor predeterminado debe ser un valor que coincide con el tipo de propiedad.
Por ejemplo, no se puede establecer una lista de porque el StringProperty aStri
ngProperty comprobar el valor predeterminado.
Ninguno es un caso especial: puede establecer el valor predeterminado de una pro
piedad a Ninguno, pero no se puede establecer ninguna para una propiedad despus.
Si usted realmente quiere hacer eso, usted debe declarar la propiedad con allown
one=True:
clase MyObject(Widget):
hola = ObjectProperty(Ninguno, allownone=True)
# posteriormente un = MyObject.hello() = bleh # trabajando.hola = none # traba
jar demasiado, porque allownone es True.
Los parmetros default:Especifica el valor predeterminado de la propiedad.
kwargs:Si los parmetros incluyen errorhandler, este debera ser exigible que debe ten
er un solo argumento vlido y devolver un valor sustitutivo.
Si los parmetros incluyen valordeerror, este debe ser un objeto. Si se establece,
ser reemplazar un valor de propiedad no vlido (anula errorhandler).
232

Si los parmetros incluyen la fuerza_dispatch, debe ser un valor booleano. Si es T


rue, la comparacin del valor no se har, por lo tanto, la propiedad evento ser envia
do incluso si el nuevo valor coincide con el valor antiguo (por defecto valores
idnticos, no se expiden para evitar recursin infinita en enlaza dos vas). Tenga cui
dado, esto es slo para uso avanzado.
Ha cambiado en la versin 1.4.2: Parmetros errorhandler valordeerror agregado y
cambiado en la versin 1.9.0: el parmetro force_dispatch agreg
bind() aade un nuevo observador a ser llamado nicamente cuando el valor es cambiad
o.
dispatch() cambia el valor de despacho a todos los observadores.
Ha cambiado en la versin 1.1.0: El mtodo es ahora accesible desde Python.
Esto puede ser utilizado para forzar el envo de los bienes, incluso si el valor n
o cambia:
botn botn =() # obtener la instancia de la clase de propiedad prop = Button.proper
ty( text ) # envo esta propiedad en la instancia de botn prop.envo(Button)
fbind() es similar a enlazar, excepto que no comprueba si el observador ya exist
e. Tambin se expande y reenva largs y kwargs a la retrollamada. funbind o desenlaz

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

classkivy.properties.NumericProperty Bases: kivy.properties.Property


propiedad que representa un valor numrico.
Defaultvalue parmetros: int o float, por defecto 0especifica el valor predetermin
ado de la propiedad.
&gt;&gt;&gt; wid = Widget() &gt;&gt;&gt; wid.x = 42 &gt;&gt;&gt; print(wid.x) 42
&gt;&gt;&gt; wid.x = "plop" Rastreo (llamada ms reciente last):
File " <stdin>", la lnea 1, en <module>"Propiedades de archivo.pyx", lnea 93, en e
l archivo "kivy.properties.Property.__set__ properties.pyx", lnea 111, en el arch
ivo "kivy.properties.Property.set properties.pyx", lnea 159, en kivy.properties.N
umericProperty.check NumericProperty ValueError: aceptar slo int./flotacin
ha cambiado en la versin 1.4.1: NumericProperty ahora puede aceptar el texto pers
onalizado y valor de la tupla que indicara un tipo, como "a", "Pt", "PX", "cm",
"mm", en el formato: 10pt o (10, PT ).
get_format() devuelven el formato utilizado para el clculo numrico. El valor prede
terminado es px (significa que el valor no han cambiado en absoluto). De lo cont
rario, pueden ser in , PT , cm , mm
kivy.properties.Property classkivy.properties.StringProperty Bases:
propiedad que representa un valor de cadena.
Parmetros: string defaultvalue, cambia a Sespecifica el valor predeterminado de
la propiedad.
classkivy.properties.ListProperty Bases: kivy.properties.Property
propiedad que representa una lista.
Parmetros: lista, defaultvalue predeterminados a []especifica el valor predetermi
nado de la propiedad.
Advertencia: Cuando se asigna una lista de aListProperty, la lista almacenada en
la propiedad es una copia de la lista y no en la lista original. Esto se puede
demostrar con el siguiente ejemplo:
&gt;&gt;&gt; clase miwidget(Widget):
&gt;&gt;&gt; my_list = ListProperty([])
&gt;&gt;&gt; widget = Miwidget() &gt;&gt;&gt; my_list = widget.mi_list = [1, 5,
7] &gt;&gt;&gt; imprimir mi lista_widget.mi_list falso &gt;&gt;&gt; mi_list.appe
nd(10) &gt;&gt;&gt; print(mi_list, widget.mi_list) [1, 5, 7, 10], [1, 5, 7]
classkivy.properties.ObjectProperty Bases: kivy.properties.Property
propiedad que representa un objeto de Python.

Parmetros: objeto defaultvalue calendarioespecifica el valor predeterminado de la


propiedad.
234

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

la instancia de obj. A None si desea deshabilitarlo. Checkset_min para un ejemp


lo de uso.
Advertencia: Cambiar los lmites no revalidar el valor actual.
Nuevo en la versin 1.1.0.
set_min() cambia el valor mnimo aceptable para el BoundedNumericProperty, slo para
la instancia de obj. A None si desea deshabilitarlo:
clase miwidget(Widget):
nmero = BoundedNumericProperty(0=-5, min, max=5)
widget = Miwidget() # cambiar el minmium Widget.property( number ).set_min(widge
t, -10 a -10) # o deshabilitar la comprobacin mnima Widget.property( number ).set_
min(widget, ninguno)
Advertencia: Cambiar los lmites no revalidar el valor actual.
Nuevo en la versin 1.1.0.
classkivy.properties.OptionProperty Bases: kivy.properties.Property
propiedad que representa una cadena de una lista predefinida de opciones vlidas.
Si la cadena establecida en la propiedad no est en la lista de las opciones vlidas
(aprobado en la creacin de propiedades de tiempo), una excepcin ValueError ser lev
antada.
Parmetros por defecto: cualquier tipo vlido en la lista de optionsSpecifies el val
or predeterminado de la propiedad.
kwargs: una lista de palabras clave argumentsShould incluyen un parmetro options es
pecificando una lista (no tupla) de las opciones vlidas.
Por ejemplo:
clase miwidget(Widget):
estado = OptionProperty("Ninguno", Opciones=["On" y "Off", "None"])
opciones Volver las opciones disponibles.
Nuevo en la versin 1.0.9.
236 kivy.properties.Property classkivy.properties.ReferenceListProperty Bases:

propiedad que permite la creacin de una tupla de otras propiedades.


Por ejemplo, si x e y son NumericPropertys, podemos crear un ReferenceListProper
ty para el TPV. Si cambia el valor de pos, cambiar automticamente los valores de x
e y en consecuencia. Si usted lee el valor ofpos, devolver una tupla con los val
ores de x e y.
Por ejemplo:
clase miwidget(EventDispatcher):
x = NumericProperty(0) y = NumericProperty(0) pos = ReferenceListProperty(x, y)
kivy.properties.Property classkivy.properties.AliasProperty Bases:
Crear una propiedad con un getter y setter personalizados.
Si usted no encuentra una clase de propiedad que se adapta a sus necesidades, us
ted puede hacer su propia mediante la creacin personalizada de los mtodos getter y
setter de Python.
Ejemplo de kivy/uix/widget.py:
def get_right(self):
return self.x + auto.width def set_right(self, valor):
self.x = valor - self.width = derecha AliasProperty(get_right, set_derecha, enla
zar=[ x , Anchura ])
Parmetros: functionFunction getter para usar como una propiedad getter setter: fu
nctionFunction para usar como un establecedor de propiedad. Propiedades escuchan
do la propiedad alias no se actualiza cuando se establece la propiedad (por ejem
plo, derecho = 10), a menos que el setter devuelve True.
bind: lista/tupleProperties para observar los cambios, como el nombre de la prop
iedad Strings cach: booleanIf True, el valor se almacenar en cach, hasta que uno de
los elementos se unen cambios reenlazar: bool, por omisin FalseSeeObjectProperty
para ms detalles.
Ha cambiado en la versin 1.9.0: Enlazar ha sido introducido.

Ha cambiado en la versin 1.4.0: El parmetro cache aadido.


classkivy.properties.DictProperty Bases: kivy.properties.Property
propiedad que representa un dict.
Parmetros: defaultvalue NoneSpecifies dict, por defecto el valor predeterminado d
e la propiedad.
volver a enlazar: bool, por omisin FalseSeeObjectProperty para ms detalles.
Ha cambiado en la versin 1.9.0: Enlazar ha sido introducido.
Advertencia: Similar a ListProperty, al asignar a un DictProperty dict dict, alm
acenada en la propiedad es una copia de la dict dict y no el original. Para obte
ner ms detalles.
classkivy.properties.VariableListProperty SeeListProperty Bases: kivy.properties
.Property
un ListProperty que le permite trabajar con una cantidad variable de elementos d
e lista y para expandir el tamao deseado de la lista.
237

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:

id: nmero texto: info.str(nmero) Info


Info: ID: Nmero: nmero.texto: Nmero: {} .Format(self.number)
te dars cuenta de que tenemos que hacer texto: info.str(nmero), esto es debido a q
ue el valor de esta propiedad es siempre un tipo int, porque hemos especificado
como el int val_type. Sin embargo, podemos asignar nada a la propiedad, por ejem
plo, Nmero: nmero.text que asigna una cadena, porque se convierten instantneamente
con el tipo val_callback.
238

Nota: Si un archivo ha sido abierto para este ConfigParser thenwrite usingread()


() se llama cada cambio de propiedad, manteniendo el archivo actualizado.
Advertencia: se recomienda que el archivo config parser objeto se asigna a la pr
opiedad tras el kv rbol ha sido construido (por ejemplo, programar el siguiente f
otograma del init). Esto es porque el rbol de kv y sus propiedades, cuando se cre
a, se evalan en funcin de su propia orden, por lo tanto, cualquier valor inicial e
n el analizador puede ser sobreescrita por objetos que est enlazado. De modo que
en el ejemplo anterior, la TextInput podra estar vaca inicialmente y ifnumber: nmer
o.text es evaluado antes del texto: info.str(nmero), el valor de la configuracin s
er sobreescrita con el valor de texto (vaca).
Parmetros por defecto: objeto calendarioespecifica el valor predeterminado de la
clave. Si el analizador asso conexas con esta propiedad no tiene esta seccin o cl
ave, ser creado con el valor actual, que es el valor predeterminado inicialmente.
Seccin: cadena escribael seccin en el ConfigParser donde la clave / valor ser escri
to. Debe ser proporcionada. Si la seccin no existe, ser creado.
Clave: cadena escribael clave en la seccin donde el valor ser escrito.
Debe ser proporcionada. Si la clave no existe, ser creado y el actual valor escri
to a l; de lo contrario, su valor se utilizar.
config: cadena orConfigParser instancia.La instancia ConfigParser asso- ciate co
n esta propiedad si no ninguno. Si es una cadena, la postura ConfigParser en- cu
yo nombre es el valor del config ser utilizado. Si no existe tal analizador an, si
empre que un ConfigParser con este nombre se crea, se auto- matically vincularse
a esta propiedad.
Siempre que un ConfigParser se vincular con una propiedad, si la seccin o la clave
no existe, el valor de la propiedad actual se utilizar para crear la clave, de l
o contrario, el valor de la clave existente se utilizar como valor de la propieda
d; sobrescribiendo su valor actual. Puede cambiar el ConfigParser asociados con
esta propiedad si una cadena se utiliza aqu, cambiando el nombre de una instancia
ConfigParser existentes o nuevas. O throughset_config().
kwargs: una lista de argumentos de palabra clave val_type: callable objectThe valo
res clave se guarda en el ConfigParser como cadenas. Cuando el valor se lee Conf
igParser internamente y asignado a la propiedad o cuando el usuario cambia el va
lor de la propiedad directamente, si val_type no es ninguno, se llamar con el nue
vo valor como entrada y debe devolver el valor convertido al tipo apropiado acep
tado ny esta propiedad. Por ejemplo, si la propiedad representan ints,val_type p
uede ser simplemente int.
Si el val_type plantea una devolucin de llamada, ValueError valordeerror o errorh
andler se utilizar si se proporciona. Sugerencia: la funcin getboolean del analiza
dor de config- tambin podra ser til aqu para convertir a un tipo booleano.
Compruebe: objectCan exigible se utiliza para restringir los valores permitidos
de la propiedad. Para cada valor asignado a la propiedad, si se especifica, veri
fique que se llama con el nuevo valor y devuelve Verdadero si el valor es acepta
do, de lo contrario, valordeerror o errorhandler se utilizar si se proporciona o
un ValueError est levantada.
Nuevo en la versin 1.9.0.
set_config() establece el objeto ConfigParser para ser utilizado por esta propie
dad. Normalmente, el ConfigParser se establece cuando se inicializa la propiedad
mediante el parmetro de configuracin.

Parmetros: instancia AConfigParser config.La instancia que se utiliza para escuch


ar y
239 el

valor de la propiedad guardar cambios. Si ninguno, desconecta la utilizada actua


lmente.
clase ConfigParser miwidget(Widget):
username = ConfigParserProperty( , info , Nombre , Ninguno)
widget =
21.21 widget.property( username ).set_config(ConfigParser()) miwidget()
Gestin de Recursos Gestin de recursos puede ser un dolor si tiene mltiples caminos
y proyectos. Kivy ofrece 2 funciones para buscar recursos especficos a travs de un
a lista de rutas de acceso.
Bsqueda de recursos
Kivy 21.21.1 cuando busca un recurso, por ejemplo, una imagen o un archivo de kv
, busca a travs de un predeter- minado conjunto de carpetas. Puede modificar esta
lista de carpetas usando el recurso_add_path() y RESOURCE_remove_path() funcion
a.
21.21.2 Personalizacin Kivy
estas funciones tambin pueden ser tiles si desea reemplazar Kivy estndar con sus pr
opios recursos. Por ejemplo, si desea personalizar o re-style Kivy, puede forzar
yourstyle.kv o data/defaulttheme-0.png para ser utilizados con preferencia a lo
s valores predeterminados, simplemente aadiendo la ruta a su preferido alternativ
as a travs theresource_add_path() mtodo.
Como casi todos los recursos son Kivy mir hacia arriba utilizando theresource_fin
d(), as que usted puede utilizar este enfoque para agregar fuentes y distribucion
es de teclado y reemplazar imgenes e iconos.
kivy.resources.resource_find(Filename) buscar un recurso en la lista de rutas. U
se resource_add_path para agregar una ruta personalizada para la bsqueda.
kivy.resources.resource_add_path (ruta) Agregar una ruta personalizada para busc
ar.
kivy.resources.resource_remove_path (ruta) Quitar una ruta de bsqueda.
Nuevo en la versin 1.0.8.
21,22 Apoyo
Active otros marcos/toolkits dentro del bucle de eventos de kivy.
kivy.support.install_gobject_iteracin() la importacin e instalacin de gobject conte
xto iteracin dentro de nuestro bucle de eventos. Esto se usa tan pronto como se u
tiliza gobject (como gstreamer).
kivy.support.install_twisted_reactor( kwargs) Instala un reactor trenzado roscados,
que programar un reactor antes de la siguiente iteracin marco slo cuando twisted n
ecesita hacer algn trabajo.
240

ningn argumento o argumentos pasados a esta funcin ser transmitida en el roscado re


actores- Seleccionar funcin intercalados. Estos son los argumentos que uno normal
mente pasa a su reactor.startRunning retorcido.
A diferencia de la torcida predeterminado del reactor, el reactor instalado no c
ontrolar las seales, a menos que defina la palabra clave installSignalHandlers a
rgumento a 1 explcitamente. Esto se hace para permitir kivy para manejar las seale
s habituales, a menos que especficamente quiere el reactor trenzado para manejar
las seales (ej.
SIGINT).
Nota: Twisted no est incluido en la versin de iOS por defecto. Para utilizarlo en
iOS, poner el trenzado distribu- cin y zope.interface (dependencia) en el directo

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:
&gt;&gt;&gt; get_hex_from_color((0, 1, 0) #00FF00" &gt;&gt;&gt; get_hex_from_co
lor((.25, .77, .90, .5) #3fc4e57f
nuevo en la versin 1.5.0.
241

kivy.utils.get_random_color(alfa=1,0) devuelve un color aleatorio (4 tuplas).


Alfa de parmetros predeterminados para flotar,[1,0] Si alfa == "Random", un valor
de alpha es aleatorio gener- ciada.
kivy.utils.es_color_transparente(c) devuelve true si el canal alfa es 0.
kivy.utils.minvalue(valor, frontera, lmite maxvalue) un valor entre un minvalue y
maxvalue.
kivy.utils.deprecated(func) Este es un decorador que pueden utilizarse para func
iones de marca como obsoleta. El resultado ser una advertencia que emite la prime
ra vez que se utiliza la funcin.
classkivy.utils.SafeList Bases: builtins.list
list con un mtodo clear().
Advertencia: el uso de la iterar() reducir su rendimiento.
Kivy.utils.interpolate(value_from, valor_a, paso=10) interpolar entre dos valore
s. Esto puede ser til para suavizar algunas de las transiciones. Por ejemplo:
# en lugar de configuracin directamente self.pos = pos
# Usar interpolar, y usted tendr una mejor transicin self.pos = interpolar(self.po
s, nueva_pos)
Advertencia: Estas interpolaciones trabajan solamente en listas o tuplas/dobles
con las mismas dimensiones.
No hay ninguna prueba que se realiza para comprobar las dimensiones son las mism
as.
classkivy.utils.QueryDict Bases: builtins.dict
QueryDict es un diccionario() que puede ser consultada con un punto.
Nuevo en la versin 1.0.4.
d = QueryDict() # Crear una clave denominada toto, con el valor 1 d.toto = 1 # e
s el mismo como d[ toto ] = 1
kivy.utils.plataforma = linux una cadena que identifica el sistema operativo a
ctual. Es uno de los siguientes: win , linux , android , macosx , ios o d
esconocido . Puede utilizarlo como sigue:

de kivy.utils importar plataforma si plataforma == linux :


_linux_cosas()
nuevo en la versin 1.3.0.
Ha cambiado en la versin 1.8.0: plataforma es ahora una variable en lugar de una
funcin.
242

kivy.utils.escape_markup(texto) escapar caracteres de marcas que figuran en el t


exto. Diseado para ser utilizado cuando se activa el texto marcado en la etiqueta
:
confianza = texto_escape_markup( Mira el ejemplo [1] ) texto = [color=ff0000]
+ confianza_text + [/COLOR] w = etiqueta(text=text markup=True),
nuevo en la versin 1.3.0.
classkivy.utils.reify(func) Bases: builtins.objeto
poner el resultado de un mtodo que utiliza este (sin datos) decorador descriptor
en la instancia dict despus de la primera llamada, sustituyendo efectivamente el
decorador con una variable de instancia.
Acta como @propiedad, excepto que la funcin slo se llama una vez; despus de eso, el
valor se almacena en cach como un atributo normal. Esto le da pereza creacin de at
ributos en los objetos que estn destinados a ser inmutables.
Tomado de la pirmide proyecto.
Para utilizar esto como un decorador:
@def reify perezoso(self):
...
volver hard_para_calcular_int first_time = self.perezoso # es perezoso, reify re
ify obj.__get__() se ejecuta en segundo_time = self.perezoso # lazy es hard_para
_calcular_int
kivy.utils.rgba(s, args) devuelven un color kivy (4 valor del rango 0-1) desde un
a cadena hexadecimal ora lista de valores 0-255 Nuevo en la versin 1.9.2.
21.24
TheVector vectorial representa un vector 2D (x, y). Nuestra aplicacin est integrad
a en la parte superior de una lista de Python.
Un ejemplo de construccin de un vector:
&gt;&gt;&gt; # Construir un punto en 82,34 &gt;&gt;&gt; v = Vector(82, 34) &gt;&
gt;&gt; v[0] 82 &gt;&gt;&gt; v.x 82 &gt;&gt;&gt; v[1] 34 34 v.y &gt;&gt;&gt;
&gt;&gt;&gt; # construir dando una lista de 2 valores &gt;&gt;&gt; pos = (93, 45
) &gt;&gt;&gt; v = Vector(pos) &gt;&gt;&gt; v[0] 93 &gt;&gt;&gt; v.x 93
243

&gt;&gt;&gt; v[1] 45 &gt;&gt;&gt; v.y 45


21.24.1 Uso optimizado
la mayora del tiempo, usted puede utilizar una lista de argumentos, en lugar de u
tilizar un vector. Por ejemplo, si se desea calcular la distancia entre dos punt
os:
a = (10, 10) b = (87, 34)
# optimizado el mtodo Print( Distancia entre a y b: , Vector(a).distancia(b))
# no optimizado mtodo va = Vector(a) vb = Vector(b) print( Distancia entre a y b:
, va.distancia(Vb)
21.24.2 operadores vectoriales
TheVector admite algunos operadores numricos como +, -, /:
&gt;&gt;&gt; Vector(1, 1) + Vector(9, 5, 6) [10]
&gt;&gt;&gt; Vector(9, 5) - Vector(5, 5) [4, 0]
&gt;&gt;&gt; Vector(10, 10) / Vector(2., 4.) [5.0, 2.5]
&gt;&gt;&gt; Vector(10, 10) / 5.

[2.0, 2.0]
Se puede tambin utilizar en lugar de los operadores:
5 [15, 15] &gt;&gt;&gt; v /= 2. = &gt;&gt;&gt; v = Vector(1, 1) &gt;&gt;&gt; v +=
2 &gt;&gt;&gt; v [3, 3] &gt;&gt;&gt; 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

&gt;&gt;&gt; Vector(100, 0).El ngulo((0, 100)) -90 &gt;&gt;&gt; Vector(87, 23).El


ngulo((-77, 10) -157.7920283010705
distancia(a) devuelve la distancia entre dos puntos.
&gt;&gt;&gt; Vector(10, 10).La distancia((5, 10) 5.
&gt;&gt;&gt; = (90, 33) &gt;&gt;&gt; b = (76, 34) &gt;&gt;&gt;(a).Vector distanc
ia(b)
distancia 14.0356688476181992(a) devuelve la distancia entre dos puntos cuadrado
s.
&gt;&gt;&gt; Vector(10, 10).La distancia2((5, 10) 25
dot(a) Calcula el producto de puntos de a y b.
&gt;&gt;&gt; Vector(2, 4).dot((2, 2) 12
_staticin bbox(point, a, b) devuelve true si el punto est en el cuadro delimitado
r definido por a y b.
&gt;&gt;&gt; bmin = (0, 0) &gt;&gt;&gt; bmax = (100, 100) &gt;&gt;&gt; Vector.en
_bbox((50, 50), bmin, bmax) &gt;&gt;&gt; True Vector.en_bbox((647, -10), bmin, b
max) falso
length() devuelve la longitud de un vector.
&gt;&gt;&gt; Vector(10, 10).length() &gt;&gt;&gt; 14.142135623730951 pos = (10,
10) &gt;&gt;&gt; Vector(pos).length() 14.142135623730951
longitud2() devuelve la longitud de un vector al cuadrado.
&gt;&gt;&gt; Vector(10, 10).length2() 200 &gt;&gt;&gt; pos = (10, 10) &gt;&gt;&g
t; Vector(pos).length() 200
staticline2_intersection(v1, v2, v3, v4) busca el punto de interseccin entre las
lneas (1)v1-&gt;v2 y (2)v3-&gt;v4 y lo devuelve como un objeto vectorial.
245

&gt;&gt;&gt; = (98, 28) &gt;&gt;&gt; b = (72, 33) &gt;&gt;&gt; c = (10, -5) &gt;
&gt;&gt; d = (20, 88) &gt;&gt;&gt; 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.
&gt;&gt;&gt; v = Vector(88, 33).normalize() &gt;&gt;&gt; v [0.93632917756904444,
0.3511234415883917] &gt;&gt;&gt; v.length() 1.0
rotate(ngulo) Gire el vector con un ngulo en grados.
&gt;&gt;&gt; v = Vector(100, 0) &gt;&gt;&gt; v.rotate(45) &gt;&gt;&gt; [v]
staticsegment 70.710678118654755, 70.710678118654741_intersection(v1, v2, v3, v4
) busca el punto de interseccin entre los segmentos (1)v1-&gt;v2 y (2)v3-&gt;v4 y
lo devuelve como un objeto vectorial.
&gt;&gt;&gt; = (98, 28) &gt;&gt;&gt; b = (72, 33) &gt;&gt;&gt; c = (10, -5) &gt;
&gt;&gt; d = (20, 88) &gt;&gt;&gt; Vector.segment_interseccin(a, b, c, d) Ninguno
&gt;&gt;&gt; = (0, 0) &gt;&gt;&gt; b = (10, 10) &gt;&gt;&gt; c = (0, 10) &gt;&gt
;&gt; d = (10, 0) &gt;&gt;&gt; Vector.segment_interseccin(a, b, c, d) [5, 5]

x x representa el primer elemento de la lista.


&gt;&gt;&gt; v = Vector(12, 23) &gt;&gt;&gt; v[0] 12 &gt;&gt;&gt; v.x 12
s s representa el segundo elemento de la lista.
246

&gt;&gt;&gt; v = Vector(12, 23) &gt;&gt;&gt; v[1] 23 &gt;&gt;&gt; 23 v.y


21,25 dbil
el mtodo WeakMethod es utilizado por la clase de reloj para permitir las referenc
ias a un mtodo vinculado que permite al objeto asociado a ser recolectados. Consu
lte ejemplos/core/clock_method.py para ms informa- cin.
Esta clase WeakMethod est tomado de la receta Http://code.activestate.com/recipes
/81253/, basada en la versin de Nicodemo. Muchas gracias a Nicodemo!
Classkivy.weakmethod.WeakMethod(mtodo) Bases: builtins.
Implementacin de un objeto weakref para funciones y mtodos vinculados.
Es_dead() devuelve true si la referencia era exigible un mtodo vinculado y la ins
tancia ya no existe. En caso contrario, devuelve False.
21.26 Proxy dbiles
a fin de permitir la recogida de basura, la dbil aproximacin proporciona referenci
as dbiles a los objetos. Efectivamente mejora la weakref.proxy agregando soporte
de comparacin.
classkivy.weakproxy.WeakProxy Bases: builtins.
Reemplazo de objeto para apoyar weakref.proxy comparaciones
247

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

El adaptador de base es una subclase del SimpleListAdapter y ListAdapter. La Dic


tAdapter es ms avanzadas y flexibles de subclase ofListAdapter.
Adaptador ListAdapter DictAdapter SimpleListAdapter,,.
Modelos: Los datos para que un adaptador sirve como un puente para las vistas pu
eden ser cualquier tipo de datos. Sin embargo, para mayor comodidad, el modelo m
ixin clases pueden facilitar la preparacin o elaboracin de los datos para su uso e
n el sistema. Para las operaciones de seleccin, theSelectableDataItem opcionalmen
te puede preparar elementos de datos para proporcionar y recibir informacin de la
seleccin de elementos de datos (no se requiere que se "seleccin- consciente", per
o en algunos casos puede ser deseable).
SelectableDataItem.
Conversores: Args argumento convertidores estn hechas por el programador de la ap
licacin para realizar el trabajo de conversin de elementos de datos para el argume
nto diccionarios adecuados para crear instancias de opiniones. En efecto, toman
cada fila de los datos y crear diccionarios que se pasan a los constructores de
la cls/plantilla que se usa para rellenar tu vista.
Elemento de lista argumento vista convertidores.
Opiniones: Modelos de tus datos se presentan al usuario a travs de las vistas. Ca
da uno de los elementos de datos Crear un subelemento vista correspondiente (el
cls o plantilla) presentado en una lista en la vista. La base AbstractView tiene
actualmente una aplicacin concreta: el control Listview.
Visin abstracta, Vista de lista.
22.3 El adaptador
nuevo en la versin 1.5.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
Un adaptador es un puente entre los datos y un AbstractView o una de sus subclas
es, tales como un control ListView.
Los siguientes argumentos pueden ser pasados al contructor para inicializar las
propiedades correspondientes:
datos: para cualquier tipo de datos que se utilizarn en una vista. Para anAdapter
, los datos pueden ser un objeto as como una lista, dict, etc. Para aListAdapter,
datos debe ser una lista. Para aDictAdapter, los datos debern ser un dict.
cls: la clase que se utiliza para crear una instancia de cada elemento de la lis
ta Ver instancia (utilice este o el argumento de plantilla).
Plantilla: Plantilla de kv a utilizar para crear una instancia de cada elemento
de la lista Ver instancia (utilice este argumento o el CLS).
args_converter: una funcin que se utiliza para transformar los elementos de datos
en preparacin para una instanciacin cls o un kv invocacin de plantilla. Si no se p
roporciona el parmetro args_converter, los elementos de datos que se supone son c
adenas sencillas.
Consulte la documentacin theadapters para obtener una visin general de cmo se utili
zan los adaptadores.
classkivy.adaptadores.Adaptador adapter.( kwargs) Bases: kivy.event.
AnAdapter EventDispatcher es un puente entre los datos y anAbstractView o una de
sus subclases, tales como un ListView.
args_converter una funcin que prepara un args dict para el cls o kv plantilla par
a generar una vista de un elemento de datos.
250

Si un convertidor_args no es proporcionada, uno predeterminado est establecido qu


e asume el contenido simple en la forma de una lista de cadenas.
args_converter es anObjectProperty y predeterminados a Ninguno.
cls una clase para crear instancias de un determinado elemento de la vista (util
ice este o plantilla). Si esto no se ajusta ni la plantilla, aLabel como se util
iza para la vista elemento.
cls es anObjectProperty y predeterminados a Ninguno.

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

ordenados_keys la propiedad Sorted_keys lista contiene una lista de objetos hash


able (pueden ser cadenas) que se utilizar directamente si no_args funcin del conve
rtidor. Si hay un convertidor_args, el acta recibida desde una bsqueda de los dat
os, mediante las teclas de SORTED_keys, pasarn a formar parte de ella para la ins
tanciacin de elemento de lista ver las instancias de la clase.
SORTED_keys es aListProperty y predeterminados a [].
trim_Left_de_sel( args) Cortar los elementos de lista con ndices en SORTED_claves q
ue son menos que el ndice del primer elemento seleccionado, si hay una seleccin.
ordena_keys ser actualizado por update_para_new_data().
trim_RIGHT_de_sel( args) Cortar los elementos de lista con ndices en SORTED_claves
que son mayores que el ndice del ltimo elemento seleccionado, si hay una seleccin.
ordena_keys ser actualizado por update_para_new_data().
trim_para_sel( args) Cortar los elementos de lista con ndices en SORTED_claves que
son les que o mayor que el ndice del ltimo elemento seleccionado, Si hay una selec
cin. Esto conserva elementos de la lista de intervinientes en el rango selecciona
do.
ordena_keys ser actualizado por update_para_new_data().
22.5 El elemento de la lista de convertidores argumento vista

nuevo en la versin 1.5.


El elemento de lista predeterminado args converter lista de adaptadores es una f
uncin (mostrado a continuacin) que tiene un ndice de fila y una cadena. Devuelve un
diccionario con la cadena como el elemento de texto, junto con dos propiedades
adecuadas para elementos de texto simple con una altura de 25.
22.5.1 Uso sencillo
argumento convertidores podran ser las funciones normales o, como en el caso del
conversor, args lambdas predeterminado:
lista_item_args_Convertidor = fila lambda_index, x: { text , Tamao: x_y_HINT : N
inguno, la altura : 25}
22.5.2 Uso avanzado
normalmente, teniendo el argumento converter realice una asignacin simple basta.
Sin embargo, hay veces cuando se requiere la manipulacin ms compleja. Cuando utili
ce aCompositeListItem, es posible especificar una lista de diccionarios de CLS.
Esto permite para componer un nico elemento vista de varias clases, cada una de l
as cuales puede recibir sus propios argumentos del constructor de la clase a tra
vs de la palabra clave kwargs:
args_Convertidor = fila lambda_index, rec: \ { texto : rec[ text ], tamao_y_HINT
: Ninguno, la altura : 25, cls_dicts : [{ cls: ListItemButton , kwargs : { t
exto : rec[ texto ]}}, { cls: ListItemLabel ,

252 kwargs: { texto : "Oriente-{0}".Format(rec[ texto ]), es_REPRESENTING_Cls


: True}}, { cls: ListItemButton , kwargs : { texto : rec[ texto ]}}]}
Consulte la lista_composite.py para ver un ejemplo completo.
22.6 ListAdapter
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 AListAdapter alrededor de una lista de python y agrega soporte p
ara las operaciones de seleccin. Si usted desea tener un escueto lista adaptador,
sin seleccin, utilice aSimpleListAdapter.
Desde un adaptador, un ListAdapter hereda cls, plantilla y args_converter y agre
ga otras propiedades que controlan el comportamiento de la seleccin:
seleccin: una lista de elementos seleccionados.
seleccin_mode: uno de single , multiple o none .
Permitir_empty_selection: Un valor booleano. Si es False, la seleccin es forzado.
Si el valor es True, y slo el usuario o accin de programacin cambiar la seleccin, pu
ede estar vaca.
Un DictAdapter es una subclase de un ListAdapter. Ambos se despache el on_select
ion_evento change cuando se cambia la seleccin.
Ha cambiado en la versin 1.6.0: Adicin de datos = ListProperty([]), que fue suprim
ido proably inadvertidamente en algn momento. Esto significa que, cuando los camb
ios en los datos se desencadenar una actualizacin, en lugar de tener que restablec
er el objeto de datos (adaptador de datos se ha definido como un ObjectProperty,
as que tenemos que restablecer a ListProperty aqu).
Vase tambin DictAdapter y su conjunto de datos = DictProperty().
classkivy.adaptadores.listadapter.ListAdapter( kwargs) Bases: kivy.adaptadores.adap
tador.El adaptador,kivy.event.EventDispatcher,
una clase base para los adaptadores interfaces con listas, diccionarios u otro t
ipo de coleccin de datos, aadiendo que la seleccin, creacin y gestin de vista functon
ality.
allow_empty_selection allow_empty_seleccin puede utilizarse para cascada seleccin
entre varias vistas de lista, o entre una vista de lista y una vista de observac
in. Tal mantenimiento automtico de la seleccin es importante para todos pero simple
lista muestra. Allow_empty set_selection en False y la seleccin es auto-iniciado
y mantenido siempre, de modo que cualquier observacin de opiniones tambin puede s

er actualizado para permanecer en sincronizacin.


allow_empty_seleccin es aBooleanProperty y su valor predeterminado es True.
cached_views Ver instancias para elementos de datos se instancian y administrado
por el adaptador. Aqu nos mante- nimiento de un diccionario que contiene la vist
a de instancias claves para los ndices de los datos.
Este diccionario funciona como cach. get_view() slo pide una vista desde el adapta
dor si uno no est ya almacenado para el ndice solicitado.
cached_views es aDictProperty y predeterminados a {}.
create_view(index) Este mtodo es ms complicado que los eladaptador andSimpleListAd
apter clases porque aqu creamos enlaces para los elementos de datos y sus hijos d
e vuelta a la
253

self.handle_seleccin() evento. Tambin podemos realizar otras tareas relacionadas c


on la seleccin para mantener el tema vistas en sincronizacin con los datos.
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.
datos Los datos se redefine la propiedad list aqu, anulando su definicin como Obje
ctProperty en la clase de adaptador. Debemos enlazar a los datos de forma que lo
s cambios se activan actualizaciones. Consulte tambin cmo los datos como aDictProp
erty DictAdapter redefine.
Los datos se aListProperty y predeterminados a [].
on_selection_change( args) en_selection_change() es el controlador predeterminado
para el on_selection_evento change. Puede enlazar a este evento para recibir not
ificaciones de cambios de seleccin.
Parmetros: adaptador ListAdapter subclassThe o instancia de la lista adaptador do
nde ha cambiado la seleccin. Utilice la propiedad adaptersselection para ver qu ha
sido seleccionado.
propagar_selection_para_datos Normalmente, elementos de datos no se seleccionan
o deseleccionan porque los elementos de datos podra no tener una propiedad boolea
na es_seleccionado - slo la vista del elemento para un determinado elemento de da
tos se seleccio- nados/deseleccionado mantiene como parte de la lista de seleccin
. Sin embargo, si los elementos de datos tienen un is_propiedad seleccionada, o
si se mezclan, la seleccin inSelectableDataItem ma- chinery puede propagar la sel
eccin de elementos de datos. Esto puede ser til para almacenar el estado de selecc
in de una base de datos local o para mantener el estado de la base de datos backe
nd en el juego o en otros escenarios similares. Es una funcin de conveniencia.
Para propagar la seleccin o no?
Considere una aplicacin de lista de compras para comprar frutas en el mercado. La
app permite la seleccin de frutas para comprar para cada da de la semana, present
ando siete listas: una para cada da de la semana. Cada lista est cargado con todas
las frutas, pero la seleccin de cada una de ellas es un subconjunto. Slo hay un c
onjunto de frutas datos compartidos entre las listas, por lo que no tendra sentid
o para propagar la seleccin a los datos debido a que la seleccin de cualquiera de
las 7 listas chocan de frente y se mezcle con el de los dems.
Sin embargo, considere la posibilidad de un juego que utiliza los mismos frutos
para la seleccin de los frutos disponibles para la fruta de descarte. Una ronda d
e juego podra tener una completa lista de frutas, con frutos disponibles para lan
zar aparece seleccionado. Si el juego se guarda y se vuelve a ejecutar, los frut
os completos lista, con la seleccin marcada en cada tema, se recarga correctament
e si la seleccin siempre se propaga a los datos. Usted puede lograr la misma func
ionalidad mediante la escritura de cdigo para trabajar con la lista de selec- cin,
pero habiendo seleccin almacenada en los datos ListProperty podra resultar conven
iente en algunos casos.
Nota: Este valor debe ser true si desea inicializar la vista con el tema opinion
es ya seleccionado.

propagar_selection_para_data se aBooleanProperty y el valor predeterminado es Fa


lse.
(Ver lista_select_list, Extend=True) La seleccin de llamada est hecha para los ele
mentos en la vista_list.
Argumentos:
view_list: la lista de vistas de elementos para convertirse en la nueva seleccin,
o agregar a la seleccin existente
254

ampliar: booleano para si o no existentes para ampliar la


seleccin de la lista de seleccin de la propiedad list es el contenedor para los el
ementos seleccionados. La
seleccin es aListProperty y predeterminados a [].
selection_limit cuando laseleccin_mode es multiple y la seleccin_limit no es neg
ativo, este nmero va a limitar el nmero de elementos seleccionados. Se puede ajust
ar a 1, lo que equivale a una sola seleccin. Si la seleccin_limit no est definido,
el valor predeterminado es -1, lo que significa que no hay lmite ser aplicado.
selection_limit es aNumericProperty y predeterminados a -1 (sin lmite).
Seleccin La seleccin_mode_mode es una cadena y puede ser uno de los siguientes val
ores:
Ninguno : utilice la lista como una lista simple (sin seleccionar). Esta opcin es
t aqu para que se- lection puede ser apagado, momentneamente o permanentemente, par
a un adaptador existente en la lista. Un ListAdapter no est pensado para ser util
izado como principal no-Adaptador de la lista de seleccin. Utilice un SimpleListA
dapter para eso.
single : multi-touch/haga clic en Ignorar. Slo la seleccin de elemento nico.
multiple : multi-touch / adicin incremental a la seleccin permitidos; puede estar
limitado a un recuento estableciendo laseleccin lmite_
selection_mode es anOptionProperty y predeterminados a single .
trim_Left_de_sel( args) Cortar los elementos de lista con ndices en SORTED_claves q
ue son menos que el ndice del primer elemento seleccionado si hay una seleccin.
trim_RIGHT_de_sel( args) Cortar los elementos de lista con ndices en SORTED_claves
que son mayores que el ndice del ltimo elemento seleccionado si hay una seleccin.
trim_para_sel( args) Cortar los elementos de lista con ndices en SORTED_claves que
son menor o mayor que el ndice del ltimo elemento seleccionado si hay una seleccin.
Esto conserva elementos de la lista de intervinientes en el rango seleccionado.
22.7 SelectableDataItem
nuevo en la versin 1.5.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
Los modelos de datos 22.7.1
Kivy est abierto sobre el tipo de datos que se utilizan en las aplicaciones integ
radas con el sistema. Sin embargo, las clases base son a veces necesarias para g
arantizar que los datos se ajusta a los requisitos de algunas partes del sistema
.
ASelectableDataItem es una clase del modelo de datos de Python bsico que puede se
r usado como un mixin para construir objetos de datos que son compatibles con Ki
vy sadaptador y sistema de seleccin y que trabajen con vistas como aListView. Un
boolean_es un requisito de la propiedad seleccionada.
La operacin predeterminada del sistema de seleccin es no propagar seleccin en opini
ones como ListView a los datos subyacentes: la seleccin por defecto es una operac
in de slo vista. Sin embargo, en algunos casos, es til para propagar la seleccin de
los elementos de datos reales.
255

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

Nota: El ncleo de la biblioteca de audio no admite la grabacin de audio. Si necesi


ta esta funcionalidad, consulte la extensin audiostream
classkivy.core.audio.Bases slidas: kivy.event.EventDispatcher,
representa un sonido para que se reproduzca. Esta clase es abstracta, y no se pu
ede utilizar directamente.
Utilice SoundLoader para cargar un sonido.
Eventos en_play [Ninguno] dispararon cuando se reproduce el sonido.
En_stop [Ninguno] despedidos cuando el sonido se detiene.
filename obsoleto desde la versin 1.3.0: Usesource.
get_pos() devuelve la posicin actual del archivo de audio. Devuelve 0 si no est ju
gando.
Nuevo en la versin 1.4.1.
Obtener la longitud La longitud del sonido (en segundos).
load() carga el archivo en memoria. El
bucle se establece en True si el sonido automticamente cuando termina de bucle.
Nuevo en la versin 1.8.0.
loop es aBooleanProperty y su valor por defecto es false.
play() Reproducir el archivo
buscar(posicin) Vaya a la <position>(en segundos).
Nombre de archivo de origen / fuente de su archivo de audio.
Nuevo en la versin 1.3.0.
fuente es una StringProperty que retorna a Ninguno y es de slo lectura. Utilice e
l SoundLoader.load() para cargar audio.
estado Estado del sonido, uno de Stop o play .
Nuevo en la versin 1.3.0. El
estado es una lectura onlyOptionProperty.
estado obsoleto desde la versin 1.3.0: Usestate.
stop() detiene la reproduccin.
descargar() Descargar el archivo desde la memoria.
258

volumen Volumen, en el rango de 0-1. 1 significa volumen completo, 0 significa s


ilencio.
Nuevo en la versin 1.3.0. El
volumen se aNumericProperty y predeterminados a 1.
classkivy.core.audio.SoundLoader Bases: builtins.object
cargar un sonido, utilizando el mejor cargador para el tipo de archivo dado.
staticload(Filename) Cargar un sonido, y devolver una instancia Sound().
staticregister(classobj) Registrar una nueva clase para cargar el sonido.

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

tesIO(open("imagen.png", "rb").read()) im = CoreImage(data, ext="PNG", filename=


"image.png")
classkivy.core.image.Imagen(arg,
kwargs) Bases: kivy.event.EventDispatcher,
cargar una imagen y almacenar el tamao y textura.
260

ha cambiado en la versin 1.0.7: Se ha aadido el atributo mipmap. La textura_mipmap


y tex- tura_rectangle han sido eliminados.
Ha cambiado en la versin 1.0.8: Una imagen widget puede cambiar su textura. Un nu
evo caso on_texture" ha sido introducido. Nuevos mtodos para el manejo de animac
in secuenciados han sido aadidas.
Parmetros arg[puede ser un string (STR), textura o imagen objeto.] Una cadena se
interpreta como una ruta a la imagen que se va a cargar. Tambin puede proporciona
r una textura objeto o un objeto de imagen ya existente. En el ltimo caso, una ve
rdadera copia de la imagen dada objeto ser devuelto.
Keep_data[bool, el valor predeterminado es False.] Mantener los datos de la imag
en cuando la textura es cre- ados.
escala[float, por omisin 1.0] La escala de la imagen
mipmap.[bool, el valor predeterminado es False] Crear para la textura mipmap.
anim_delay: float, cambia a .25retardo en segundos entre cada fotograma de la an
imacin. Los valores ms bajos significa ms rpido. animacin
ANIM_Available devolver True si esta instancia de imagen tiene animacin disponible
.
Nuevo en la versin 1.0.8.
anim_delay Retardo entre cada fotograma de la animacin. Un valor menor significa
ms rpido animacin.
Nuevo en la versin 1.0.8.
anim_index devolver el nmero de ndice de la imagen actualmente en la textura.
Nuevo en la versin 1.0.8.
anim_reset(allow_anim) restablecer una animacin si est disponible.
Nuevo en la versin 1.0.8.
Los parmetros permiten_anim: boolIndicate si la animacin se debe reiniciar la repr
oduccin o no.
Uso:
# start/reset.imagen animacin ANIM_reset(true)
# o detener la animacin imagen.anim_reset(false)
puede cambiar la velocidad de la animacin, mientras que se est reproduciendo:
# ajustado a 20 FPS imagen.anim_delay = 1 / 20.
Filename el nombre get/set de
altura de la imagen imagen
imagen de altura los datos get/set objeto image
staticload(filename,
kwargs) carga una imagen
261

parmetros filename[str] Nombre de archivo de la imagen.


Keep_data[bool, el valor predeterminado es False] conservar los datos de la imag
en cuando la textura es creado.
load_memory(datos, ext, filename= __inline__ ) (interno) Mtodo para cargar una im
agen de datos raw.
nocache indican si la textura no se almacenarn en la cach o no.
Nuevo en la versin 1.6.0.
sobre_texture( largs) Este evento se desencadena cuando la textura de referencia o
contenido haschanged. Normalmente se utiliza para secuenciar las imgenes.
Nuevo en la versin 1.0.8.

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

textura = 262 Texture.create(...) img = Imagen(textura) img.save( hello3.png")


nuevo en la versin 1.7.0.
Ha cambiado en la versin 1.8.0: Parmetro volteada aadido a voltear la imagen antes
de guardarla, en false por defecto. El
tamao de la imagen (ancho y alto)
Textura de la
anchura de la imagen image width
classkivy.core.image.ImageData(width, height, fmt, datos fuente=none, flip_verti
cal=True, fuente_image=none, rowlength=0) Bases: builtins.objeto
contenedor de imgenes e imgenes mipmap. El contenedor siempre tendr al menos el niv
el 0 mipmap.
add_mipmap(level, width, height, datos rowlength) Aadir una imagen para un determ
inado nivel de mipmap.
Nuevo en la versin 1.0.7.
Los datos los datos de la imagen. (Si la imagen es mipmapped, utilizar el nivel 0
)
voltear_vertical indican si la textura ser necesario voltear verticalmente
fmt decodificados, formato de imagen de un formato de textura disponibles
get_mipmap(nivel) obtenga la imagen mipmap en un nivel especfico, si existe
nuevo en la versin 1.0.7. La
altura de la imagen en pxeles de altura. (Si la imagen es mipmapped, se utilizar e
l nivel 0)
iterar_mipmaps() iterar sobre todos mipmap de imgenes disponibles.
Nuevo en la versin 1.0.7.
Los datos de cada mipmaps mipmap.
rowlength rowlength Imagen. (Si la imagen es mipmapped, se utilizar el nivel 0)
nuevo en la versin 1.9.0. de
tamao (ancho y alto) en pxeles. (Si la imagen es mipmapped, utilizar el nivel 0)
origen de la imagen de origen, si est disponible
263

Ancho el ancho de la imagen en pxeles. (Si la imagen es mipmapped, se utilizar el


nivel 0)
23.6 Ortografa
abstraen proporciona acceso a una gama de motores de correccin ortogrfica, as como
sugerencias de palabras. La API est inspirado por encantar, pero pueden aadirse ot
ros backends que implementan la misma API.
Actualmente la ortografa requiere python-enchant para todas las plataformas excep
to OSX, donde existe una aplicacin nativa.
&gt;&gt;&gt; de kivy.core.ortografa importar Ortografa &gt;&gt;&gt; s = Ortografa()
&gt;&gt;&gt; s.list_idiomas() [ en , es_CA , es_GB , es_US ] &gt;&gt;&gt; s.
select( language_en_US") &gt;&gt;&gt; s.sugieren( helo") [u agujero , u Ayuda ,
u helot , u hello , u halo , u hroe , u infierno , u celebr , u helm , u l-lo ]
classkivy.core.ortografa.SpellingBase(language=None) Bases: builtins.El objeto de
la
clase base para todos los proveedores de ortografa. Admite algunos mtodos abstract
os para la comprobacin de palabras y obtener sugerencias.
Compruebe(word) si Word es una palabra vlida en auto._idioma (el idioma activo ac
tualmente), devuelve True. Si la palabra no debera estar marcada, devuelve ningun
o (p.ej. para ). Si no es una palabra vlida en auto._Idioma, devolver False.
Parmetros word[str] la palabra a verificar.
lista_idiomas() devuelve una lista de todos los idiomas admitidos. Por ejemplo,
el [ en , es_GB , es_ES , de , ...]
select_Language(Idioma) en el conjunto de marcas de idiomas, seleccione el prime
r idioma de la lengua.
Idioma[Parmetros str] identificador de idioma. Debe ser una de las opciones devue
ltas por idiomas_list(). Establece el idioma utilizado para la correccin ortogrfic
a y la palabra sugerencias.
Sugieren (fragmento) para un determinado fragmento (es decir, parte de una palab
ra o una palabra), proporcionar correcciones (fragmento puede estar mal escrito)
o finalizaciones como una lista de cadenas.
Fragmento de parmetros[str] El fragmento de palabra para obtener sugerencias y co
rrecciones. Por ejemplo,
foo podra convertirse en a , comida o pie .
exceptionkivy.core.ortografa.NoSuchLangError Bases: Excepcin
excepcin cuando un idioma especfico no se pudo encontrar.
exceptionkivy.core.ortografa.NoLanguageSelectedError Bases: Excepcin
excepcin cuando un idioma-utilizando el mtodo es llamado, pero no hay ningn idioma
seleccionado antes de la llamada.
264

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 &lt;= 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

se dibuja hasta que sea necesario, a fin de obligarlo a dibujar.


mi_label.refresh() # ahora acceder a la textura de la etiqueta y utilizarlo en c
ualquier lugar y sin embargo puede # por favor.
hola_textura = mi_label.textura
classkivy.core.text.LabelBase(text= , font_size=12, font_name= Roboto =False, n
egrita, cursiva, subrayado=False=False, tachado=False, halign="left" valign= aba
jo , acortar=False, text_size=none, mipmap=False, color=none, line_height=1.0, t
ira=False, strip_reflow=True, acorte_from= centro , split_str= , unicode_error
s= replace , font_insinuando= normal , font_kerning=True, font_blended=True, out
line_width=none, outline_color=none,
kwargs) Bases: builtins.objeto
etiqueta de texto bsico. Esta es la clase abstracta utilizados por diferentes bac
kends para representar texto.
Advertencia: La etiqueta de texto bsico no puede cambiarse en tiempo de ejecucin.
Debe volver a crear uno.
Parmetros: int font_size, cambia a 12tamao de fuente del texto font_name: str, por
defecto DEFAULT_FONTFont nombre del texto en negrita: bool, por omisin FalseActi
vate "bold" estilo de texto en cursiva: bool, por omisin FalseActivate "ITALIC" e
stilo de texto text_size: tupla, defaults (Ninguno, Ninguno)Add constraint para
representar el texto (en el lateral de un cuadro delimitador). Si no se indica n
ingn tamao, el tamao de la etiqueta se ajustar al tamao del texto.
Acolchado: flotacin, por omisin NoneIf es un flotador, establecer_x y Relleno Relle
no Relleno_y_x: la flotacin, por omisin 0.0Left/Relleno Relleno derecho_y: la flot
acin, por omisin 0.0Top/relleno inferior: str halign, cambia a "izquierda"la aline
acin horizontal del texto dentro del cuadro delimitador valign: str, por defecto
"fondo"Vertical la alineacin del texto dentro del cuadro delimitador acortar: boo
l, por omisin FalseIndicate si la etiqueta debe intentar acortar su contenido tex
tual en la mayor medida posible, si un determinado tamao. Al definir este valor c
omo True sin un tamao establecido adecuadamente conducir a resultados inesperados.
265

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().
&gt;&gt;&gt; func = auto._get_cached_EXTENTS() &gt;&gt;&gt; func <built-in metho
d size of pygame.font.Font object at 0x01E45650>&gt;&gt;&gt; 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

ancias LayoutLine LayoutWord y de acuerdo con las opciones especificadas.


La funcin est diseada para ser llamado muchas veces, cada vez que el nuevo texto se
anexa a la ltima lnea (o primera lnea si anexando hacia arriba), a menos que una ln
ea est presente en el texto. Cada texto anexado es descrita por sus propias opcio
nes que puede cambiar entre llamadas sucesivas. Si el texto est restringido, se d
etendr tan pronto como se alcanza la restriccin.
Parmetros
267

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:
&gt;&gt;&gt; de kivy.core.Etiqueta importar texto &gt;&gt;&gt; de kivy.core.text
.text_layout import layout_texto

&gt;&gt;&gt; l = etiqueta() &gt;&gt;&gt; lneas = [] &gt;&gt;&gt; # texto de prese


ntacin con restriccin de anchura por 50, pero sin restriccin de altura &gt;&gt;&gt;
w, h = recortadas layout_text( Heres algn texto\nah, otra lnea , ... lneas, (0, 0)
, (50, Ninguno), l, l.options.get_cached_EXTENTS(), verdadero,
... False)
&gt;&gt;&gt; w, h recorta
268

(46, 90, False) # ahora agregar texto de abajo arriba, y restringir witdh slo 100
&gt;&gt;&gt; w, h = recortadas layout_text( \nyay, ms texto\n , lneas (w, h) ...
(100, Ninguno), l, l.options.get_cached_EXTENTS(), False, True)
&gt;&gt;&gt; w, h, encajado (77, 120, 0) &gt;&gt;&gt; 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:
&gt;&gt;&gt; MarkupLabel( [b]Hola mundo[/b] ).marca &gt;&gt;&gt; ( [b] , hola m
undo , [/b] )
270

refs obtenga el cuadro delimitador de todos los[ref=...]:


{ "fA": ((x1, y1, x2, y2), (x1, y1, x2, y2)), ... }
acortar_post(lneas, w, h=2) Margen acorta el texto a una sola lnea segn las opcione
s de etiqueta.
Esta funcin opera en un texto que ya ha sido establecido porque para revisiones,
piezas de texto puede tener diferentes tamaos y opciones.
Iftext_size [0] es Ninguno, las lneas se devuelve sin cambios. De lo contrario, l
as lneas son pro- verted en una sola lnea se ajustan dentro del limitado ancho,tex
t_size [0].
Paramslines: lista de instancias LayoutLine describiendo el texto. w: int, el an
cho del texto en lneas, incluido el relleno. h: int, la altura del texto en lneas,
incluido el relleno. int, el margen izquierdo espacio adicional en los lados. E
sto es adems topadding_x.
Devuelve3-tupla de (xw, h, lneas), donde w y h es similar a la entrada y con- man
tiene la anchura / altura resultante del texto, incluido el relleno. lneas, es un
a lista que contiene una sola LayoutLine, que contiene las palabras de la lnea.
23.8 Video
clase bsica para la lectura de archivos de vdeo y gestin thekivy.graphics.texture.T
extura vdeo.

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 gstreamerNota de compatibilidad: no se admite la grabacin.
classkivy.core.video.VideoBase( kwargs) Bases: kivy.event.
VideoBase EventDispatcher, una clase utilizada para implementar un lector de vdeo
.
Parmetros filename[str] Nombre del vdeo. Puede ser un archivo o un URI.
eos[str, por omisin pausa ] accin a tomar cuando EOS es golpeada. Puede ser una d
e pausa , Stop o Loop .
Ha cambiado en la versin desconocida: aadido async pausa [bool, el valor predeter
minado es True] Carga el vdeo de forma asincrnica (no puede ser apoyado por todos
los proveedores).
autoplay[bool, el valor predeterminado es False] reproduzca automticamente el vdeo
a init.
Eventos en_eosFired cuando EOS es golpeado.
on_loadFired cuando el vdeo se ha cargado y la textura es disponible.
on_frameFired cuando se escribe un nuevo marco a la textura.
Duracin: Obtener la duracin del vdeo (en segundos)
Filename el nombre get/set/uri de la actual
carga de vdeo() carga el vdeo desde el nombre de archivo actual
271

pause() pausar el vdeo


nuevo en la versin 1.4.0.
play() Reproducir el vdeo
get/set de posicin la posicin en el vdeo (en segundos)
buscar(Porcentaje) Mueva el porcentaje de
estado de posicin obtenga el estado de reproduccin de vdeo
stop() detener la reproduccin del vdeo
textura consigue la textura de video
descargar() Descargar el vdeo real
get/set de volumen el volumen en el vdeo (1,0 = 100%)
23.9 de la ventana
para crear la clase principal ventana Kivy predeterminado. Kivy admite slo una ve
ntana por aplicacin:
por favor no intente crear ms de una.
classkivy.core.window.Teclado( kwargs) Bases: kivy.event.EventDispatcher,
interfaz de teclado que es devuelto byWindowBase.request_keyboard(). Cuando uste
d solicita un teclado, obtendr una instancia de esta clase. Cualquiera que sea la
entrada del teclado es (sistema o teclado virtual), recibir los eventos a travs d
e esta instancia.
Eventos en_key_down: keycode, texto modifiersFired cuando una nueva clave es pul
sado en_key_up: keycodeFired cuando se suelta una tecla (arriba) Aqu est un ejempl
o de cmo solicitar un teclado de conformidad con la configuracin actual:
importar kivy kivy.require( 1.0.8 )
de kivy.core.Ventana Ventana importacin de kivy.uix.widget widget
MyKeyboardListener importar clase(Widget):
def __init__(self,
kwargs):
super(MyKeyboardListener, auto).__init__( kwargs). auto_keyboard = window.request_k
eyboard( auto._keyboard_cerrado, auto, text ) si Auto._keyboard.widget:
# si existe, este widget es un objeto VKeyboard que puede utilizar
272

# para cambiar la distribucin del teclado.


pase libre._keyboard.bind(on_key_down=Auto._en_keyboard_down)
def _keyboard_cerrado(self):
print( Mi teclado han sido cerradas! ). auto_keyboard.unbind(on_key_down=Auto._e
n_keyboard_abajo). auto_keyboard = None
def _en_keyboard_down(self, teclado keycode, texto, modificadores):
modificadores) % texto) print( - modificadores son %r % print( LA LLAVE , key
code han presionado") print( - texto Es %r
# Keycode se compone de un entero + una cadena # si logramos escapar, liberar el
teclado si keycode[1] == escape :
teclado.Release()
devolver true # a aceptar la clave. De lo contrario, ser utilizado por el sistema.
#
devolver True
si __name__ == "__main__ :
de kivy.base importar runTouchApp runTouchApp(MyKeyboardListener()
callback = ninguna devolucin de llamada que se llamar cuando el teclado est liberad
o
keycode_to_string(valor) Convierte un nmero a una cadena keycode segn theKeyboard.
cdigos de tecla. Si el valor no se encuentra en los cdigos clave, devolver .
Release() llama a este mtodo para liberar el teclado actual. Esto asegurar que el
teclado ya no est conectado a su devolucin.
string_para_keycode(valor) Convierte una cadena en un nmero segn theKeyboard keyco
de.cdigos de tecla. Si el valor no se encuentra en los cdigos clave, devolver -1.
target = Ninguna meta que han solicitado el teclado
= None VKeyboard widget widget, si est permitido en la
ventana Configuration = ninguna ventana que el teclado est conectado demasiado
classkivy.core.window.WindowBase( kwargs) Bases: kivy.event.
WindowBase EventDispatcher Abstract Window es un widget para cualquier aplicacin
de ventana.
Parmetros sin bordes: str, uno de ( 0 , 1 )Configurar la ventana Estado fronteri
zo. Compruebe la documentacin de configuracin para obtener una explicacin ms detalla
da sobre los valores.
fullscreen: str, uno de ( 0 , 1 , auto , falso )Que la ventana completa. Veri
ficar theconfig documentacin para una explicacin ms detallada sobre los valores.
Anchura: intWidth de la ventana.
273

: la altura de la ventana. intHeight


mnimo intMinimum_width: ancho de la ventana (slo funciona para sdl2 win- dow provi
der).
minimum_intMinimum altura: la altura de la ventana (slo funciona para sdl2 win- d
ow provider).
Eventos en_motion: etype, cuando un newMotionEvent motioneventFired es enviado s
obre_TOUCH_down:dispararon cuando un nuevo evento tctil est iniciado.
Con_TOUCH_move:dispararon cuando ya existe un evento tctil cambia de ubicacin.
En_TOUCH_up:dispararon cuando ya existe un toque evento termina.
En_draw:dispararon cuando loskits est siendo extrada.
on_flip:dispararon cuando LOSKITS GL superficie est siendo volteado.
En_rotate: rotationFired cuando loskits es girado
sobre_close:dispararon cuando loskits est cerrado.
En_request_close:dispararon cuando el bucle de eventos quiere cerrar la ventana,
o si se pulsa la tecla escape y exit_en_escape es True. Si una funcin vinculada
a este caso devuelve True, 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.

Nuevo en la versin 1.9.0.


sobre_cursor_enter:dispararon cuando el cursor entra en la ventana.
Nuevo en la versin 1.9.1.
sobre_cursor_dejar:dispararon cuando el cursor sale de la ventana.
Nuevo en la versin 1.9.1.
sobre_MINIMIZE:dispararon cuando la ventana est minimizada.
Nuevo en la versin 1.9.2.
sobre_MAXIMIZE:dispararon cuando la ventana est maximizada.
Nuevo en la versin 1.9.2.
sobre_restore:dispararon cuando la ventana se restaura.
Nuevo en la versin 1.9.2.
sobre_hide:dispararon cuando la ventana est oculta.
Nuevo en la versin 1.9.2.
sobre_show:dispararon cuando la ventana se muestra.
Nuevo en la versin 1.9.2.
sobre el teclado: tecla modifierFired scancode, punto de cdigo, cuando el teclado
se utiliza para la entrada.
Ha cambiado en la versin 1.3.0: El parmetro unicode se ha descartado en favor de p
unto de cdigo, y se eliminar completamente en futuras versiones.
on_key_down: clave, scancode, codepointFired cuando una tecla pulsada.
Ha cambiado en la versin 1.3.0: El parmetro unicode se ha descartado en favor de p
unto de cdigo, y se eliminar completamente en futuras versiones.
on_key_up: clave, scancode, codepointFired cuando se suelta una tecla.
Ha cambiado en la versin 1.3.0: El parmetro unicode se ha descartado en favor de p
unto de cdigo, y se eliminar completamente en futuras versiones.
on_strFired dropfile: cuando un archivo se coloca en la aplicacin.
on_memorywarning:dispararon cuando la plataforma tiene un problema de memoria (i
OS /- droid principalmente) Puede escuchar este uno, y limpiar todo lo que pueda
.
Nuevo en la versin 1.9.0.
add_widget(widget, lona=None) Agregar un widget a una ventana

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()()).

Este mtodo slo se ha probado en un entorno unittest y no es adecuado para apli- ca


ciones.
De nuevo, no utilice este mtodo a menos que sepa exactamente lo que est haciendo!
Ppp() devuelven el DPI de la pantalla. Si la aplicacin no es compatible con cualq
uier bsqueda de PPP, slo devolver 96.
Advertencia: este valor no es multiplataforma. Usekivy.base.EventLoop.ppp
() en su lugar. flip Flip entre buffers
275

focus comprobar si o no la ventana tiene el foco actualmente.


Nuevo en la versin 1.9.1.
Focus es una de slo lectura :clase: ~kivy.properties.AliasProperty y su valor pre
determinado es True.
fullscreen Esta propiedad establece el modo de pantalla completa de la ventana.
Las opciones disponibles son: True, False, auto y falso . Verificar theconfig
documentacin para obtener explicaciones ms detalladas sobre estos valores.
fullscreen es anOptionProperty y el valor predeterminado es False.
Nuevo en la versin 1.2.0.
Nota: La opcin "falsos" ha quedado obsoleto, utilice en su lugar la propiedad the
borderless.
altura gira la altura de la ventana. La
altura es una lectura onlyAliasProperty.
hide() oculta la ventana. Este mtodo debe utilizarse en plataformas de escritorio
solamente.
Nuevo en la versin 1.9.0.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana y actualmente slo se a
dmite en las plataformas de escritorio.
keyboard_height Rerturns la altura del softkeyboard/IME en plataformas mviles. De
volver 0 si no en plataforma mvil o si IME no est activo.
Nuevo en la versin 1.9.0.
keyboard_height es una lectura onlyAliasProperty y predeterminados a 0.
maximizar() maximiza la ventana. Este mtodo debe utilizarse en plataformas de esc
ritorio solamente.
Nuevo en la versin 1.9.0.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana y actualmente slo se a
dmite en las plataformas de escritorio.
minimizar() minimiza la ventana. Este mtodo debe utilizarse en plataformas de esc
ritorio solamente.
Nuevo en la versin 1.9.0.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana y actualmente slo se a
dmite en las plataformas de escritorio.
minimum_altura la altura mnima para restringir la ventana.
Nuevo en la versin 1.9.1.
276

_height es mnima aNumericProperty y predeterminados a 0.


minimum_width el ancho mnimo para restringir la ventana.
Nuevo en la versin 1.9.1.
_width es aNumericProperty mnimo y el valor predeterminado es 0.
Lista de modificadores modificadores de teclado activa actualmente.
mouse_pos de posicin 2d del ratn dentro de la ventana.
Nuevo en la versin 1.2.0.
on_close( largs) evento llamado cuando la ventana est cerrada
en_cursor_enter( largs) evento llamado cuando el cursor entra en la ventana.

Nuevo en la versin 1.9.1.


Nota: Esta caracterstica requiere SDL2 proveedor de ventana.
on_cursor_deje( largs) evento llamado cuando el cursor sale de la ventana.
Nuevo en la versin 1.9.1.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana.
on_dropfile(Filename) evento llamado cuando un archivo se coloca en la aplicacin.
Advertencia: este evento actualmente trabaja con SDL2 proveedor de ventana en ve
ntana pygame proveedor y OS X con una versin revisada de pygame. Este evento se d
eja en su lugar para la evolucin posterior (ios, android, etc.)
nuevo en la versin 1.2.0.
sobre_flip() Voltear entre buffers (evento)
en_hide( largs) evento llamado cuando la ventana est oculta.
Nuevo en la versin 1.9.2.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana.
on_joy_axis(stickid, axisid, valor) evento llamado cuando un joystick tiene un p
alo u otro eje movido de
nuevo en la versin 1.9.0.
El_joy_ball(stickid, ballid, valor) evento llamado cuando un joystick tiene una
bola mueve
277

Nuevo en la versin 1.9.0.


El_joy_button_down(stickid, buttonid) evento llamado cuando un joystick ha presi
onado un botn
Nuevo en la versin 1.9.0.
El_joy_button_up(stickid, buttonid) evento llamado cuando un joystick ha lanzado
un botn
Nuevo en la versin 1.9.0.
El_joy_hat(stickid, hatid, valor) evento llamado cuando un joystick tiene un som
brero/dpad movido de
nuevo en la versin 1.9.0.
sobre_key_down(clave, scancode=none, punto de cdigo=none, modificador=none,
kwargs)
evento llamado cuando una tecla pulsada (los mismos argumentos que en el teclad
o)
en_key_up(clave, scancode=none, punto de cdigo=none, modificador=none, kwargs) even
to llamado cuando se suelta una tecla (mismos argumentos Como en_teclado)
sobre_keyboard(clave, scancode=none, punto de cdigo=none, modificador=none,
kwargs)
evento llamado cuando se utiliza el teclado.
Advertencia: algunos proveedores pueden omitir scancode, punto de cdigo y/o modif
icador.
En_MAXIMIZE( largs) evento llamado cuando la ventana est maximizada.
Nuevo en la versin 1.9.2.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana.
on_memorywarning() evento llamado cuando la plataforma tiene un problema de memo
ria. Su objetivo es borrar la memoria cach en su aplicacin tanto como puedas, suel
te el widget no utilizados, etc. en la
actualidad, este evento se desencadena nicamente desde SDL2 proveedor, para iOS y
Android.
Nuevo en la versin 1.9.0.
sobre_MINIMIZE( largs) evento llamado cuando la ventana est minimizada.
Nuevo en la versin 1.9.2.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana.
on_motion(etype, me) evento llamado cuando se recibe un evento de movimiento.
Parmetros de strOne etype: Comenzar , Actualizar , end me: Movimiento MotionE
ventThe evento actualmente despachado.
on_MOUSE_down(x, y, botn modificador) evento llamado cuando se usa el mouse (puls
ado/liberado)

en_MOUSE_move(x, y) modificadores de evento denominado cuando el ratn se mueve co


n los botones presionados
278

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

los padres de sus padres de esta ventana.


parent es instancia aObjectProperty y predeterminados a Ninguno. Cuando se cre, e
l padre est establecido en la propia ventana. Usted debe tener cuidado de que si
usted est haciendo una comprobacin recursiva.
raise_window() Subir el cristal. Este mtodo debe utilizarse en plataformas de esc
ritorio solamente.
Nuevo en la versin 1.9.1.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana y actualmente slo se a
dmite en las plataformas de escritorio.
release_all_Teclados() nuevo en la versin 1.0.8.
Esto asegurar que ningn teclado virtual / teclado de sistema es solicitado. Todas
las instancias se cerrar.
release_keyboard(target=None) nuevo en la versin 1.0.4.

Mtodo interno para el widget para liberar el teclado real. Checkrequest_keyboard(


) para entender cmo funciona.
remove_widget(widget) quitar un widget desde una ventana
request_keyboard(callback, target, input_type= text ) nuevo en la versin 1.0.4.
Mtodo widget interno para solicitar el teclado. Este mtodo es raramente requerido
por los usuarios finales como es manejado automticamente por la TextInput. Expone
mos en caso desea manejar el teclado manualmente para escenarios de entrada nica.
Un widget puede solicitar el teclado, indicando una devolucin de llamada cuando e
l teclado est re- arrendados (o tomadas por otro widget).
Parmetros: funcCallback de devolucin de llamada que se llamar cuando el teclado est
cerrado.
Esto puede ser porque alguien pidi al teclado o el usuario cerr.
target: WidgetAttach el teclado al destino especificado. Este debera ser el widge
t que pidi el teclado. Asegrese de que tiene un objetivo diferente adjunta a cada
teclado si est trabajando en modo multiusuario.
Nuevo en la versin 1.0.8.
_entrada stringChoose tipo: el tipo de teclado suave a peticin. Puede ser una de
texto , nmero , url , mail , datetime , tel , address .
Nota: Entrada_type actualmente slo es honrado en dispositivos mviles.
Nuevo en la versin 1.8.0.
Instancia ReturnAn ofKeyboard conteniendo la devolucin de llamada, destino y si l
a con- figuracin lo permite, instancia aVKeyboard adjunto como un archivo .widget
propiedad.
280

Nota: El comportamiento de esta funcin est fuertemente influenciado por el teclado


actual_mode.
Consulte la seccin de fichas de configuracin Config para obtener ms informacin.
restore() restaura el tamao y la posicin de una ventana maximizada o minimizada. E
ste mtodo debe utilizarse en plataformas de escritorio solamente.
Nuevo en la versin 1.9.0.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana y actualmente slo se a
dmite en las plataformas de escritorio.
get/set de rotacin rotacin de los contenidos de la ventana. Puede ser una de 0, 90
, 180, 270 grados.
Captura de pantalla(name= screenshot{:04d}.png") Guardar la imagen visualizada e
n un archivo
set_icon(Filename) establecer el icono de la ventana.
Nuevo en la versin 1.0.5.
set_title (ttulo) establece el ttulo de la ventana.
Nuevo en la versin 1.0.5.
set_vkeyboard_class (CLS) nuevo en la versin 1.0.8.
Establezca la clase VKeyboard utilizar. Si se establece en Ninguno, se utilizar e
l kivy.uix.vkeyboard.VKeyboard.
show() muestra la ventana. Este mtodo debe utilizarse en plataformas de escritori
o solamente.
Nuevo en la versin 1.9.0.
Nota: Esta caracterstica requiere SDL2 proveedor de ventana y actualmente slo se a
dmite en las plataformas de escritorio.
show_cursor ajuste si o no se muestra el cursor en la ventana.
Nuevo en la versin 1.9.1.
show_cursor es aBooleanProperty y su valor predeterminado es True.
tamao obtener el tamao de la ventana rota. Ifrotation est definida, entonces el tam
ao cambiar para reflejar la rotacin.
softinput_mode especifica el comportamiento del contenido de la ventana en la pa
ntalla del teclado de software en plataformas mviles. Puede ser una de , pan ,
Escala , resize o infra_target . Sus efectos se enumeran a continuacin.

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.

Este efecto de desplazamiento amortiguado theoverscroll utilizar para calcular el


valor de desplazamiento y ralentiza volviendo al lmite superior o inferior.
classkivy.effects.dampedscroll.DampedScrollEffect( kwargs) Bases: kivy.effects.scro
ll.ScrollEffect
DampedScrollEffect clase. Consulte la documentacin del mdulo para obtener ms inform
acin.
edge_Edge amortiguacin amortiguacin.
edge_amortiguacin aNumericProperty y predeterminados a 0,25
min_overscroll un overscroll menos de esta cantidad ser normalizada a 0.
Nuevo en la versin 1.8.0.
_mn es overscroll aNumericProperty y predeterminados a .5.
Valor_redonda Si es True, cuando el movimiento se detiene,el valor se redondea a
l entero ms prximo.
Nuevo en la versin 1.8.0.
_value es aBooleanProperty redonda y su valor predeterminado es True.
285

Spring_Constant Spring constante.


primavera_constant aNumericProperty y predeterminados a 2.0
25.2 efecto cintico
nuevo en la versin 1.7.0.
TheKineticEffect es la clase base que se utiliza para calcular la velocidad de u
n movimiento. Cuando el movimiento es terminado, el efecto se calcule la posicin
del movimiento segn la velocidad y reducir la velocidad con la friccin. El movimie
nto parada hasta que la velocidad es 0.
Conceptualmente, el uso podra ser:
&gt;&gt;&gt; Efecto = KineticEffect() &gt;&gt;&gt; Efecto.start(10) &gt;&gt;&gt;
Efecto.Update(15) &gt;&gt;&gt; Efecto.Update(30) &gt;&gt;&gt; Efecto.stop(48)
a lo largo del tiempo, tendr que iniciar un movimiento de un valor, actualizar y
detener el movimiento. En este momento, obtendr el valor de movimiento intoKineti
cEffect.value. En el ejemplo que he escrito manualmente, la velocidad calculada
ser:
&gt;&gt;&gt; Efecto.velocity 3.1619100231163046
despus de varias interacciones de reloj, la velocidad disminuir segn toKineticEffec
t.La friccin.
El valor calculado se almacenarn inKineticEffect.value. La salida de este valor p
uede ser:
46.30038145219605 54.58302451968686 61.9229016256196 # ...
classkivy.effects.kinetic.KineticEffect( kwargs) Bases: kivy.event.
efecto cintico de la clase EventDispatcher. Consulte la documentacin del mdulo para
obtener ms informacin.
Cancel() cancelar un movimiento. Esto puede ser utilizado en el caso de stop() n
o puede ser llamado. Se restablecer es_manual a falso, y calcular el movimiento s
i la velocidad es &gt; 0. La
friccin friccin para aplicar sobre la velocidad la
velocidad es aNumericProperty y predeterminados a 0,05.
Es_manual indican si un movimiento en curso (True) o no (False). La
velocidad es aBooleanProperty y su valor por defecto es false.
max_history Ahorre hasta max_historia valor de movimiento en la historia. Esto e
s usado para calcular correctamente la velocidad segn el movimiento.
max_historia es aNumericProperty y predeterminados a 5.
286

min_Distancia La distancia mnima para un movimiento a velocidad diferente de cero

.
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

Basado en el efecto cintico, theScrollEffect limitar el movimiento de lmites determ


inados por sus propiedades Mn y Mx. Si el movimiento excede estos lmites, se calcul
ar la cantidad de overscroll e intente volver al valor de uno de los lmites.
Esto es muy til para la implementacin de una lista desplazable. De hecho, hemos ut
ilizado esta clase como un efecto de base para nuestro widget ScrollView.
classkivy.effects.scroll.ScrollEffect( kwargs) Bases: kivy.effects.kinetic.KineticE
ffect
ScrollEffect clase. Consulte la documentacin del mdulo para obtener ms informacin.
desplazamiento distancia acumulativa del movimiento durante la interaccin. Esto s
e utiliza para determinar si el movemenent es un arrastre (ms thandrag_threshold)
. o no el
desplazamiento es aNumericProperty y predeterminados a 0.
drag_umbral mnimo la distancia a recorrer antes de que el movimiento es considera
do como un arrastre.
Velocidad es aNumericProperty y predeterminados a 20sp.
lmite mximo a utilizar para desplazarse.
max es aNumericProperty y predeterminados a 0
min de lmite mnimo para utilizar para desplazarse.
min es aNumericProperty y predeterminados a 0.
overscroll valor calculado cuando el usuario se desplaza a lo largo de-es decir,
queda fuera de los lmites.
overscroll es aNumericProperty y predeterminados a 0.
reset(pos) (interno) restablecer el valor y la velocidad a la pos. Se utiliza pr
incipalmente cuando los lmites se comprueban.
Desplcese valor calculado para el desplazamiento. Este valor es diferente de kivy

.effects.kinetic.KineticEffect.valor que devolver a uno de los lmites mn/mx.


desplazamiento es aNumericProperty y predeterminados a 0.
target_widget widget adjuntar a este efecto. Aunque esta clase no hacer cambios
al target_widget por defecto, las subclases pueden usarlo para cambiar los grfico
s o aplicar transformaciones personalizadas.
target_widget es aObjectProperty y predeterminados a Ninguno.
288

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

desde la kivy require() en el sentido de que siempre se utilice la misma versin p


rincipal de especificar incluso si existe una nueva versin (grandes) est disponibl
e. Esto es porque no podemos hacer la misma garanta de compatibilidad hacia atrs q
ue hacemos con Kivy para extensiones de terceros. Usted todava obtener correccion
es y optimizaciones que no rompa la compatibilidad a travs de actualizaciones men
ores de la versin de la extensin.
La funcin devolver el mdulo cargado como un mdulo Python objeto y puede enlazarlo a
un nombre de su eleccin. Esto evita enfrentamientos con mdulos con el mismo nombre
que puede ser instalado en un directorio del sistema.
Ejemplo de uso de esta funcin:
de kivy.ext de importacin de carga myextension = carga( myextension , (2, 1)) # p
uede utilizar ahora myextension como si hubiese hecho Importar myextension #
, pero con el beneficio aadido de usar la versin correcta.
Parmetros: strThe extname el nombre exacto de la extensin que desea utilizar.
Versin: 2-tuple de tupla intsA del formulario (mayores, menores), donde son mayor
es y menores ints que especifican el nmero de versin principal y secundaria para l
a ex- tensin, por ejemplo (1, 2) sera similar a la 1.2. Es importante sealar que en
tre versiones menores, la compatibilidad est garantizada, pero entre versiones ma
yores no lo es. Es decir, si cambia su extensin en un atrs incom- son compa- tible
s, aumentar el nmero de versin principal (y restablecer el menor a 0).
Si usted acaba de hacer una correccin o agregar una opcional, caracterstica compat
ible con versiones anteriores, puede aumentar el nmero de versin menor. Si la apli
cacin requiere la versin (1, 2), cada una de las versiones que comienzan con ese nm
ero de versin ser ok y por defecto la ltima versin ser elegido. Los dos principales y
secundarias ints puede estar en el rango (0, infinito).
kivy.ext.descomprima_extensions() Descomprime Kivy extensiones. Slo uso interno:
no utilizarla a menos que sepa lo que est haciendo y realmente desea provocar la
instalacin de nuevas extensiones.
De su archivo para ser reconocidos como una extensin, tiene que cumplir unos requ
isitos:
Es necesario que el archivo tenga la extensin .kex para hacer la distincin entre una
extensin Kivy y un archivo zip normal claro.
exigimos que la .kex archivos de extensin se ponga en cualquiera de los directorios
que aparecen en ampliar- SION_Paths que normalmente es ~/.kivy/extensiones y amp
liaciones/ dentro de la base de kivy di- rectora. No miramos para extensiones en
sys.path o en otras partes del sistema.
exigimos que la extensin Kivy se comprimen de manera que el mdulo zipfile Python pu
eda extraer correctamente.
exigimos que la extensin interna obedece a la poltica Kivy formato de extensin, que
tiene este aspecto:
|----/ | myextension __init__.py |-- data/
__init__.py es el entrypoint principal a la prrroga. Todos los nombres que deben
ser capaces nosotros- cuando la extensin es cargada necesitan ser exportado (es d
ecir, disponible) en el espacio de nombres de ese archivo.
Cmo la extensin tiene acceso al cdigo de la biblioteca que contiene (ya sea puro o
cdigo binario de Python) corresponde a la extensin. Por ejemplo, podra haber otro md
ulo Python adyacente al__init__.py a partir del cual la__init__.py importa los n
ombres utilizable que desea exponer.
290

exigimos que la versin de la extensin se especificarn en el setup.py que se cre- ado


s por la extensin Kivy asistente y que el formato de especificacin de la versin tal
como se explica en load() se utiliza.
291

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

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.BindTexture Bases: kivy.graphics.INSTRUCTIONS.ContextInstruct
ion
BindTexture instrucciones grficas. La instruccin BindTexture enlazar una textura y
habilitar GL_Texture_2D para su posterior elaboracin.
296 parmetros de

textura: Textura TextureSpecifies para enlazar con el ndice dado.


Fuente Set/get de la fuente (nombre de archivo) para cargar para la textura.
classkivy.graphics.BorderImage Bases: kivy.graphics.vertex_Instructions.
Un rectngulo 2d imagen de borde. El comportamiento de la imagen de borde es simil
ar al concepto 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.
Si el tamao del BorderImage es menor que la suma de sus fronteras, horizontal o v
erticalmente, y esta propiedad est establecida en True, las fronteras sern redimen
sionados para acomodar el tamao menor.
auto_propiedad de escala para establecer si las esquinas se ajusta automticamente
cuando el BorderImage es demasiado pequeo.
propiedad Border para Obtencin/configuracin de la frontera de la clase.
display_propiedad Border para Obtencin/configuracin de la frontera mostrar tamao.
classkivy.graphics.Bases: kivy Callback.graphics.INSTRUCTIONS.Instrucciones
nuevas en la versin 1.0.4.
Un Callback es una instruccin que se llamar cuando se realiza la operacin de dibujo
. Al agregar instrucciones a un lienzo, puede hacerlo:
con auto.Canvas:
Color(1, 1, 1) rectngulo(pos=auto.pos, size=self.size) llamada(self.mi_callback)
la definicin de la funcin callback debe ser:
def mi_callback(self, instr):
print( he sido llamado!")
Advertencia: Tenga en cuenta que si realiza muchos y/o costosas llamadas a devol
uciones de llamada, usted podra poten- considerablemente ralentizar significativa
mente el rendimiento de la representacin.
La actualizacin de su lienzo no ocurren hasta que ocurra algo nuevo. A partir de
la devolucin de llamada, usted puede pedir una actualizacin:
con self.Canvas:
self.cb = Callback(self.mi_callback) # despus en el cdigo self.cb.ask_update()
si utiliza la clase de devolucin de llamada para llamar a mtodos de representacin d
e otro toolkit, usted tendr problemas con el contexto de OpenGL. El estado OpenGL
pueden haber sido manipulados por el otro toolkit, y tan pronto como el flujo d
el programa vuelve a Kivy, se acaba de romper. Usted puede tener tropiezos, cadas
,
297

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

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
entonces, la opacidad se aplica sobre el sombreado como:
vec4(1.0, 1.0, 1.0, opacidad);
frag_color = color
.graphics.classkivy CanvasBase Bases: kivy.graphics.INSTRUCTIONS.InstructionGrou
p
CanvasBase proporciona el contexto manager mtodos para theCanvas.
classkivy.graphics.Bases de Color: kivy.graphics.INSTRUCTIONS.ContextInstruction
instrucciones para establecer el estado de color para cualquier vrtices se dibuja
despus de l.
Esto representa un color entre 0 y 1, sino que se aplican como un multiplicador
de la textura de cualquier vrtice siguiendo las instrucciones en un lienzo. Si no
se establece la textura, el vrtice instruccin toma el color exacto de la instrucc
in de color.
Por ejemplo, si un rectngulo tiene una textura con color uniforme(0.5, 0.5, 0.5,
1.0) y el anterior tiene color rgba=(1, 0,5, 2, 1), el color ser visible real (0.
5, 0.25, 1.0, 1.0) desde la instruccin de color se aplica como un multiplicador p
ara cada 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:
299

<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

: int, 300 segmentos predeterminados a 180definir cuntos segmentos son necesarios


para dibujar la elipse- cin. El dibujo ser ms suave si tiene muchos segmentos.
ngulo_start: int, por defecto 0especifica el ngulo inicial, en grados, de la porcin
de disco.
ngulo_final: int, por defecto 360 especifica el ngulo final, en grados, de la porc
in de disco.
ngulo_end extremo en ngulo de la elipse en grados, por defecto 360.
ngulo_start ngulo inicial de la elipse en grados, por defecto es 0.
segmentos propiedad para obtener/establecer el nmero de segmentos de la elipse.
classkivy.graphics.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) -&gt; 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

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) formato.
get_pixel_color() obtiene el color del pxel con coordenadas de ventana especifica
do wx, Wy. Se devuelve el resultado en formato RGBA.
Nuevo en la versin 1.8.0.
Obtener la textura pxeles pxeles, en formato RGBA, slo unsigned byte. El origen de
la imagen est en la parte inferior izquierda.
Nuevo en la versin 1.7.0.
Release () Liberar el framebuffer (Desvincular).
remove_RELOAD_observador() Quitar una devolucin de llamada desde la lista de obse
rvadores, ha aadido previamente byadd_RELOAD_observador().
Nuevo en la versin 1.2.0. El
tamao del framebuffer, (width, height) formato.
Si cambia el tamao, el framebuffer contenido ser perdido.
Volver el framebuffer textura textura
exceptionkivy.graphics.GraphicException Bases: EXCEPTION
excepcin planteada cuando un error de grficos es despedido.
classkivy.graphics.Bases de instruccin: 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.InstructionGroup Bases: kivy.graphics.INSTRUCTIONS.
Grupo de instruccin ofInstructions. Permite la adicin y eliminacin de instrucciones
grficas. Puede utilizarse directamente como sigue:
302

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 desde nuestra lista.
remove_group() Quitar allInstructions con un nombre de grupo especfico.
classkivy.graphics.Line Bases: kivy.graphics.INSTRUCTIONS.VertexInstruction
una lnea 2d.
Dibujo de una lnea puede hacerse fcilmente:
con auto.Canvas:
Lnea(puntos=[100, 100, 200, 100, 100, 200], width=10)
La lnea tiene 3 modos de dibujo interno que debe ser consciente para resultados pt
imos:
1.Si la anchura es de 1,0, entonces la norma GL_line de dibujo OpenGL ser utiliza
da.
dash_length y dash_offset funcionar, mientras que las propiedades de la tapa y no
tienen ningn significado comn aqu.
2.Si thewidth es mayor que 1.0, entonces un mtodo de dibujo personalizado, basado
en la triangulacin, se utilizar anddash dash_length_offset no funcionan en este m
odo. Adems, si el color actual tiene un valor alfa inferior a 1.0, una galera de sm
bolos se utiliza internamente para dibujar la lnea.

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

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.
304

ha cambiado en la versin 1.0.8: dash_offset y dash_length se han aadido.


Ha cambiado en la versin 1.4.1: anchura, tapa abatible, cap_PRECISION JOINT_preci
sion, cerrar, elipse, rectngulo se han aadido.
Ha cambiado en la versin 1.4.1: curva de Bezier,_Precision se han aadido
bezier. Utilice esta propiedad para construir una lnea curva, sin calcular thepoi
nts. Slo puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de 2n elementos, siendo n el nmero de puntos.
Uso:
lnea curva(=(x1, y1, x2, y2, x3, y3)
nuevo en la versin 1.4.2.
Nota: los clculos de lneas Bzier son baratos para un bajo nmero de puntos, pero la c
omplejidad es cuadrtica, as las lneas con un montn de puntos puede ser muy caro cons
truir, usar con cuidado!
Nmero de precisin_bezier de iteracin para dibujar la curva entre 2 segmentos, el va
lor por defecto es 180. La curva_precision debe ser al menos 1.
Nuevo en la versin 1.4.2.
Determinar la tapa de la tapa de la lnea, cambia a round . Puede ser una de nin
guno , Plaza o round
nuevo en la versin 1.4.1.
cap_precision nmero de iteracin para dibujar la "ronda" de la PAC, por defecto 10.
El cap_precisin debe ser al menos 1.
Nuevo en la versin 1.4.1.
Crculo Utilice esta propiedad para construir un crculo, sin calcular los puntos. Sl
o puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de (centro_x, en el centro, radius_y_start, ngulo
ngulo_final, seg- mentos):
centro_x y centro_y constituyen el centro del crculo radio representan el radio del
crculo (opcional) y ngulo ngulo_start_end estn en grado. El valor predeterminado es
0 y 360.
(opcional) segmentos es la precisin de la elipse. La propiedad defaultvalue se cal
cula a partir de la gama entre el ngulo.
Tenga en cuenta que es hasta usted paracerrar el crculo o no.
Por ejemplo, para la construccin de un simple elipse, en python:
# simple lnea Circle (Crculo=(150, 150, 50))
# slo de 90 a 180 grados en lnea(crculo=(150, 150, 50, 90, 180))
# slo de 90 a 180 grados, con algunos segmentos de lnea Circle=(150, 150, 50, 90,
180, 20)
305

Nuevo en la versin 1.4.1.


Cerrar Si es True, la lnea ser cerrada.
Nuevo en la versin 1.4.1.
dash_propiedad length para obtener/ajuste de la longitud de los guiones en la cu
rva de
nuevo en la versin 1.0.8.
dash_offset propiedad para obtener/ajuste del desplazamiento entre los guiones e
n la curva de

nuevo en la versin 1.0.8.


Elipse Utilice esta propiedad para construir una elipse, sin calcular thepoints.
Slo puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de (x, y, width, height, ngulo ngulo_start_end, se
gmentos):
x e y representan la parte inferior izquierda de la elipse la anchura y la altura
representan el tamao de la elipse (opcional) y ngulo ngulo_start_end estn en grado. E
l valor predeterminado es 0 y 360.
(opcional) segmentos es la precisin de la elipse. La propiedad defaultvalue se cal
cula a partir de la gama entre el ngulo.
Tenga en cuenta que es hasta usted paracerrar la elipse o no.
Por ejemplo, para la construccin de un simple elipse, en python:
# simple lnea(elipse elipse=(0, 0, 150, 150))
# slo de 90 a 180 grados en lnea(elipse=(0, 0, 150, 150, 90, 180))
# slo de 90 a 180 grados, con algunos segmentos de lnea(elipse=(0, 0, 150, 150, 90
, 180, 20)
nuevo en la versin 1.4.1.
Determinar conjunta la combinacin de la lnea, cambia a round . Puede ser una de
ninguno , round , biselar , miter .
Nuevo en la versin 1.4.1.
_precision conjunta nmero de iteracin para dibujar el conjunto "redonda", cambia a
10. La Junta_precision debe ser al menos 1.
Nuevo en la versin 1.4.1.
Puntos propiedad para obtener/configuracin de puntos de la lnea de
Advertencia: esto siempre reconstruir la totalidad de los grficos de la nueva lis
ta de puntos. Puede ser muy costoso de CPU.
Rectngulo Utilice esta propiedad para construir un rectngulo, sin calcular thepoin
ts. Slo puede establecer esta propiedad, no lo consiguen.
306

El argumento debe ser una tupla de (x, y, width, height):


x e y representan la posicin inferior izquierda del rectngulo la anchura y la altura
representan el tamao de la lnea se cierra automticamente.
Uso:
Lnea(Rectangle=(0, 0, 200, 200)
nuevo en la versin 1.4.1.
_rectngulo redondeado Utilice esta propiedad para construir un rectngulo, sin calc
ular thepoints. Slo puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de una de las siguientes formas:
(x, y, width, height, esquina_radius) (x, y, width, height, esquina_radius, resolu
cin) (x, y, width, height, esquina_radius1, esquina_radius2, esquina_radius3, esqu
ina_radius4) (x, y, width, height, esquina_radius1, esquina_radius2, esquina_radi
us3, esquina_radius4, resolucin) x e y representan la posicin inferior izquierda de
l rectngulo la anchura y la altura representan el tamao esquina_radius es el nmero de
pxeles entre dos bordes y el centro del arco de crculo unindose es la resolucin nump
er del segmento de lnea que se utilizar para dibujar el arco de crculo en cada esqu
ina (por defecto, 30) La lnea se cierra automticamente.
Uso:
Lnea(_rectngulo redondeado=(0, 0, 200, 200, 10, 20, 30, 40, 100)
nuevo en la versin 1.9.0.
Ancho determinan el ancho de la lnea, por defecto 1.0.
Nuevo en la versin 1.4.1.
classkivy.graphics.lneas suavizadas Bases: kivy.graphics.vertex_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
.graphics.classkivy MatrixInstruction Bases: kivy.graphics.INSTRUCTIONS.ContextI
nstruction
clase base para matriz de instruccin sobre el lienzo.
307

matrix Matrix propiedad. Matriz desde el mdulo de transformacin. Ajuste de la matr


iz utilizando esta propiedad cuando se realiza un cambio es importante porque le
notificar el contexto acerca de la actualizacin. El
nombre de pila de la matriz para utilizar la pila. Puede ser modelview_mat o
proyeccin_mat .
Nuevo en la versin 1.6.0.
classkivy.graphics.Bases de malla: kivy.graphics.INSTRUCTIONS.VertexInstruction
una malla 2d.
En OpenGL ES 2.0 y en nuestra aplicacin de grficos, no puede tener ms de 65.535 ndic
es.
Una lista de vrtices se describe como:
vrtices = [x1, y1, U1, v1, x2, y2, U2, v2, ...] | | | | +---- i1 ----+---- + i2 ---+
Si desea dibujar un tringulo, aadir 3 vrtices. A continuacin, puede hacer una lista
de ndices como sigue:
indices = [0, 1, 2] Nuevo en la versin 1.1.0.
Parmetros: vertices listalista de vrtices en el formato (x1, y1, U1, v1, x2, y2, U
2, v2...).
ndices: Listalista de ndices en el formato (i1, i2, i3...).
Modo: strMode del vbo. El modo de comprobacin para obtener ms informacin. Los valor
es predeterminados de puntos .
fmt: Listael formato de vrtices, de forma predeterminada, cada vrtice est descrito
por 2D co- ordenadas (x, y) y coordenadas de textura 2D (u, v). Cada elemento de
la lista debe ser una tupla o una lista, de la forma (nombre_variable, tamao y t
ipo) que permitir la asignacin de datos al vrtice glsl instrucciones.
[(b v_pos , 2, b flotante ), b v_tc , 2, b flotante )] permitir usando el atribut
o vec2 v_pos; atributo vec2 v_tc; en glsl s Vertex Shader.
Vertex ndices ndices utilizados para especificar el orden al dibujar la malla.
MODO VBO modo utilizado para dibujar vrtices/ndices. Puede ser uno de los "puntos"
, "lnea_strip , lnea_loop , lneas , tringulos , tringulo_strip o tringulo_fan .
La
lista de vrtices de x, y u, v coordenadas utilizadas para construir la malla. Aho
ra, la instruccin de malla no te permite cambiar el formato de los vrtices, lo que
significa que slo uno + x, y coordenadas de textura.
classkivy.graphics.Punto Bases: kivy.graphics.INSTRUCTIONS.VertexInstruction
una lista de puntos 2d. Cada punto est representado como un cuadrado con una anch
ura/altura de 2 veces el tamao de punto.
Parmetros de puntos: Listalista de puntos en el formato (x1, y1, x2, y2, ...), do
nde cada par de coor- dinates especifica el centro de un nuevo punto.
308

: 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.

Advertencia: a partir de la versin 1.0.7, vrtice instruccin tienen un lmite de 65.53


5 vrtices (ndices de vrtice para ser exactos). 2 entradas en la lista (x, y) se con
vertirn en 4 vrtices. As que el lmite interior de punto() de la clase es de 2^15-2.
punto_add() agrega un punto a la lista currentpoints.
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.
Puntos/Ajustes de propiedad para obtener los puntos centrales en la lista de pun
tos. Cada par de coordenadas especifica el centro de un nuevo punto.
Propiedad pointsize para Obtencin/configuracin de tamao de punto. El tamao se mide d
esde el centro hasta el borde, de manera que un valor de 1,0 significa que el ta
mao real ser de 2.0 x 2.0.
classkivy.graphics.PopMatrix Bases: kivy.graphics.INSTRUCTIONS.ContextInstructio
n
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.PushMatrix Bases: kivy.graphics.INSTRUCTIONS.ContextInstructi
on
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.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.Bases: rectngulo kivy.graphics.INSTRUCTIONS.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.
309

classkivy.graphics.RenderContext Bases: kivy.graphics.INSTRUCTIONS.Canvas


el contexto render almacena toda la informacin necesaria para la elaboracin, a sab
er:
El sombreador de vrtices El fragmento shader la textura predeterminada El estado pila
(color, textura, Matrix...) Retorno de sombreado el sombreado adjunta al repres
entar el contexto.
use_parent_modelview Si es True, la matriz modelview matrix ser utilizado.
Nuevo en la versin 1.7.0.
Antes:
rc[ modelview_mat ] = window.render_contexto[ modelview_mat ]
Ahora:
rc = RenderContext(use_parent_modelview=True)
use_parent_proyeccin Si es True, el padre se utilizar la matriz de proyeccin.
Nuevo en la versin 1.7.0.
Antes:
rc[ proyeccin_mat ] = window.render_contexto[ proyeccin_mat ]
Ahora:
rc = RenderContext(use_parent_proyeccin=True)
classkivy.graphics.Gire Bases: kivy.graphics.context_Instructions.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.
El formato del origen puede ser cualquiera (x, y) o (x, y, z).
310

set() ajusta el ngulo y eje de rotacin.


&gt;&gt;&gt; rotationobject.set(90, 0, 0, 1)
obsoleto desde la versin 1.7.0: El mtodo set() no utiliza la propiedad neworigin.
classkivy.graphics.Escala Bases: kivy.graphics.context_Instructions.Transformar
la
instruccin para crear una transformacin de escala no uniforme.
Crear usando uno o tres argumentos:
escala(s) # escalar los tres ejes de la misma escala(x, y, z) # escalar los ejes
independientemente
obsoleto desde la versin 1.6.0: Deprecated escala nica propiedad en favor de x, y,
z, eje xyz inde- factores de escala colgante.
origen Origen de la escala.
Nuevo en la versin 1.9.0.
El formato del origen puede ser cualquiera (x, y) o (x, y, z).
Escala de propiedad para obtener/ajuste de la escala.
Obsoleto desde la versin 1.6.0: Deprecated en favor de por propiedades de escala
del eje x,y,z, xyz, etc.
x/propiedad para obtener el ajuste de la escala en el eje x.
Ha cambiado en la versin 1.6.0.
xyz 3 Escala de tupla vector en 3D en los ejes x, y y z.
Ha cambiado en la versin 1.6.0.
y propiedad para obtener/configurar la escala en el eje y.
Ha cambiado en la versin 1.6.0.
z/propiedad para obtener el ajuste de la escala en el eje z.
Ha cambiado en la versin 1.6.0.
classkivy.graphics.StencilPop Bases: kivy.graphics.instrucciones.La instruccin
pop la galera pila. Consulte la documentacin del mdulo para obtener ms informacin.
classkivy.graphics.StencilPush Bases: kivy.graphics.instrucciones.La instruccin
push la galera pila. Consulte la documentacin del mdulo para obtener ms informacin.
classkivy.graphics.StencilUse Bases: kivy.graphics.instrucciones.La instruccin
Use current stencil buffer como una mscara. Compruebe la documentacin del mdulo par
a obtener ms informacin.
311

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.

g componente verde, entre 0 y 1.


r componente rojo, 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

Nuevo en la versin 1.6.0.


classkivy.graphics.LoadIdentity Bases: kivy.graphics.INSTRUCTIONS.ContextInstruc
tion
cargar la matriz identidad en la matriz especificada por las instrucciones de pi
la stack (propiedad de- fallo= modelview_mat )
nuevo en la versin 1.6.0.
Nombre de pila de la matriz para utilizar la pila. Puede ser modelview_mat o

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

remove_group() Quitar allInstructions con un nombre de grupo especfico.


classkivy.graphics.INSTRUCTIONS.ContextInstruction Bases: kivy.graphics.instrucc
iones.La instruccin 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.INSTRUCTIONS.VertexInstruction Bases: kivy.graphics.INSTRUCTI
ONS.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:
<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
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

entonces, la opacidad se aplica sobre el sombreado como:


vec4(1.0, 1.0, 1.0, opacidad);
frag_color = color
classkivy.graphics.INSTRUCTIONS.CanvasBase Bases: kivy.graphics.INSTRUCTIONS.Ins
tructionGroup
CanvasBase proporciona el contexto manager mtodos para theCanvas.

classkivy.graphics.INSTRUCTIONS.RenderContext Bases: kivy.graphics.INSTRUCTIONS.


Canvas
el contexto render almacena toda la informacin necesaria para la elaboracin, a sab
er:
El sombreador de vrtices El fragmento shader la textura predeterminada El estado pila
(color, textura, Matrix...) Retorno de sombreado el sombreado adjunta al repres
entar el contexto.
use_parent_modelview Si es True, la matriz modelview matrix ser utilizado.
Nuevo en la versin 1.7.0.
Antes:
rc[ modelview_mat ] = window.render_contexto[ modelview_mat ]
Ahora:
rc = RenderContext(use_parent_modelview=True)
use_parent_proyeccin Si es True, el padre se utilizar la matriz de proyeccin.
Nuevo en la versin 1.7.0.
Antes:
rc[ proyeccin_mat ] = window.render_contexto[ proyeccin_mat ]
Ahora:
rc = RenderContext(use_parent_proyeccin=True)
classkivy.graphics.instrucciones.Bases: kivy Callback.graphics.INSTRUCTIONS.Inst
rucciones
nuevas en la versin 1.0.4.
Un Callback es una instruccin que se llamar cuando se realiza la operacin de dibujo
. Al agregar instrucciones a un lienzo, puede hacerlo:
con auto.Canvas:
Color(1, 1, 1) rectngulo(pos=auto.pos, size=self.size) llamada(self.mi_callback)
la definicin de la funcin callback debe ser:
318

def mi_callback(self, instr):


print( he sido llamado!")
Advertencia: Tenga en cuenta que si realiza muchos y/o costosas llamadas a devol
uciones de llamada, usted podra poten- considerablemente ralentizar significativa
mente el rendimiento de la representacin.
La actualizacin de su lienzo no ocurren hasta que ocurra algo nuevo. A partir de
la devolucin de llamada, usted puede pedir una actualizacin:
con self.Canvas:
self.cb = Callback(self.mi_callback) # despus en el cdigo self.cb.ask_update()
si utiliza la clase de devolucin de llamada para llamar a mtodos de representacin d
e otro toolkit, usted tendr problemas con el contexto de OpenGL. El estado OpenGL
pueden haber sido manipulados por el otro toolkit, y tan pronto como el flujo d
el programa vuelve a Kivy, se acaba de romper. Usted puede tener tropiezos, cadas
, agujeros negros podran ocurrir, etc. para evitar que esto suceda, puede activar
la opcin thereset_context. Se restablecer el estado de contexto OpenGL para hacer
la 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.
28.4 Contexto instrucciones
instrucciones representan el contexto no elementos grficos tales como:
Matrix (manipulaciones PopMatrix PushMatrix, traducir, rotar, escalar, MatrixIns
truction)

manipulacin del color (Color)


textura enlaces (BindTexture)
ha cambiado en la versin 1.0.8: El grosor de lnea de la instruccin ha sido eliminad
o. No funcionaba antes y que realmente no tienen ninguna aplicacin de trabajo. Ne
cesitamos hacer ms experimentacin para arreglarla.
Verificar el bug #207 para ms informacin.
classkivy.graphics.context_Instructions.Color: Bases kivy.graphics.INSTRUCTIONS.
ContextInstruction
instrucciones para establecer el estado de color para cualquier vrtices se dibuja
despus de l.
Esto representa un color entre 0 y 1, sino que se aplican como un multiplicador
de la textura de cualquier vrtice siguiendo las instrucciones en un lienzo. Si no
se establece la textura, el vrtice instruccin toma el color exacto de la instrucc
in de color.
Por ejemplo, si un rectngulo tiene una textura con color uniforme(0.5, 0.5, 0.5,
1.0) y el anterior tiene color rgba=(1, 0,5, 2, 1), el color ser visible real (0.
5, 0.25,

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

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.context_Instructions.BindTexture Bases: kivy.graphics.INSTRUC

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

El formato del origen puede ser cualquiera (x, y) o (x, y, z).


set() ajusta el ngulo y eje de rotacin.
&gt;&gt;&gt; rotationobject.set(90, 0, 0, 1)
obsoleto desde la versin 1.7.0: El mtodo set() no utiliza la propiedad neworigin.
classkivy.graphics.context_Instructions.Escala Bases: kivy.graphics.context_Inst
ructions.Transformar la
instruccin para crear una transformacin de escala no uniforme.
Crear usando uno o tres argumentos:
escala(s) # escalar los tres ejes de la misma escala(x, y, z) # escalar los ejes
independientemente
obsoleto desde la versin 1.6.0: Deprecated escala nica propiedad en favor de x, y,
z, eje xyz inde- factores de escala colgante.
origen Origen de la escala.
Nuevo en la versin 1.9.0.
El formato del origen puede ser cualquiera (x, y) o (x, y, z).
Escala de propiedad para obtener/ajuste de la escala.
Obsoleto desde la versin 1.6.0: Deprecated en favor de por propiedades de escala
del eje x,y,z, xyz, etc.
x/propiedad para obtener el ajuste de la escala en el eje x.
Ha cambiado en la versin 1.6.0.
xyz 3 Escala de tupla vector en 3D en los ejes x, y y z.
Ha cambiado en la versin 1.6.0.
y propiedad para obtener/configurar la escala en el eje y.
Ha cambiado en la versin 1.6.0.
z/propiedad para obtener el ajuste de la escala en el eje z.
Ha cambiado en la versin 1.6.0.
classkivy.graphics.context_Instructions.Traducir Bases: kivy.graphics.context_In

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

x 322/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.context_Instructions.MatrixInstruction Bases: kivy.graphics.I
NSTRUCTIONS.ContextInstruction
clase base para matriz de instruccin sobre el lienzo.
matrix Matrix propiedad. Matriz desde el mdulo de transformacin. Ajuste de la matr
iz utilizando esta propiedad cuando se realiza un cambio es importante porque le
notificar el contexto acerca de la actualizacin. El
nombre de pila de la matriz para utilizar la pila. Puede ser modelview_mat o
proyeccin_mat .
Nuevo en la versin 1.6.0.
28.5 La gestin de contexto
nuevo en la versin 1.2.0.
Esta clase administra un registro de todos los grficos creados de instrucciones.
Tiene la capacidad para vaciar y eliminarlos.
Puede leer ms acerca de Kivy contextos grficos en la documentacin del mdulo de grfico
s. Estos se basan en contextos de grficos OpenGL.
classkivy.graphics.Context.Contexto Bases: builtins.object
la clase de contexto gestiona grupos de instrucciones grficas. Tambin se puede uti
lizar para administrar ob- servidor callbacks. Seeadd_RELOAD_observador() yretir
e_RELOAD_observador() para ms informacin.
add_RELOAD_observador() (interno) Agrega una devolucin de llamada para llamar des
pus de todo el contexto grfico ha sido recargado.
Aqu es donde puede recargarla los datos personalizados en la GPU.
Parmetros: devolucin de llamada func(Contexto) -&gt; volver NoneThe primer parmetro
ser el con- texto propiamente dicho antes: Booleano, por omisin FalseIf True, la
devolucin ser ejecutado antes de volver a cargar todos los procesos. Utilizarlo si
desea borrar la cach, por ejemplo.
Ha cambiado en la versin 1.4.0: antes de parmetro agregado.
remove_RELOAD_observador() (interno) Quitar una devolucin de llamada desde la lis
ta de observadores ha aadido previamente por observador_RELOAD_add().
323

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:

# crear el fbo self.fbo = Fbo(size=(256, 256))


# mostrar nuestro fbo del widget en diferentes tamao Color(1, 1, 1) rectngulo(size
=(32, 32), textura=self.fbo.textura) rectngulo(pos=(32, 0), size=(64, 64), textur
a=self.fbo.textura) rectngulo(pos=(96, 0), size=(128, 128), textura=self.fbo.text
ura)
# en el segundo paso, puede dibujar lo que quieras en el fbo con self.fbo:
Color(1, 0, 0, .8) rectngulo(size=(256, 64) color(0, 1, 0, .8) rectngulo(size=(64,
256)
si cambia algo en el self.fbo objeto, ste se actualizar automticamente. El lienzo d
onde se coloca la fbo se actualizar automticamente.
28.6.1 FBO recargando el contenido
nuevo en la versin 1.2.0.
Si el contexto de OpenGL se pierde, entonces la FBO se pierde demasiado. Usted n
ecesita para volver a cargar los datos sobre usted mismo. Utilice el Fbo.add_REL
OAD_observador() para aadir una funcin de recarga que se llama automticamente cuand
o sea necesario:
def __init__(self,
kwargs):
super(...).__init__( kwargs) self.fbo = Fbo(size=(512, 512) self.fbo.add_RELOAD_obs
ervador(self.populate_fbo)
# y cargar los datos ahora.
self.populate_fbo(self.fbo)
def populate_fbo(self, fbo):
Con fbo:
# .. Pon tu color / Rectngulo / ... aqu
324 De

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) -&gt; 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

get_pixel_color() obtiene el color del pxel con coordenadas de ventana especifica


do wx, Wy. Se devuelve el resultado en formato RGBA.
Nuevo en la versin 1.8.0.
Obtener la textura pxeles pxeles, en formato RGBA, slo unsigned byte. El origen de
la imagen est en la parte inferior izquierda.
Nuevo en la versin 1.7.0.
Release () Liberar el framebuffer (Desvincular).
remove_RELOAD_observador() Quitar una devolucin de llamada desde la lista de obse
rvadores, ha aadido previamente byadd_RELOAD_observador().
Nuevo en la versin 1.2.0. El
tamao del framebuffer, (width, height) formato.
Si cambia el tamao, el framebuffer contenido ser perdido.
Volver el framebuffer textura textura
28,7 GL instrucciones
nuevas en la versin 1.3.0.
28.7.1 El borrado de un FBO
Para borrar un FBO, puede useClearColor andClearBuffers instrucciones como este
ejemplo:
self.fbo = Fbo(size=self.size) con self.fbo:
ClearColor(0, 0, 0, 0)
classkivy ClearBuffers().graphics.gl_Instructions.ClearColor Bases: kivy.graphic
s.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.
g componente verde, entre 0 y 1.
r componente rojo, entre 0 y 1.

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

cir el nmero de instrucciones ejecutadas en el tiempo de procesamiento.


28.8.1 reduciendo el contexto instrucciones
Imagine que usted tiene un esquema similar a este:
Color(1, 1, 1) rectngulo(source= button.png", pos=(0, 0), size=(20, 20) color(1,
1, 1) rectngulo(source= button.png", pos=(10, 10), size=(20, 20) color(1, 1, 1) r
ectngulo(source= button.png", pos=(10, 20), size=(20, 20)
Las instrucciones reales vistos por el lienzo grficos sera:
Color: cambio de contexto color a 1, 1, 1 BindTexture: cambiar "textura0 a b
utton.png" textura rectngulo: Empujar los vrtices (x1, y1...) para vbo &amp; dibuj
ar Color: cambio de contexto color a 1, 1, 1 BindTexture: cambiar "textura0 a
button.png" textura rectngulo: Empujar los vrtices (x1, y1...) para vbo &amp; di
bujar Color: cambio de contexto color a 1, 1, 1 BindTexture: cambiar "textura0
a button.png" textura rectngulo: Empujar los vrtices (x1, y1...) para vbo &amp;
dibujar
slo el firstColor andBindTexture Son tiles y realmente cambiar el contexto. Podemo
s reducirlas a:
327

Color: cambio de contexto color a 1, 1, 1 BindTexture: cambiar "textura0 a b


utton.png" textura rectngulo: Empujar los vrtices (x1, y1...) para vbo &amp; DIBUJ
AR RECTNGULO: Empujar los vrtices (x1, y1...) para vbo &amp; DIBUJAR RECTNGULO: Emp
ujar los vrtices (x1, y1...) para vbo &amp; sealar
esto es lo que el compilador hace en primer lugar, marcando todas las instruccio
nes no utilizados con GI_ignore la bandera. Tan pronto como un color cambia el c
ontenido, la totalidad InstructionGroup sern recompilados y previ- amente Color n
o utilizados pueden ser utilizados para la prxima recopilacin.
Nota para cualquier contribuyente Kivy / desarrollador interno:
Todas las instrucciones de contexto se comprueba para ver si cambia algo en la m
emoria cach.
Debemos asegurarnos de que la instruccin es necesario un contexto actual de nuest
ro lienzo.
Debemos garantizar que no dependen de ningn otro lienzo.
Debemos restablecer nuestro cach si uno de nuestros hijos es otro grupo de instru
ccin porque no sabemos si puede hacer cosas raras o no.
28.9 OpenGL
Python Este mdulo es un envoltorio para OpenGL comandos.
Advertencia: No todos los comandos de OpenGL se ha acomodado y porque estamos us
ando el C vinculantes para un mayor rendimiento, y usted no debera ceirse a la API
de grficos Kivy. Mediante los comandos de OpenGL directamente, usted podra cambia
r el contexto de OpenGL e introducir Kivy incoherencia entre el estado y el esta
do.
kivy OpenGL.graphics.opengl.glActiveTexture() Vase: glActiveTexture() en el sitio
Web de Kronos
kivy.graphics.opengl.glAttachShader() Vase: glAttachShader() en el sitio Web de K
ronos
kivy.graphics.opengl.glBindAttribLocation() Vase: glBindAttribLocation() en el si
tio Web de Kronos
kivy.graphics.opengl.glBindBuffer() Vase: glBindBuffer() en el sitio Web de Krono
s
kivy.graphics.opengl.glBindFramebuffer() Vase: glBindFramebuffer() en el sitio We
b de Kronos
kivy.graphics.opengl.glBindRenderbuffer() Vase: glBindRenderbuffer() en el sitio
Web de Kronos
kivy.graphics.opengl.glBindTexture() Vase: glBindTexture() en el sitio Web de Kro
nos
kivy.graphics.opengl.glBlendColor() Vase: glBlendColor() en el sitio Web de Krono
s

kivy.graphics.opengl.glBlendEquation() Vase: glBlendEquation() en el sitio Web de


Kronos
kivy.graphics.opengl.glBlendEquationSeparate() Vase: glBlendEquationSeparate() en
el sitio Web de Kronos
kivy.graphics.opengl.glBlendFunc() Vase: glBlendFunc() en el sitio Web de Kronos
328

kivy.graphics.opengl.glBlendFuncSeparate() Vase: glBlendFuncSeparate() en el siti


o Web de Kronos
kivy.graphics.opengl.glBufferData() Vase: glBufferData() en el sitio Web de Krono
s
kivy.graphics.opengl.glBufferSubData() Vase: glBufferSubData() en el sitio Web de
Kronos
kivy.graphics.opengl.glCheckFramebufferStatus() Vase: glCheckFramebufferStatus()
en el sitio Web de Kronos
kivy.graphics.opengl.glClear() Vase: glClear() en el sitio Web de Kronos
kivy.graphics.opengl.glClearColor() Ver: glClearColor() en el sitio Web de Krono
s
kivy.graphics.opengl.glClearStencil() Vase: glClearStencil() en el sitio Web de K
ronos
kivy.graphics.opengl.glColorMask() Vase: glColorMask() en el sitio Web de Kronos
kivy.graphics.opengl.glCompileShader() Vase: glCompileShader() en el sitio Web de
Kronos
kivy.graphics.opengl.glCompressedTexImage2D() Vase: glCompressedTexImage2D() en e
l sitio Web de Kronos
kivy.graphics.opengl.glCompressedTexSubImage2D() Vase: glCompressedTexSubImage2D(
) en el sitio Web de Kronos
kivy.graphics.opengl.glCopyTexImage2D() Vase: glCopyTexImage2D() en el sitio Web
de Kronos
kivy.graphics.opengl.glCopyTexSubImage2D() Vase: glCopyTexSubImage2D() en el siti
o Web de Kronos
kivy.graphics.opengl.glCreateProgram() Vase: glCreateProgram() en el sitio Web de
Kronos
kivy.graphics.opengl.glCreateShader() Vase: glCreateShader() en el sitio Web de K
ronos
kivy.graphics.opengl.glCullFace() Vase: glCullFace() en el sitio Web de Kronos
kivy.graphics.opengl.glDeleteBuffers() Vase: glDeleteBuffers() en el sitio Web de
Kronos
kivy.graphics.opengl.glDeleteFramebuffers() Vase: glDeleteFramebuffers() en el si
tio Web de Kronos
kivy.graphics.opengl.glDeleteProgram() Vase: glDeleteProgram() en el sitio Web de
Kronos
kivy.graphics.opengl.glDeleteRenderbuffers() Vase: glDeleteRenderbuffers() en el
sitio Web de Kronos
kivy.graphics.opengl.glDeleteShader() Vase: glDeleteShader() en el sitio Web de K
ronos
kivy.graphics.opengl.glDeleteTextures() Vase: glDeleteTextures() en el sitio Web
de Kronos
329

kivy.graphics.opengl.glDepthFunc() Vase: glDepthFunc() en el sitio Web de Kronos


kivy.graphics.opengl.glDepthMask() Vase: glDepthMask() en el sitio Web de Kronos
kivy.graphics.opengl.glDetachShader() Vase: glDetachShader() en el sitio Web de K
ronos

Kivy.graphics.opengl.glDisable() Vase: glDisable() en el sitio Web de Kronos


kivy.graphics.opengl.glDisableVertexAttribArray() Vase: glDisableVertexAttribArra
y() en el sitio Web de Kronos
kivy.graphics.opengl.glDrawArrays() Vase: glDrawArrays() en el sitio Web de Krono
s
kivy.graphics.opengl.glDrawElements() Vase: glDrawElements() en el sitio Web de K
ronos
kivy.graphics.opengl.glEnable() Vase: glEnable() en el sitio Web de Kronos
kivy.graphics.opengl.glEnableVertexAttribArray() Vase: glEnableVertexAttribArray(
) en el sitio Web de Kronos
kivy.graphics.opengl.glFinish() Vase: glFinish() en el sitio Web de Kronos
kivy.graphics.opengl.glFlush() Vase: glFlush() en el sitio Web de Kronos
kivy.graphics.opengl.glFramebufferRenderbuffer() Vase: glFramebufferRenderbuffer(
) en el sitio Web de Kronos
kivy.graphics.opengl.glFramebufferTexture2D() Vase: glFramebufferTexture2D() en e
l sitio Web de Kronos
kivy.graphics.opengl.glFrontFace() Vase: glFrontFace() en el sitio Web de Kronos
kivy.graphics.opengl.glGenBuffers() Vase: glGenBuffers() en el sitio Web de Krono
s
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGenFramebuffers() Vase: glGenFramebuffers() en el sitio We
b de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGenRenderbuffers() Vase: glGenRenderbuffers() en el sitio
Web de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGenTextures() Ver: glGenTextures() en el sitio Web de Kro
nos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGenerateMipmap() Vase: glGenerateMipmap() en el sitio Web
de Kronos
kivy.graphics.opengl.glGetActiveAttrib() Vase: glGetActiveAttrib() en el sitio We
b de Kronos
330

a diferencia de la especificacin C, el valor ser el resultado de la llamada.


kivy.graphics.opengl.glGetActiveUniform() Vase: glGetActiveUniform() en el sitio
Web de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetAttachedShaders() Vase: glGetAttachedShaders() en el si
tio Web de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetAttribLocation() Vase: glGetAttribLocation() en el siti
o Web de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetBooleanv() Vase: glGetBooleanv() en el sitio Web de Kro
nos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetBufferParameteriv() Vase: glGetBufferParameteriv() en e
l sitio Web de Kronos
A diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetError() Vase: glGetError() en el sitio Web de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetFloatv() Vase: glGetFloatv() en el sitio Web de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetFramebufferAttachmentParameteriv() Vase: glGetFramebuff
erAttachmentParameteriv() en el sitio Web de Kronos

a diferencia de la especificacin C, el valor ser el resultado de la llamada.


kivy.graphics.opengl.glGetIntegerv() Vase: glGetIntegerv() en el sitio Web de Kro
nos
a diferencia de la especificacin C, el valor(s) ser el resultado de la llamada
kivy.graphics.opengl.glGetProgramInfoLog() Vase: glGetProgramInfoLog() en el siti
o Web de Kronos
a diferencia de la especificacin C, el cdigo fuente ser devuelto como una cadena.
kivy.graphics.opengl.glGetProgramiv() Vase: glGetProgramiv() en el sitio Web de K
ronos
a diferencia de la especificacin C, el valor(s) ser el resultado De la llamada
kivy.graphics.opengl.glGetRenderbufferParameteriv() Vase: glGetRenderbufferParame
teriv() en el sitio Web de Kronos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetShaderInfoLog() Vase: glGetShaderInfoLog() en el sitio
Web de Kronos
a diferencia de la especificacin C, el cdigo fuente ser devuelto como una cadena.
331

kivy.graphics.opengl.glGetShaderPrecisionFormat() Vase: glGetShaderPrecisionForma


t() en el sitio Web de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glGetShaderSource() Vase: glGetShaderSource() en el sitio We
b de Kronos
a diferencia de la especificacin C, el cdigo fuente ser devuelto como una cadena.
kivy.graphics.opengl.glGetShaderiv() Vase: glGetShaderiv() en el sitio Web de Kro
nos
a diferencia de la especificacin C, el valor ser el resultado de la llamada.
kivy.graphics.opengl.glGetString() Vase: glGetString() en el sitio Web de Kronos
a diferencia de la especificacin C, el valor ser devuelto como una cadena.
kivy.graphics.opengl.glGetTexParameterfv() Vase: glGetTexParameterfv() en el siti
o Web de Kronos
kivy.graphics.opengl.glGetTexParameteriv() Vase: glGetTexParameteriv() en el siti
o Web de Kronos
kivy.graphics.opengl.glGetUniformLocation() Vase: glGetUniformLocation() en el si
tio Web de Kronos
kivy.graphics.opengl.glGetUniformfv() Vase: glGetUniformfv() en el sitio Web de K
ronos
kivy.graphics.opengl.glGetUniformiv() Vase: glGetUniformiv() en el sitio Web de K
ronos
kivy.graphics.opengl.glGetVertexAttribPointerv() Vase: glGetVertexAttribPointerv(
) en el sitio Web de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glGetVertexAttribfv() Vase: glGetVertexAttribfv() en el siti
o Web de Kronos
kivy.graphics.opengl.glGetVertexAttribiv() Vase: glGetVertexAttribiv() en el siti
o Web de Kronos
kivy.graphics.opengl.glHint() Vase: GlHint() en el sitio Web de Kronos
kivy.graphics.opengl.glIsBuffer() Vase: glIsBuffer() en el sitio Web de Kronos
kivy.graphics.opengl.glIsEnabled() Vase: glIsEnabled() en el sitio Web de Kronos
kivy.graphics.opengl.glIsFramebuffer() Vase: glIsFramebuffer() en el sitio Web de
Kronos
kivy.graphics.opengl.glIsProgram() Vase: glIsProgram() en el sitio Web de Kronos
kivy.graphics.opengl.glIsRenderbuffer() Vase: glIsRenderbuffer() en el sitio Web
de Kronos
332

kivy.graphics.opengl.glIsShader() Vase: glIsShader() en el sitio Web de Kronos


kivy.graphics.opengl.glIsTexture() Vase: glIsTexture() en el sitio Web de Kronos
kivy.graphics.opengl.glLineWidth() Vase: glLineWidth() en el sitio Web de Kronos
kivy.graphics.opengl.glLinkProgram() Vase: glLinkProgram() en el sitio Web de Kro
nos
kivy.graphics.opengl.glPixelStorei() Vase: glPixelStorei() en el sitio Web de Kro
nos
kivy.graphics.opengl.glPolygonOffset() Vase: glPolygonOffset() en el sitio Web de
Kronos
kivy.graphics.opengl.glReadPixels() Vase: glReadPixels() en el sitio Web de Krono
s
solo apoyamos GL_RGB/GL_RGBA como formato y GL_UNSIGNED_BYTE como un tipo.
kivy.graphics.opengl.glReleaseShaderCompiler() Vase: glReleaseShaderCompiler() en
el sitio Web de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glRenderbufferStorage() Vase: glRenderbufferStorage() en el
sitio Web de Kronos
kivy.graphics.opengl.glSampleCoverage() Vase: glSampleCoverage() en el sitio Web
de Kronos
kivy.graphics.opengl.glScissor() Vase: glScissor() en el sitio Web de Kronos
kivy.graphics.opengl.glShaderBinary() Vase: glShaderBinary() En el sitio Web de K
ronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glShaderSource() Vase: glShaderSource() en el sitio Web de K
ronos
kivy.graphics.opengl.glStencilFunc() Vase: glStencilFunc() en el sitio Web de Kro
nos
kivy.graphics.opengl.glStencilFuncSeparate() Vase: glStencilFuncSeparate() en el
sitio Web de Kronos
kivy.graphics.opengl.glStencilMask() Vase: glStencilMask() en el sitio Web de Kro
nos
kivy.graphics.opengl.glStencilMaskSeparate() Vase: glStencilMaskSeparate() en el
sitio Web de Kronos
kivy.graphics.opengl.glStencilOp() Vase: glStencilOp() en el sitio Web de Kronos
kivy.graphics.opengl.glStencilOpSeparate() Vase: glStencilOpSeparate() en el siti
o Web de Kronos
333

kivy.graphics.opengl.glTexImage2D() Vase: glTexImage2D() en el sitio Web de Krono


s
kivy.graphics.opengl.glTexParameterf() Vase: glTexParameterf() en el sitio Web de
Kronos
kivy.graphics.opengl.glTexParameterfv() Vase: glTexParameterfv() en el sitio Web
de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glTexParameteri() Vase: glTexParameteri() en el sitio Web de
Kronos
kivy.graphics.opengl.glTexParameteriv() Vase: glTexParameteriv() en el sitio Web
de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glTexSubImage2D() Vase: glTexSubImage2D() en el sitio Web de
Kronos
kivy.graphics.opengl.glUniform1f() Vase: glUniform1f() en el sitio Web de Kronos
kivy.graphics.opengl.glUniform1FV() Vase: glUniform1FV() en el sitio Web de Krono
s

Advertencia: No se ha implementado an.


kivy.graphics.opengl.glUniform1i() Vase: glUniform1i() en el sitio Web de Kronos
kivy.graphics.opengl.glUniform1iv() Vase: glUniform1iv() Sitio Web de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniform2f() Vase: glUniform2f() en el sitio Web de Kronos
kivy.graphics.opengl.glUniform2FV() Vase: glUniform2FV() en el sitio Web de Krono
s
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniform2i() Vase: glUniform2i() en el sitio Web de Kronos
kivy.graphics.opengl.glUniform2iv() Vase: glUniform2iv() en el sitio Web de Krono
s
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniform3f() Vase: glUniform3f() en el sitio Web de Kronos
334

kivy.graphics.opengl.glUniform3FV() Vase: glUniform3FV() en el sitio Web de Krono


s
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniform3i() Vase: glUniform3i() en el sitio Web de Kronos
kivy.graphics.opengl.glUniform3iv() Vase: glUniform3iv() en el sitio Web de Krono
s
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniform4f() Vase: glUniform4f() en el sitio Web de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniform4FV() Vase: glUniform4FV() en el sitio Web de Krono
s
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniform4i() Vase: glUniform4i() en el sitio Web de Kronos
kivy.graphics.opengl.glUniform4iv() Vase: glUniform4iv() en el sitio Web de Krono
s
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniformMatrix2FV() Vase: glUniformMatrix2FV() en el sitio
Web de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniformMatrix3FV() Vase: glUniformMatrix3FV() En el sitio
Web de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glUniformMatrix4FV() Vase: glUniformMatrix4FV() en el sitio
Web de Kronos
kivy.graphics.opengl.glUseProgram() Vase: glUseProgram() en el sitio Web de Krono
s
kivy.graphics.opengl.glValidateProgram() Vase: glValidateProgram() en el sitio We
b de Kronos
kivy.graphics.opengl.glVertexAttrib1f() Vase: glVertexAttrib1f() en el sitio Web
de Kronos
kivy.graphics.opengl.glVertexAttrib1FV() Vase: glVertexAttrib1FV() en el sitio We
b de Kronos
335

Advertencia: No se ha implementado an.


kivy.graphics.opengl.glVertexAttrib2f() Vase: glVertexAttrib2f() en el sitio Web
de Kronos
kivy.graphics.opengl.glVertexAttrib2FV() Vase: glVertexAttrib2FV() en el sitio We
b de Kronos

Advertencia: No se ha implementado an.


kivy.graphics.opengl.glVertexAttrib3f() Vase: glVertexAttrib3f() en el sitio Web
de Kronos
kivy.graphics.opengl.glVertexAttrib3FV() Vase: glVertexAttrib3FV() en el sitio We
b de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glVertexAttrib4f() Vase: glVertexAttrib4f() en el sitio Web
de Kronos
kivy.graphics.opengl.glVertexAttrib4FV() Vase: glVertexAttrib4FV() en el sitio We
b de Kronos
Advertencia: No se ha implementado an.
kivy.graphics.opengl.glVertexAttribPointer() Vase: glVertexAttribPointer() en el
sitio Web de Kronos
kivy.graphics.opengl.glViewport() Vase: glViewport() en el sitio Web de Kronos
28.10 OpenGL utilidades
nuevas en la versin 1.0.7.
kivy.graphics.opengl_utils.gl_get_extensions() devuelve una lista de extensiones
OpenGL disponibles. Todos los nombres de la lista tienen el GL_ despojado al in
icio (si existe) y estn en minsculas.
&gt;&gt;&gt; print(gl_get_extensions() [ arb_blend_func_extended , arb_color_bu
ffer_float , arb_compatibility , arb_copy_buffer ... ]
kivy.graphics.opengl_utils.gl_se_extension() comprueba si una extensin de OpenGL
est disponible. Si el nombre comienza con GL_, ser despojado de la prueba y se con
vierten en minsculas.
&gt;&gt;&gt; gl_se_extension( NV_get_tex_image ) falso &gt;&gt;&gt; gl_se_extens
ion( OES_texture_npot ) True
336

kivy.graphics.opengl_utils.gl_has_capacidad() devuelven el estado de una capacid


ad de OpenGL. Este es un contenedor que descubre automticamente todas las funcion
es que pueda necesitar Kivy. Las actuales capacidades probadas son:
GLCAP_BGRA: prueba el soporte de formato BGRA textura GLCAP_NPOT: Prueba el apoyo
de no potencia de dos textura GLCAP_S3TC: Prueba el apoyo de S3TC (textura DXT1,
DXT3, DXT5) GLCAP_DXT1: Prueba el apoyo de textura DXT (subconjunto de S3TC) GLCAP
_ETC1: Prueba el apoyo de ETC1 textura
kivy.graphics.opengl_utils.gl_register_get_size() La inscripcin de una asociacin e
ntre un OpenGL Const utilizado en glGet para una serie de elementos.
Por ejemplo, la GPU_MEMORY_INFO_dedicado_VIDMEM_NVX es un extraordinario pname q
ue devolver el nmero entero 1 (NVIDIA).
&gt;&gt;&gt; GPU_MEMORY_INFO_dedicado_VIDMEM_NVX = 0x9047 La &gt;&gt;&gt; gl_reg
ister_get_size(GPU_MEMORY_INFO_dedicado_VIDMEM_NVX, 1) &gt;&gt;&gt; glGetInteger
v(GPU_MEMORY_INFO_dedicado_VIDMEM_NVX)[0] 524288
kivy.graphics.opengl_utils.gl_se_texture_format() devuelven si una textura forma
to es compatible con su sistema de forma nativa o mediante una conversin. Por eje
mplo, si tu tarjeta no soporta "bgra , somos capaces de convertir a rgba , pero
slo en modo de software.
kivy.graphics.opengl_utils.gl_se_texture_conversion() devolver el valor 1 si la t
extura se pueden convertir a un formato nativo.
kivy.graphics.opengl_utils.gl_se_texture_native_format() devolver 1 si el formato
de textura es manejado de forma nativa.
&gt;&gt;&gt; gl_se_texture_format( azdmok ) 0 &gt;&gt;&gt; gl_se_texture_format(
rgba ) 1 &gt;&gt;&gt; gl_se_texture_format(s3tc_DXT1 ) [INFO ] [GL ] S3TC textu
ra Support est disponible [INFO ] [GL ] DXT1 soporte de textura disponible 1
kivy.graphics.opengl_utils.gl_get_texture_formats() devuelve una lista de format
os de textura reconocidos por kivy. La lista de texturas es ilustrativa, pero qu
izs no ha sido apoyada por su hardware. Si desea una lista de admitidos texturas,
debe filtrar la lista como sigue:

supported_fmts = [gl_se_texture_format(x) para x en gl_get_texture_formats()]


kivy.graphics.opengl_utils.gl_get_version() devuelven el (mayor, menor) la versin
de OpenGL, analiza desde la GL_VERSION.
Nuevo en la versin 1.2.0.
kivy.graphics.opengl_utils.gl_get_VERSION_MINOR() devuelve el componente menor d
e la versin OpenGL.
Nuevo en la versin 1.2.0.
kivy.graphics.opengl_utils.gl_get_VERSION_MAJOR() devuelve el componente princip
al de la versin OpenGL.
Nuevo en la versin 1.2.0.
337

28.11 Instrucciones de tijera de


nuevo en la versin 1.9.1.
Instrucciones de tijera clip su rea de dibujo en una regin rectangular.
ScissorPush: Comienza el recorte, establece los lmites del espacio clip ScissorPo
p: Finaliza el recorte
del rea proporcionada al clip est en pxeles screenspace y deben ser suministrados c
omo valores enteros no flota.
El siguiente cdigo va a dibujar un crculo ontop de nuestro widget, mientras que el
crculo de manera que el recorte no se expande ms all de las fronteras. widget
con self.Canvas.Despus:
#Si nuestro widget widget est dentro de otro que modifican las coordenadas #espac
iado (como ScrollView) queremos convertir a la ventana coords x,y = self.a_windo
w( self.pos) width, height = self.tamao #debemos convertir los posibles valores pro
porcionados por flotacin kivy #widgets a un entero screenspace, en python3 ronda
devuelve un int para #int emitidos ser innecesaria.
ScissorPush(x=int(round(x)), y=int(Round(y)), width=int(round(ancho), height=int
(round(altura))) Color(rgba=(1., 0., 0., .5) Elipse(size=(width*2., altura 2.), po
s = self.centro)
classkivy ScissorPop().graphics.La Tijera_Instructions.Rect Bases: builtins.obje
ct
clase Rect utilizado internamente por ScissorStack ScissorPush y rea de recorte p
ara determinar la correcta.
classkivy.graphics.La Tijera_Instructions.ScissorPop Bases: kivy.graphics.instru
cciones.La instruccin
pop la pila de tijera. Despus ScissorPush llamada, una vez que haya completado el
dibujo que desee estar recortada.
classkivy.graphics.La Tijera_Instructions.ScissorPush Bases: kivy.graphics.INSTR
UCTIONS.Instrucciones
empuje la pila de tijera. Proporcionar kwargs de x , y , Ancho , altura par
a controlar el rea y la posicin de la regin scissoring. Por defecto es 0, 0, 100, 1
00
obras de tijera cortando todo el dibujo fuera de un rectngulo a partir de int x,
int y posicin y tener lados de int anchura por altura int en la ventana de coorde
nadas espaciales
classkivy.graphics.La Tijera_Instructions.ScissorStack Bases: builtins.Object
Class utiliza internamente para realizar el seguimiento del estado actual de las
regiones glScissors. No instanciar, prefieren para inspeccionar la tijera del md
ulo_stack.
28.12 Shader
TheShader clase se encarga de la compilacin de los vertex y fragment shader, as co
mo la creacin del programa en OpenGL.
338

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

void main(){ ...


}
---fragment SHADER--- // fragment shader empieza aqu void main(){ ...
}
La propiedad source del sombreado debe definirse con el nombre de archivo de un
archivo de sombreado glsl (del formato anterior), por ejemplo, phong.glsl classk
ivy.graphics.shader.Shader Bases: builtins.object
Crea un vrtice o fragmento de sombreado.
Vs parmetros: string, por omisin NoneSource cdigo para Vertex Shader fs: cadena, el
valor predeterminado para el fragmento de cdigo NoneSource shader fs Fragment sh
ader cdigo fuente.
Si establece un nuevo fragmento shader cdigo fuente, se compilan automticamente y
reemplazar al actual fragment shader.
fuente glsl cdigo fuente.
fuente debe ser el nombre de un glsl shader que contiene tanto el vertex y fragm
ent shader cdigo fuente, cada uno de ellos designado por un encabezado de seccin c
ompuesta por una lnea que comienza con "-vrtice" o "-fragment" (no distingue entre
maysculas y minsculas).
Nuevo en la versin 1.6.0. El
xito indican si el sombreado se carg correctamente y est listo para su uso o no.
vs Vertex Shader cdigo fuente.
Si establece un nuevo vertex shader cdigo fuente, se compilan automticamente y ree
mplazar al actual Vertex Shader.
28.13 Instrucciones Galera
Nuevo en la versin 1.0.4.
Ha cambiado en la versin 1.3.0: Funcionamiento de la galera se ha actualizado para

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

StencilPop : pop la actual capa de estncil.


Usted siempre debe respetar este esquema:
StencilPush
# Fase 1: poner cualquier dibujo instrucciones para utilizar como mscara aqu.
# StencilUse Fase 2: todo el dibujo aqu ser automticamente cortado por el # mscara c
reada en la fase 1.
# StencilUnUse Fase 3: instrucciones de dibujo wil ahora pueden extraerse sin re
corte pero la mscara # todava estar en la pila. Puede volver a la fase 2 en cualqui
er momento # emitiendo otro StencilUse comando.
# StencilPop Fase 4: la galera ahora se quita de la pila y la descarga.
28.13.1 Limitaciones
Dibujo en fase 1 y fase 3 no debe chocar o usted conseguir resultados inesperados
La galera se activa tan pronto como se lleve a cabo una StencilPush
La galera se desactiva tan pronto como haya aparecido correctamente todas las cap
as Galera
Usted no debe jugar con las galeras usted entre un StencilPush / StencilPop
Puede pulsar otra galera despus de un StencilUse / antes del StencilPop
Puede empujar hasta 128 capas de patrones (8 de kivy &lt; 1.3.0)
Ejemplo de 28.13.2 Uso galera
aqu es un ejemplo, en kv style:
StencilPush
# Crear una mscara rectangular con un pos de (100, 100) y (100, 100) de tamao.
Rectngulo:
pos: Tamao: 100, 100, 100, 100
StencilUse
# queremos mostrar un gran rectngulo verde, sin embargo, la galera anterior # mscar
a se cosecha de nosotros :) color:
rgb: 0, 1, 0 Rectngulo:
Tamao: 900, 900
StencilUnUse
341

# debe redibujar la galera mscara para extraerlo rectngulo:


pos: Tamao: 100, 100, 100, 100
StencilPop
classkivy.graphics.stencil_Instructions.StencilPush Bases: kivy.graphics.instruc
ciones.La instruccin

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

anchor_y posicin de anclaje vertical para escalar y rotaciones. El valor predeter


minado es 0. Los valores simblicos Bot- tom , Centro y top tambin son aceptad
os.
archivo Nombre de archivo a cargar.
El anlisis y la interpretacin se realiza tan pronto como se establezca el nombre d
e archivo.
28.15 Tesselator
nuevo en la versin 1.9.0.
Advertencia: Esto es experimental y sujetos a cambios mientras este aviso est pre
sente. Slo TYPE_polgonos es compatible actualmente.
343

Tesselator es una biblioteca para tesselating polgonos, basado en libtess2. Convi


erte el cncavo polgonos rellenos por primera tesselating en polgonos convexos. Tamb
in es compatible con agujeros.
28.15.1 Uso
primero necesita crear aTesselator objeto y agregar contornos. El primero es el
contorno exterior de la forma y todos los siguientes deben ser agujeros:
desde kivy.graphics.tesselator importacin
Tesselator Tesselator tess =().add_tess contour([0, 0, 200, 0, 200, 200, 0, 200)
] tess.add_contour([50, 50, 150, 50, 150, 150, 50, 150]) en

segundo lugar, llamar al Tesselator.tesselate() Mtodo para calcular los puntos. E


s posible que la tesselator no funcionan. En ese caso, puede devolver false:
si no tess.tesselate():
print "Tesselator no funcionaba :(" volver
despus de la interseccin, usted tiene varias maneras para iterar sobre el resultad
o. El mejor enfoque es usar Tesselator.mallas para obtener un formato directamen
te utilizable para aMesh:
para los vrtices, los ndices en el Tess.mallas:
self.Canvas.add(Mesh( vrtices=vrtices, ndices=ndices, modo="tringulo_fan" ))
o bien, puede obtener el resultado "raw", con slo los polgonos y coordenadas x/y c
on Tesselator.vrtices():
para los vrtices de tess.vrtices:
"tengo la impresin", vrtices
classkivy polgono.graphics.tesselator.Tesselator Bases: builtins.object
Tesselator clase. Consulte el mdulo para obtener ms informacin sobre el uso de
contorno_add() agrega un contorno a la tesselator. Puede ser:
Una lista de [x, y x2, y2, ...] coordina una matriz de flotacin: array("f", [x, y
x2, y2, ...]) cualquier bfer con flotadores.
element_count devuelve el nmero de polgonos convexos.
mallas iterar a travs del resultado de thetesselate() para dar un resultado que p
uede ser fcilmente empujados a Kivy es objeto de malla.
Es una lista de vrtices: [[, ndices], [los vrtices, ndices, ...]]. Los vrtices en el
formato [x, y, u, v, x2, y2, U2, v2].
344

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:

Textura = Texture.create(size=(640, 480)


Al crear una textura, debe tener en cuenta el color predeterminado y buffer form
ato:
el color y el formato de pxel (Texture.colorfmt) que puede ser RGB , rgba , Lu
minosidad , lumi- nanzas_alpha , bgr o bgra . El valor predeterminado es RG
B
345

El buffer formato determina cmo un componente de color se almacena en la memoria.


Esto puede ser ubyte , ushort , uint , byte , short , int o flotante .
El valor predeterminado y el ms comnmente utilizado es ubyte .
Por lo tanto, si desea crear una textura:
Textura RGBA = Texture.create(size=(640, 480), colorfmt= rgba )
puede utilizar la textura en casi todas las instrucciones con el vrtice kivy.grap
hics.VertexIntruction.textura parmetro. Si desea utilizar su textura en kv lang,
puede guardarlo en su interior anObjectProperty widget.
28.16.1 Blitting datos personalizados
Puede crear sus propios datos y blit a la textura usingTexture.Blit_buffer().
Por ejemplo, para los bytes de datos inmutables blit:
# crear una textura de 64x64, por defecto rgb / ubyte textura = Texture.create(s
ize=(64, 64))
255 / tamao) para x en Range(tamao)]
3 buf = [int(x
64 # crear 64x64 ficha RGB, y
llenar con valores de 0 a 255 # tendremos un degradado de negro a blanco tamao =
64
# a continuacin, convertir la matriz en una cadena ubyte buf = b .join(map(Chr,
buf))
# entonces el bfer blit texture.Blit_buffer(buf, colorfmt= RGB", bufferfmt= ubyte
)
# eso es todo! Puede utilizarlo en sus grficos ahora :) # Si el auto es un widget,
puede hacerlo con el auto.Canvas:
rectngulo(textura=textura, pos=auto.pos, size=(64, 64)
Desde 1.9.0, puede blit datos almacenados en una instancia que implementa la int
erfaz de bfer de python, o un mismo, como memoryview matrices numpy, python.Array
, una matriz o un bytearray cython matriz. Esto es beneficioso si usted espera b
lit datos similares, quizs con unos pocos cambios en los datos.
Cuando se utiliza una representacin de bytes de los datos, para cada cambio tendr
que regenerar los bytes- postura, de quiz una lista, que es muy ineficiente. Cuan
do se utiliza un objeto buffer, simplemente puede editar partes de los datos ori
ginales. Del mismo modo, a menos bytes comenzando con un objeto, convirtiendo a
bytes requiere una copia completa, sin embargo, cuando se utiliza un bfer de memo
ria de ejemplo, no se ha copiado, excepto para cargar a la GPU.
Continuando con el ejemplo anterior:
desde la matriz Matriz de importacin
255 / tamao) para x en Range(tamao)] # inicializar la matriz con los valores de rea
de influencia arr = Array( B , buf) # ahora la matriz blit texture.Blit_buffer(
arr, colorfmt= RGB", bufferfmt= ubyte ) 3 buf = [int(x 64
tamao = 64
# ahora cambiar algunos elementos en la matriz original arr[24] = arr[50] = 99
346

# blit de nuevo el bfer texture.Blit_buffer(arr, colorfmt= RGB", bufferfmt= ubyte


)
28.16.2 BGR/BGRA apoyar
la primera vez que intente crear una textura BGRA o BGR, comprobamos si el hardw
are soporta texturas BGRA BGR / marcando la extensin "GL_EXT_bgra .

Si la extensin no se encuentra, la conversin a / RGB RGBA se llevar a cabo en el so


ftware.
28.16.3 NPOT textura
ha cambiado en la versin 1.0.7: Si el hardware soporta NPOT, ningn bote es creado.
Como la documentacin dice OpenGL, una textura debe ser una potencia de dos grande
s. Esto significa que su anchura y altura puede ser uno de los 64, 32, 256... pe
ro no de 3, 68, 42. NPOT significa no-poder-de-dos. OpenGL ES 2 admite de forma
nativa, pero con texturas NPOT algunos inconvenientes. Otro tipo de NPOT textura
es llamado un rectngulo textura. POT NPOT y texturas, todos tienen sus pro y con
tras.
Caractersticas POT NPOT Rectngulo OpenGL GL_Texture_2D GL_Texture_2D GL_Texture_re
ctangle_(NV|ARB|EXT) Textura de destino 0-1 0-1 rango ancho-alto rango coords Mi
pmapping parcialmente compatibles no admiten el modo Wrap No compatibles
si crear una textura NPOT, debemos primero verificar si su hardware lo admite co
mprobando la ex- tensiones GL_ARB_texture_non_power_de_dos o OES_texture_npot. S
i ninguna de estas opciones estn disponibles, creamos la olla ms cercana la textur
a que pueden contener su NPOT textura. La textura.create() devolver aTextureRegio
n en su lugar.
28.16.4 textura
Una textura atlas atlas es una sola textura que contiene muchas imgenes. Si desea
separar la textura original en muchos individuales, no es necesario. Usted pued
e conseguir una regin de la textura original. Que devolver la textura original per
sonalizado con coordenadas de textura:
# por ejemplo, cargar una imagen de 128x128 que contiene 4 imgenes de 64x64.core.
kivy IMPORTAR IMAGEN IMAGEN IMAGEN textura =( mycombinedimage.png").La textura
infizq = texture.get_regin(0, 0, 64, 64) = bottomright texture.get_regin(0, 64, 64
, 64) = topleft texture.get_regin(0, 64, 64, 64) parte superiorderecha = texture.
get_regin(64, 64, 64, 64)
28.16.5 Mipmapping
nuevo en la versin 1.0.7.
Mipmapping es una tcnica de OpenGL para mejorar la representacin de las texturas g
randes a pequeas superficies.
Sin mipmapping, usted podra ver pixelado cuando prestan a las pequeas superficies.
La idea es calcular previamente la subtexture y aplicar algunos filtros de imag
en como un filtro lineal. Entonces, cuando se procesa una
347

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) -&gt; volver NoneThe primer parmetro
ser el con- texto en s.
348

ask_update() indican que el contenido de la textura debe ser actualizado y la fu


ncin de devolucin de llamada debe ser llamado cuando la textura se utilizar
Bind bind() La textura al actual estado de opengl.
blit_buffer() Blit un bfer en la textura.
Nota: a menos que el lienzo se actualizar debido a otros cambios,ask_update() deb
e ser llamada a fin de actualizar la textura.
Parmetros pbuffer[bytes, o una clase que implementa la interfaz buffer (incluyend
o memoryview).] un bfer que contiene los datos de la imagen. Puede ser ei- tros u
n bytes objeto o una instancia de una clase que implementa la interfaz de bfer de
python, por ejemplo, array.matriz, matrices numpy bytearray, etc. Si no es un o
bjeto, los bytes del bfer subyacente debe ser contigua, slo tienen una dimensin y n
o debe ser de slo lectura, aunque los datos no se modifica, debido a una limitacin
cython. Ver descripcin del mdulo para ver los detalles de uso.
tamao[tupla, retorna a la textura tamao] el tamao de la imagen (ancho y alto) color
fmt[str, por omisin RGB ] Formato de imagen, puede ser una de RGB , rgba , bg
r , bgra , Luminosidad o la luminancia_alpha .
pos[tupla, por omisin (0, 0)] a la posicin de la textura. blit
bufferfmt[str, por omisin ubyte ] Tipo de bfer de datos, pueden ser ubyte , ush
ort , uint , byte , short , int o flotar .
_mipmap nivel: int, por defecto 0indican que niveles mipmap vamos a actualizar.
_mipmap generacin: bool, por omisin TrueIndicate si necesitamos regener- comi el mi
pmap desde el nivel 0.
Ha cambiado en la versin 1.0.7: aadido mipmap_level_mipmap y generacin
ha cambiado en la versin 1.9.0: pbuffer ahora puede ser cualquier instancia de la
clase que implementa la interfaz de bfer de python y / o memoryviews mismos.
blit_data() sustituir toda una textura con los datos de la imagen.
bufferfmt volver el buffer formato utilizado en esta textura (slo lectura).
Nuevo en la versin 1.2.0.
colorfmt devolver el color formato utilizado en esta textura (slo lectura).
Nuevo en la versin 1.0.7.
staticcreate() crea una textura en funcin de su tamao.
Parmetros: tamao de la tupla, por omisin (128, 128)el tamao de la textura.
colorfmt: str, por omisin rgba el formato de color de la textura. Puede ser rgb
a o RGB , Luminosidad o la luminancia_alpha . En el escritorio, valores adi
cionales estn disponibles: red , rg .
349

icolorfmt: str, por defecto el valor de almacenamiento de formato colorfmtIntern


al de la textura. Puede ser rgba o RGB , Luminosidad o la luminancia_alpha
.
En el escritorio, valores adicionales estn disponibles: r8 , rg8 , rgba8 .
bufferfmt: str, por omisin ubyte buffer interno formato de la textura. Puede ser
ubyte , ushort , uint , bute , short , int o flotar .
mipmap: bool, por omisin FalseIf True, generar automticamente la textura mipmap.
callback: callable() retorna a FalseIf una funcin es proporcionada, ser llamado cu
ando se necesitan datos de la textura.
Ha cambiado en la versin 1.7.0: Se ha aadido
staticcreate callback_from_data() crea una textura a partir de una clase ImageDa
ta.
flip_horizontal() Voltear tex_coords para pantalla horizontal.
Nuevo en la versin 1.9.0.
_vertical flip() Voltear tex_coords para pantalla vertical.
get_regin() devuelven una parte de la textura definidos por los argumentos rectan
gular (x, y, width, height). Re- gira aTextureRegion instancia.
Retorno de altura la altura de la textura (readonly).
id devolver el ID de OpenGL de la textura (readonly).
mag_get/set filter Filtro Mag la textura. Los valores disponibles:
lineal ms cercano el opengl Comprobacin de documentacin para obtener ms informacin ace
ca del comportamiento de estos valores :
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml.
min_get/set filter filtro min. la textura. Los valores disponibles:
lineal lineal ms cercano_mipmap_lineal lineal _mipmap_nearest nearest_mipmap_neares
t nearest_mipmap_comprobacin lineal opengl documentacin para obtener ms informacin ac
erca del comportamiento de estos valores :
mipmap http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml. de
volver True si la textura ha habilitado mipmap (readonly).
pxeles pxeles consigue la textura, slo en formato RGBA, unsigned byte. El origen de
la imagen est en la parte inferior izquierda.
Nuevo en la versin 1.7.0.
remove_RELOAD_observador() Quitar una devolucin de llamada desde la lista de obse
rvadores, ha aadido previamente byadd_RELOAD_observador().
Nuevo en la versin 1.2.0.
350

save() Guardar el contenido a un archivo de textura. Verificar kivy.core.image.I


mage.Save() para ms informacin.
El parmetro volteadas voltea la imagen guardada verticalmente, y su valor predete
rminado es True.
Nuevo en la versin 1.7.0.
Ha cambiado en la versin 1.8.0: Parmetro volteada agregado, el valor predeterminad
o es True. Todos los OpenGL textura son ledas desde abajo / izquierda, necesita s
er volteado antes de guardar. Si no desea voltear la imagen, voltea a Falso.
Devolver el tamao (ancho y alto) de la textura (readonly).
objetivo devolver el objetivo de OpenGL de la textura (readonly).
tex_coords devolver la lista de tex_coords (opengl).
uvpos get/set UV la posicin dentro de la textura.
uvsize get/set UV el tamao dentro de la textura.
Advertencia: El tamao puede ser negativo si la textura est volteada.
anchura devolver el ancho de la textura (readonly).
wrap get/set de envoltura de la textura. Los valores disponibles:

repita duplicados abrazadera_repeat_para_edge Compruebe la documentacin de opengl pa


ra obtener ms informacin acerca del comportamiento de estos valores :
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml.
classkivy.graphics.texture.TextureRegion Bases: kivy.graphics.texture.Textura
manejar una regin de una clase de textura. til para no poder-de-2 textura manipula
cin.
28.17 Transformacin
Este mdulo contiene una matriz de la clase utilizada para nuestros clculos grficos.
Actualmente tenemos:
rotacin, translacin y matrices de escala
matriz de multiplicaciones
Matriz de clip (con o sin perspectiva)
matriz de transformacin para 3D tctil
para obtener ms informacin sobre las matrices de transformacin, consulte el Tutoria
l de matrices de OpenGL.
Ha cambiado en la versin 1.6.0: Adicin de matrix.perspectiva(), Matrix.look_at() y
Matrix.transponer().
351

classkivy.graphics.transformacin.Matrix Bases: builtins.El objeto de la


clase Matrix optimizados para OpenGL:
&gt;&gt;&gt; de kivy.graphics.transformacin de matriz de importacin &gt;&gt;&gt; m
= Matrix() &gt;&gt;&gt; print(m) [[ 1.000000 0.000000 0.000000 0.000000 1.00000
0 0.000000 ] [ ] 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 [ ] [ ] 1
.000000 0.000000 0.000000 0.000000]
[ 0 1 2 3] [ 4 5 6 7] [ 8] [ 9 10 11 12 13 14 15]
get() recuperar el valor de la corriente como una lista plana.
Nuevo en la versin 1.9.1.
Identity() restablece la matriz a la matriz identidad (directo).
inverso() devuelven la inversa de la matriz como una matriz nueva.
Mire_at() devuelve una nueva matriz lookat (similar a gluLookAt).
Parmetros: X floatEyes eyex coordinar floatEyes eyey: Coordenada Y eyez: floatEye
s Z coordinar floatThe centrex: posicin X del punto de referencia: floatThe cente
ry y posicin del punto de referencia: floatThe centerz posicin Z del punto de refe
rencia: valor x floatThe upx up vector.
upy: floatThe valor y up vector.
valor Z floatThe upz: up vector.
Nuevo en la versin 1.6.0.
multiplicar() Multiplicar la matriz con auto (desde la izquierda), es decir, se
multiplica la matriz dada por la matriz actual y devolver el resultado (no direc
tamente):
m m.Multiply(n) -&gt; n
parmetros ma: matriz MatrixThe para multiplicar por
normal_matrix() calcula la matriz normal, que es el inverso de la transposicin de
la parte superior izquierda de 3x3 matrix modelview utilizado para transformar
las normales en espacio de cmara/ojo.
Nuevo en la versin 1.6.0.
Perspectiva() crea una perspectiva matrix (directo).
Parmetros
352

fovy: float"Campo de visin angular de aspecto: la relacin floatAspect floatNear zN


ear: plano de recorte: floatFar zFar clippin avin nuevo en la versin 1.6.0.
Proyecto() proyectan un punto en el espacio 3D en una 2d viewport.

Parmetros: X floatPoints objx coordinar floatPoints objy: Coordenada Y: Z floatPo


ints objz coordinar modelo: Modelo MatrixThe proj Matriz: matriz de proyeccin Mat
rixThe vx: floatViewports coordenada X vy: floatViewports coordenada y vw: float
Viewports anchura altura floatViewports vh: Nuevo en la versin 1.7.0.
Rotate() Girar la matriz a travs del ngulo alrededor del eje (x, y, z) (directo).
Parmetros: floatThe ngulo ngulo por el que gira la matriz x: Posicin del punto float
X y: floatY posicin del punto z: Posicin del punto floatZ
scale() Escala la matriz actual por los factores especficos en cada dimensin (dire
cto).
Parmetros x: floatThe factor de escala a lo largo del eje X y: floatThe factor de
escala a lo largo del eje z: floatThe factor de escala a lo largo del eje Z
set() Insertar valores personalizados en la matriz en una lista plana de formato
o formato de matriz de 4x4 como en la siguiente m.set(matriz=[[1.0, 0.0, 0.0, 0
.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]) nuevo en
la versin 1.9.0.
tolist() Recupera el valor de la matriz actual en formato numpy. Por ejemplo m.t
olist() devolver [[1.000000, 0.000000, 0.000000, 0.000000], [0.000000, 1.000000,
0.000000, 0.000000], [0.000000, 0.000000, 1.000000, 0.000000], [0.000000, 0.0000
00, 0.000000, 1.000000]] puede utilizar este formato para enchufar directamente
en el resultado de esta manera numpy numpy.Array(m.tolist() nuevo en la versin 1.
9.0.
translate() Traducir la matriz.
Parmetros x: floatThe factor de traduccin a lo largo del eje X y: floatThe factor
de traduccin a lo largo del eje z: floatThe factor de traduccin a lo largo del eje
Z transponer() devuelven el transpuesto matriz como una matriz nueva.
Nuevo en la versin 1.6.0.
353

view_clip() crea un clip matrix (directo).


Parmetros: floatCo izquierda-derecha: floatCo ORDENADA ordenada inferior: floatCo
ordenada superior: floatCo ordenadas cerca: floatCo ordenadas lejos: floatCo or
denadas perspectivas: intCo ordenadas ha cambiado en la versin 1.6.0: Activar sop
orte para parmetros de perspectiva.
28,18 Vrtice Instrucciones
Este mdulo incluye todas las clases de dibujo simple objetos Vertex.
28.18.1 Actualizacin de las propiedades de
la lista de los atributos de las clases de grficos (p.ej. Tringulo.puntos.Los ndice
s de malla, etc.) no son sino propiedades Kivy propiedades de Python. Como conse
cuencia, la grfica se actualizar slo cuando el propio objeto de la lista se modific
a y no cuando se modifican los valores de lista.
Por ejemplo, en python:
clase miwidget(Button):
kwargs):
tringulo = ObjectProperty(Ninguno) def __init__(self, super(Miwidget
Auto).__init__( kwargs) con self.Canvas:
self.tringulo tringulo(puntos ==[0,0, 100.100, 200,0])
y en kv:
<MyWidget>:
Texto: Actualizar en_press:
self.triangle.puntos[3] = 400
Aunque pulsando el botn tringulo cambiar las coordenadas, los grficos no se actualiz
ar porque la lista en s no ha cambiado. De igual modo, no se producirn actualizacio
nes utilizando cualquier sintaxis que slo cambia los elementos de la lista por ej
emplo self.triangle.puntos[0:2] = [10,10] o self.triangle.puntos.Insert(10), etc
. Para forzar una actualizacin despus de una modificacin, la lista variable en s deb
e ser cambiado, que en este caso puede lograrse con:
<MyWidget>:
Texto: Actualizar en_press:

self.triangle.puntos[3] = 400 self.triangle.Puntos = self.triangle.puntos


classkivy.graphics.vertex_Instructions.Bases: Tringulo kivy.graphics.INSTRUCTIONS
.VertexInstruction
un tringulo 2d.

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

Si el tamao del BorderImage es menor que la suma de sus fronteras, horizontal o v


erticalmente, y esta propiedad est establecida en True, las fronteras sern redimen
sionados para acomodar el tamao menor.
auto_propiedad de escala para establecer si las esquinas se ajusta automticamente
cuando el BorderImage es demasiado pequeo.

propiedad Border para Obtencin/configuracin de la frontera de la clase.


display_propiedad Border para Obtencin/configuracin de la frontera mostrar tamao.
classkivy.graphics.vertex_Instructions.Elipse Bases: kivy.graphics.vertex_Instru
ctions.Rectangle
una elipse en 2D.
Ha cambiado en la versin 1.0.7: Aadido_start y ngulo ngulo_final.
Parmetros: int, segmentos predeterminados a 180definir cuntos segmentos son necesa
rios para dibujar la elipse- cin. El dibujo ser ms suave si tiene muchos segmentos.
ngulo_start: int, por defecto 0especifica el ngulo inicial, en grados, de la porcin
de disco.
ngulo_final: int, por defecto 360 especifica el ngulo final, en grados, de la porc
in de disco.
ngulo_end extremo en ngulo de la elipse en grados, por defecto 360.
ngulo_start ngulo inicial de la elipse en grados, por defecto es 0.
segmentos propiedad para obtener/establecer el nmero de segmentos de la elipse.
classkivy.graphics.vertex_Instructions.Line Bases: kivy.graphics.INSTRUCTIONS.Ve
rtexInstruction
una lnea 2d.
Dibujo de una lnea puede hacerse fcilmente:
con auto.Canvas:
Lnea(puntos=[100, 100, 200, 100, 100, 200], width=10)
La lnea tiene 3 modos de dibujo interno que debe ser consciente para resultados pt
imos:
1.Si la anchura es de 1,0, entonces la norma GL_line de dibujo OpenGL ser utiliza
da.
dash_length y dash_offset funcionar, mientras que las propiedades de la tapa y no
tienen ningn significado comn aqu.
2.Si thewidth es mayor que 1.0, entonces un mtodo de dibujo personalizado, basado
en la triangulacin, se utilizar anddash dash_length_offset no funcionan en este m
odo. Adems, si el color actual tiene un valor alfa inferior a 1.0, una galera de sm
bolos se utiliza internamente para dibujar la lnea.
356

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

ha cambiado en la versin 1.0.8: dash_offset y dash_length se han aadido.


Ha cambiado en la versin 1.4.1: anchura, tapa abatible, cap_PRECISION JOINT_preci
sion, cerrar, elipse, rectngulo se han aadido.
Ha cambiado en la versin 1.4.1: curva de Bezier,_Precision se han aadido
bezier. Utilice esta propiedad para construir una lnea curva, sin calcular thepoi
nts. Slo puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de 2n elementos, siendo n el nmero de puntos.
Uso:
lnea curva(=(x1, y1, x2, y2, x3, y3)
nuevo en la versin 1.4.2.
Nota: los clculos de lneas Bzier son baratos para un bajo nmero de puntos, pero la c
omplejidad es cuadrtica, as las lneas con un montn de puntos puede ser muy caro cons
truir, usar con cuidado!
Nmero de precisin_bezier de iteracin para dibujar la curva entre 2 segmentos, el va
lor por defecto es 180. La curva_precision debe ser al menos 1.
Nuevo en la versin 1.4.2.
Determinar la tapa de la tapa de la lnea, cambia a round . Puede ser una de nin
guno , Plaza o round
nuevo en la versin 1.4.1.
cap_precision nmero de iteracin para dibujar la "ronda" de la PAC, por defecto 10.
El cap_precisin debe ser al menos 1.
Nuevo en la versin 1.4.1.
Crculo Utilice esta propiedad para construir un crculo, sin calcular los puntos. Sl
o puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de (centro_x, en el centro, radius_y_start, ngulo
ngulo_final, seg- mentos):
centro_x y centro_y constituyen el centro del crculo radio representan el radio del
crculo (opcional) y ngulo ngulo_start_end estn en grado. El valor predeterminado es
0 y 360.
(opcional) segmentos es la precisin de la elipse. La propiedad defaultvalue se cal
cula a partir de la gama entre el ngulo.
Tenga en cuenta que es hasta usted paracerrar el crculo o no.
Por ejemplo, para la construccin de un simple elipse, en python:
# simple lnea Circle (Crculo=(150, 150, 50))
# slo de 90 a 180 grados en lnea(crculo=(150, 150, 50, 90, 180))
# slo de 90 a 180 grados, con algunos segmentos de lnea Circle=(150, 150, 50, 90,
180, 20)
358

Nuevo en la versin 1.4.1.


Cerrar Si es True, la lnea ser cerrada.
Nuevo en la versin 1.4.1.
dash_propiedad length para obtener/ajuste de la longitud de los guiones en la cu
rva de
nuevo en la versin 1.0.8.
dash_offset propiedad para obtener/ajuste del desplazamiento entre los guiones e
n la curva de
nuevo en la versin 1.0.8.
Elipse Utilice esta propiedad para construir una elipse, sin calcular thepoints.
Slo puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de (x, y, width, height, ngulo ngulo_start_end, se
gmentos):
x e y representan la parte inferior izquierda de la elipse la anchura y la altura
representan el tamao de la elipse (opcional) y ngulo ngulo_start_end estn en grado. E

l valor predeterminado es 0 y 360.


(opcional) segmentos es la precisin de la elipse. La propiedad defaultvalue se cal
cula a partir de la gama entre el ngulo.
Tenga en cuenta que es hasta usted paracerrar la elipse o no.
Por ejemplo, para la construccin de un simple elipse, en python:
# simple lnea(elipse elipse=(0, 0, 150, 150))
# slo de 90 a 180 grados en lnea(elipse=(0, 0, 150, 150, 90, 180))
# slo de 90 a 180 grados, con algunos segmentos de lnea(elipse=(0, 0, 150, 150, 90
, 180, 20)
nuevo en la versin 1.4.1.
Determinar conjunta la combinacin de la lnea, cambia a round . Puede ser una de
ninguno , round , biselar , miter .
Nuevo en la versin 1.4.1.
_precision conjunta nmero de iteracin para dibujar el conjunto "redonda", cambia a
10. La Junta_precision debe ser al menos 1.
Nuevo en la versin 1.4.1.
Puntos propiedad para obtener/configuracin de puntos de la lnea de
Advertencia: esto siempre reconstruir la totalidad de los grficos de la nueva lis
ta de puntos. Puede ser muy costoso de CPU.
Rectngulo Utilice esta propiedad para construir un rectngulo, sin calcular thepoin
ts. Slo puede establecer esta propiedad, no lo consiguen.
359

El argumento debe ser una tupla de (x, y, width, height):


x e y representan la posicin inferior izquierda del rectngulo la anchura y la altura
representan el tamao de la lnea se cierra automticamente.
Uso:
Lnea(Rectangle=(0, 0, 200, 200)
nuevo en la versin 1.4.1.
_rectngulo redondeado Utilice esta propiedad para construir un rectngulo, sin calc
ular thepoints. Slo puede establecer esta propiedad, no lo consiguen.
El argumento debe ser una tupla de una de las siguientes formas:
(x, y, width, height, esquina_radius) (x, y, width, height, esquina_radius, resolu
cin) (x, y, width, height, esquina_radius1, esquina_radius2, esquina_radius3, esqu
ina_radius4) (x, y, width, height, esquina_radius1, esquina_radius2, esquina_radi
us3, esquina_radius4, resolucin) x e y representan la posicin inferior izquierda de
l rectngulo la anchura y la altura representan el tamao esquina_radius es el nmero de
pxeles entre dos bordes y el centro del arco de crculo unindose es la resolucin nump
er del segmento de lnea que se utilizar para dibujar el arco de crculo en cada esqu
ina (por defecto, 30) La lnea se cierra automticamente.
Uso:
Lnea(_rectngulo redondeado=(0, 0, 200, 200, 10, 20, 30, 40, 100)
nuevo en la versin 1.9.0.
Ancho determinan el ancho de la lnea, por defecto 1.0.
Nuevo en la versin 1.4.1.
classkivy.graphics.vertex_Instructions.Punto Bases: kivy.graphics.INSTRUCTIONS.V
ertexInstruction
una lista de puntos 2d. Cada punto est representado como un cuadrado con una anch
ura/altura de 2 veces el tamao de punto.
Parmetros de puntos: Listalista de puntos en el formato (x1, y1, x2, y2, ...), do
nde cada par de coor- dinates especifica el centro de un nuevo punto
: 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.
Advertencia: a partir de la versin 1.0.7, vrtice instruccin tienen un lmite de 65.53
5 vrtices (ndices de vrtice para ser exactos). 2 entradas en la lista (x, y) se con
vertirn en 4 vrtices. As que el lmite interior de punto() de la clase es de 2^15-2.
punto_add() agrega un punto a la lista currentpoints.

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/Ajustes de propiedad para obtener los puntos centrales en la lista de pun


tos. Cada par de coordenadas especifica el centro de un nuevo punto.
Propiedad pointsize para Obtencin/configuracin de tamao de punto. El tamao se mide d
esde el centro hasta el borde, de manera que un valor de 1,0 significa que el ta
mao real ser de 2.0 x 2.0.
classkivy.graphics.vertex_Instructions.Bases de malla: kivy.graphics.INSTRUCTION
S.VertexInstruction
una malla 2d.
En OpenGL ES 2.0 y en nuestra aplicacin de grficos, no puede tener ms de 65.535 ndic
es.
Una lista de vrtices se describe como:
vrtices = [x1, y1, U1, v1, x2, y2, U2, v2, ...] | | | | +---- i1 ----+---- + i2 ---+
Si desea dibujar un tringulo, aadir 3 vrtices. A continuacin, puede hacer una lista
de ndices como sigue:
indices = [0, 1, 2] Nuevo en la versin 1.1.0.
Parmetros: vertices listalista de vrtices en el formato (x1, y1, U1, v1, x2, y2, U
2, v2...).
ndices: Listalista de ndices en el formato (i1, i2, i3...).
Modo: strMode del vbo. El modo de comprobacin para obtener ms informacin. Los valor
es predeterminados de puntos .
fmt: Listael formato de vrtices, de forma predeterminada, cada vrtice est descrito
por 2D co- ordenadas (x, y) y coordenadas de textura 2D (u, v). Cada elemento de
la lista debe ser una tupla o una lista, de la forma (nombre_variable, tamao y t
ipo) que permitir la asignacin de datos al vrtice glsl instrucciones.
[(b v_pos , 2, b flotante ), b v_tc , 2, b flotante )] permitir usando el atribut
o vec2 v_pos; atributo vec2 v_tc; en glsl s Vertex Shader.
Vertex ndices ndices utilizados para especificar el orden al dibujar la malla.
MODO VBO modo utilizado para dibujar vrtices/ndices. Puede ser uno de los "puntos"
, "lnea_strip , lnea_loop , lneas , tringulos , tringulo_strip o tringulo_fan .
La
lista de vrtices de x, y u, v coordenadas utilizadas para construir la malla. Aho
ra, la instruccin de malla no te permite cambiar el formato de los vrtices, lo que
significa que slo uno + x, y coordenadas de textura.
exceptionkivy.graphics.vertex_Instructions.GraphicException Bases: EXCEPTION
excepcin planteada cuando un error de grficos es despedido.
classkivy.graphics.vertex_Instructions.Bases: kivy Bezier.graphics.INSTRUCTIONS.
VertexInstruction
2d una curva Bzier.
Nuevo en la versin 1.0.8.
Parmetros
361

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

sobre_TOUCH_move() y ON_TOUCH_up() eventos, incluso si el contacto no es enviado


por el padre:
def sobre_TOUCH_down(self, tctil):
toque.grab(self)
en def_TOUCH_move(self, tctil):
Si touch.grab_current es legtima:
# recib mi toque agarr otra cosa:
# es un toque normal
en def_TOUCH_up(self, tctil):
Si touch.grab_current es legtima:
# recibo mi toque agarr, debo soltar!
Toque.soltar(self) else:
# es un toque normal pass
es_MOUSE_desplazamiento devuelve True si el toque es un desplazamiento mousewhee
l
nuevo en la versin 1.6.0.
Mover(args) Mueva el toque a otra posicin
opos devolver la posicin inicial de la pantalla tctil en el sistema de coordenadas
(self.OX, OY) self.
Pop pop() los valores de atributos de la pila
opp volver la posicin anterior de la pantalla tctil en el sistema de coordenadas (
self.px, self.py)
push(attrs=None) empujar los valores de atributo en attrs en la pila
scale_para_screen(w, h, p=none, rotacin=0, smode= None , kheight=0) Posicin de la
escala de la pantalla
oep devolver la posicin en el sistema de coordenadas (0-1 self.sx, self.sy)
Soltar(class_instance) Soltar un toque
classkivy agarr anteriormente.input.MotionEventProvider(dispositivo, args) Bases:
builtins.object
clase base para un proveedor.
start() Iniciar el proveedor. Este mtodo se llama automticamente cuando se inicia
la aplicacin y si la configuracin utiliza el proveedor actual.
stop() parar el proveedor.
update(DISPATCH_fn) Actualizacin del proveedor y enviar todos los nuevos eventos
tctiles aunque el envo_fn argumento.
364

classkivy.input.MotionEventFactory Bases: builtins.object


MotionEvent Factory es una clase que registra todas las fbricas de entrada dispon
ibles. Si crea una nueva fbrica de entrada, usted necesita registrarse aqu:
MotionEventFactory.register( myproviderid ,
staticget MyInputProvider)(nombre) Obtenga una clase de proveedor desde el id de
l proveedor
staticlist() obtiene una lista de todos los proveedores disponibles
staticregister(nombre, classname) registrar un proveedor de entrada en la base d
e datos
29.1 Entrada
29.1.1 Postprocesamiento Calibracin
nuevo en la versin 1.9.0.
Volver a calibrar el dispositivo de entrada para un rango especfico / offset.
1920 = 5760).
digamos que tienes 3 1080p muestra, las 2 primeras son multitouch.
Por defecto, ambos se han mezclado el tacto, el rango ser en conflicto los unos

con los otros: la gama 0-1 se va a 0-5760 px (recuerde, 3


para arreglarlo, debe hacer referencia manualmente. Por ejemplo:
[Input] izquierda = mtdev,/dev/input/event17 Oriente = mtdev,/dev/input/event15
# el lado derecho de la pantalla es slo una pantalla.
A continuacin, puede utilizar el mdulo de posprocesamiento de calibracin:
[posprocesamiento:calibracin] izquierda ==0.3333 xratio oriente = xratio=0.3333,x
offset=0.3333
ahora, los toques en la pantalla de la izquierda ser dentro de 0-0.3333 rango y e
l toque desde el centro de la pantalla estarn dentro del rango 0.3333-0.6666.
classkivy.input.posprocesamiento.La calibracin.InputPostprocCalibration Bases: bu
iltins.object
recalibrar las entradas.
La configuracin debe ir dentro de una seccin denominada posprocesamiento:calibracin
. Dentro de la seccin, debe tener lnea como:
devicename = PARAM=value,PARAM=value
Parmetros: floatValue xratio multiplicar x yratio: floatValue multiplicar y xoffs
et: floatValue agregar a X yoffset: floatValue Agregar a y
365

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

29.1.5 Retener toque


toque de reutilizacin para contrarrestar el comportamiento de dedo perdido
classkivy.input.posprocesamiento.retaintouch.InputPostprocRetainTouch Bases: bui
ltins.object
InputPostprocRetainTouch es un post-procesador para retrasar el evento arriba
de un toque, para reutilizarlo des- der a algunas condiciones. Este mdulo est disea
do para evitar la prdida de dedo toque en algunos hard- ware/setups.
Mantener contacto puede configurarse en el archivo config: Kivy
[posprocesamiento] conservar_time = 100 retain_distancia = 50
El parmetro de distancia est en el rango de 0-1000 y el tiempo en milisegundos.
29.1.6 triple punteo
nuevo en la versin 1.7.0.
Toque para buscar un triple toque
classkivy.input.posprocesamiento.tripletap.InputPostprocTripleTap Bases: builtin
s.object
InputPostProcTripleTap es un post-procesador para verificar si un toque es un tr
iple toque o no. Triple punteo puede configurarse en el archivo config: Kivy
[posprocesamiento] triple_toca_time = 250 triple_toca_distancia = 20
El parmetro de distancia est en el rango de 0-1000 y el tiempo en milisegundos.
find_triple_tap(ref) encontrar un triple toque toque dentro de self.toques. El c
ontacto no debe ser una triple punteo anterior y la distancia debe estar dentro
de los lmites especificados. Adems, el toque perfil debe ser el mismo tipo de cont
acto.
29.2 Los Proveedores
29.2.1 Creacin automtica de proveedor de entrada Entrada de configuracin disponible
para MT Hardware (slo Linux).
Gracias a Marc Tardif para cdigo de sondeo, tomado del scan-para-mt-dispositivo.
La deteccin de dispositivos se realiza por este proveedor. Sin embargo, la lectur
a de la entrada puede realizarse por otros proveedores como: hidinput, mtdev y l
inuxwacom. mtdev es usada antes a otros proveedores. Para obtener ms informacin ac
erca de mtdev, checkmtdev.
Aqu est un ejemplo de auto creacin:
367

[Input] # mediante dispositivo mtdev_%(name)s = probesysfs,Provider=dispositivo


hidinput mtdev using #_%(name)s = probesysfs,Provider=hidinput # utilizando mtde
v con una coincidencia de nombre de dispositivo_%(name)s = probesysfs,Provider=m
tdev,match=acer
# utilizando hidinput con parmetros personalizados a hidinput (todo en una lnea) %
(name)s = probesysfs, Provider=hidinput,PARAM=min_pressure=1,PARAM=max_pressure=
99
# Tambin puede coincidir con su pantalla tctil Wacom toque = probesysfs,match=E3 D
edo,Provider=linuxwacom, select_ALL=1,PARAM=mode=toque # y su lpiz Wacom = probes
ysfs,match=E3,Pluma Provider=linuxwacom, select_ALL=1,PARAM=mode=pen
de forma predeterminada, el mdulo ProbeSysfs enumerar hardware desde el directorio
/sys/class/dispositivo de entrada, y con- figura el hardware con ABS_mt_POSITIO
N_X capacidad. Pero, por ejemplo, la pantalla wacom no admite esta capacidad. Pu
ede evitar este comportamiento poniendo select_ALL=1 en la lnea de configuracin.
29.2.2 definiciones comunes para un proveedor de Windows
Este archivo proporciona las definiciones comunes de constantes utilizadas por W
M_Touch / WM_Pen.
29.2.3 Salto Motion - dedo slo
ratn 29.2.4 la implementacin del proveedor

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

ha cambiado en la versin 1.9.0.


Ahora puede controlar de forma selectiva si inici un clic como se describi anterio
rmente, se emulan multi-touch.
Si el contacto se ha iniciado en la forma mencionada anteriormente (por ejemplo,
el botn derecho del ratn), un multitouch_sim valor se agregar al perfil del contac
to, y un multitouch_sim propiedad se agregar al tacto. Por defecto, el multitouch
_sim es True y multitouch ser emulado para que toque. Si, sin embargo, multi- tou
ch_on_demand se agrega al archivo config:
[Input] = ratn mouse,multitouch_on_demanda
_sim multitouch entonces el valor predeterminado es False. En ese caso, si el mu
ltitouch_sim est establecida en True antes de soltar el botn del ratn (por ejemplo,
en_TOUCH_down/mover), el toque simular un evento multi-touch. Por ejemplo:
si multitouch en touch.profile:_sim
touch.multitouch_sim = True La
siguiente es una lista de los valores admitidos para la propiedad theprofile lis
ta.
Valor de perfil Descripcin botn del ratn (uno de izquierda, derecha, centro o scrol
lup scrolldown). Se accede a travs de la propiedad botn .
pos de posicin 2D. Tambin se refleja en el x,y andpos propiedades.
multi- Especifica si el multitouch es simulado o no. Se accede a travs de la sim
touch_ multitouch_sim propiedad.
29.2.5 soporte nativo para entrada HID desde el kernel de linux
soporta comienza a partir de la versin 2.6.32-ubuntu, o 2.6.34.
Para configurar HIDInput, agregar a su configuracin:
[Input] # devicename = hidinput,/dev/input/eventXX # ejemplo con Stantum MTP4.3"
pantalla stantum = hidinput,/dev/input/event2
Nota: Usted debe tener acceso de lectura al evento de entrada.
Puede utilizar un rango personalizado para la X, Y y valores de presin. Para algu
nos controladores, la gama inform no es vlido. Para corregirlo, puede agregar esta
s opciones de la lnea de argumentos:
Invertir_x : 1 para invertir el eje X Invertir_y : 1 para invertir el eje Y min_
position_x : X como mnimo max_position_x : X mxima min_position_y : y como mnimo ma
x_position_s :
Mxima y min_presin: presin mnima max_presin: presin mxima
Rotacin de entrada : gira la coordenada (0, 90, 180, 270)
369

Por ejemplo, en el Asus T101M, la pantalla tctil informa de un rango de 0-4095 pa


ra las coordenadas X e Y val- ores, pero los verdaderos valores estn en un rango
entre 0-32768. Para corregir esto, puede agregar la siguiente configuracin:
[Input] t101m = hidinput,/dev/input/event7,max_position_x=32768,max_y_position=3
2768
Nuevo en la versin 1.9.1: Configuracin de rotacin token aadido.
29.2.6 soporte nativo para dispositivos Multitouch en Linux, usando libmtdev.
El proyecto Mtdev es una parte de la arquitectura de Ubuntu Maverick multitouch.
Puede leer ms sobre http://wiki.ubuntu.com/Multitouch
configurar MTDev, es preferible usar probesysfs proveedores. Checkprobesysfs par
a obtener ms infor- macin.
De lo contrario, agregue esto a su configuracin:
[Input] # devicename = hidinput,/dev/input/eventXX acert230h = mtdev,/dev/input/
event2
Nota: Usted debe tener acceso de lectura al evento de entrada.
Puede utilizar un rango personalizado para la X, Y y valores de presin. En alguno
s controladores, la gama inform no es vlido. Para corregirlo, puede agregar estas
opciones de la lnea de argumentos:
Invertir_x : 1 para invertir el eje X Invertir_y : 1 para invertir el eje Y min_
position_x : X como mnimo max_position_x : X mxima min_position_y : y como mnimo ma
x_position_s :
Mxima y min_presin: presin mnima max_presin: presin mxima
min_TOUCH_major : anchura mnima forma max_TOUCH_major : anchura mxima de forma min
_TOUCH_minor : anchura mnima forma max_TOUCH_minor : Altura mxima de forma
giro : 0,90,180 o 270 para girar el
soporte nativo de MultitouchSupport 29.2.7 marco para MacBook (MaxOSX plat- form
)
29.2.8 El soporte nativo de tableta Wacom de linuxwacom driver
para configurar LinuxWacom, agregar a su configuracin:
370

[Entrada] Bolgrafo = linuxwacom,/dev/input/event2,mode=pen dedo = linuxwacom,/dev


/input/event3,mode=tacto
Nota: Usted debe tener acceso de lectura al evento de entrada.
Puede utilizar un rango personalizado para la X, Y y valores de presin. En alguno
s controladores, la gama inform no es vlido. Para corregirlo, puede agregar estas
opciones de la lnea de argumentos:
Invertir_x : 1 para invertir el eje X Invertir_y : 1 para invertir el eje Y min_
position_x : X como mnimo max_position_x : X mxima min_position_y : y como mnimo ma
x_position_s :
Mxima y min_presin: presin mnima max_presin: presin mxima
compatibilidad 29.2.9 para WM_PEN mensajes (plataforma Windows)
ID classkivy.input.providers.wm_pen.WM_Pen(device,, args) Bases: kivy.input.moti
onevent.MotionEvent
MotionEvent representando el evento WM_Pen. Admite el perfil de pos.
29.2.10 Soporte para WM_TOUCH mensajes (plataforma Windows)
ID classkivy.input.providers.wm_touch.WM_MotionEvent(device,, args) Bases: kivy.
input.motionevent.MotionEvent
MotionEvent representando el WM_MotionEvent evento. Admite pos, forma y tamao de
los perfiles.
29.2.11 TUIO Proveedor de entrada
TUIO es el estndar de facto de protocolo de red para la transmisin de toque y fidu
cial informacin entre un servidor y un cliente. Para aprender ms acerca de TUIO (q
ue est basado en el protocolo OSC), consulte Http://tuio.org - La especificacin de
be ser de especial inters.
Configurar un proveedor de TUIO en el archivo config.ini

El TUIO proveedor puede ser configurado en el archivo de configuracin en la seccin


[Input]:
[Input] # Nombre = tuio, <ip>: <port>= tuio multitouchtable,192.168.0.1:3333
371

Configurar un proveedor de TUIO en la App


debe agregar el proveedor antes de que se ejecute la aplicacin, como este:
de kivy.app importacin de kivy app.config importar
clase Config TestApp(App):
def construir(self):
Config.set( input , multitouchscreen1 , tuio,0.0.0.0:3333 ) # Tambin puede aadir
una segunda escucha TUIO # Config.set( input , source2 , tuio,0.0.0.0:3334 )
# y despus hacer las cosas usuales # ...
volver
classkivy.input.providers.tuio.TuioMotionEventProvider(device, args) Bases:
el proveedor TUIO kivy.input.provider.MotionEventProvider escucha a una toma y g
estiona algunos de los mensajes entrantes de OSC:
/tuio/2Dcur /tuio/2Dobj puede extender fcilmente el proveedor para manejar nuevas r
utas TUIO as:
# Crear una clase para manejar el nuevo tipo de TUIO/ruta # Sustituir NEWPATH co
n la ruta que desea manejar la clase TuioNEWPATHMotionEvent(MotionEvent):
def __init__(self, id, args):
Super(TuioNEWPATHMotionEvent, auto).__init__(id, args)
def depack(self, args):
# En este mtodo, aplicar "desempaquetar" para los recibidos # argumentos. Usted s
e traducen bsicamente desde TUIO args a Kivy # MotionEvent variables. Si todos lo
s que recibe son # los valores x e y, puede hacerlo como este:
si len(args) == 2:
self.sx, self.sy = args self.profile = ( pos , ) self.sy = 1 - self.sy super(Tui
oNEWPATHMotionEvent, auto).depack(args)
# registrarlo con el TUIO MotionEvent proveedor.
# Obviamente tendrs que sustituir los marcadores de posicin de la ruta adecuada.
TuioMotionEventProvider.register( /ruta/tuio , TuioNEWPATHMotionEvent)
Nota: El nombre de la clase es de ninguna importancia tcnica. Tu clase ser asociad
a con el camino que usted pase a theregister(). Para simplificar las cosas, debe
asignar un nombre a la clase despus de la ruta en la que administra, aunque.
staticcreate(oscpath
kwargs) Crear un evento tctil desde una ruta TUIO
staticregister(oscpath classname), registrar una nueva ruta para manejar en prov
eedor TUIO
start() Iniciar el proveedor TUIO
372

stop() detiene el proveedor TUIO


staticunregister(oscpath classname), anular el registro de un trazado para deten
er la manipulacin en el TUIO proveedor
actualice(DISPATCH_fn) Actualizar el TUIO provider (pop eventos desde la cola)
classkivy.input.providers.tuio.Tuio2dCurMotionEvent(device, id, args) Bases:
2dCur kivy.input.providers.tuio.TuioMotionEvent un toque TUIO.
classkivy.input.providers.tuio.Tuio2dObjMotionEvent(device, id, args) Bases:
2dObj TUIO kivy.input.providers.tuio.TuioMotionEvent un objeto.
29.3 Entrada
nueva grabadora en la versin 1.1.0.
Advertencia: esta parte de Kivy es an experimental y esta API est sujeta a cambios
en versiones futuras.

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

de kivy.input.grabador grabador de importacin


def_loop recorder(ejemplo, valor):
si el valor es False:
ejemplo.play = True
= Registrador REC(filename= myrecorder.kvi ) rec.bind(Reproducir=recorder_loop)
rec.play = True
29.3.3 Grabacin ms atributos
puede extender los atributos para guardar en una condicin: los valores de los atr
ibutos deben ser valores simples, no instancias de clases complejas.
Digamos que usted quiere guardar el ngulo y la presin del tacto, si est disponible:
desde kivy.input.grabadora grabadora
grabadora de importacin rec =(filename= myrecorder.kvi , record_attrs=[ is_touch
, x , y , ngulo , presin ], RECORD_profile_mask=[ pos , ngulo , presin ]) rec.
registro = True
o con mdulos variables:
$ python main.py -m grabador,attrs=es_touch:sx:sy:ngulo:presin, perfil_mask=pos:ngu
lo:presin
29.3.4 Limitaciones conocidas
No se pueden guardar los atributos con instancias de clases complejas.
Los valores que representan el tiempo no ser ajustada.
Slo puede reproducir los registros completos. Si un begin/update/evento end falta
, esto podra conducir a toques de Ghost.
Detener la reproduccin antes del final puede conducir a ghost toques.
classkivy.input.recorder.Grabador( kwargs) Bases: kivy.event.EventDispatcher
clase grabador. Consulte la documentacin del mdulo para obtener ms informacin.
Nmero de contador de eventos registrados en el ltimo perodo de sesiones.
contador es aNumericProperty y por defecto es 0, es de slo lectura.
filename Nombre de archivo para guardar la salida del grabador.
filename es aStringProperty y predeterminados a recorder.kvi .
Boolean play para iniciar/detener la reproduccin del archivo actual (si existe).
play es aBooleanProperty y el valor predeterminado es False.
374

registro Boolean para iniciar/detener la grabacin de eventos de entrada. El


registro es aBooleanProperty y su valor por defecto es false.
record_attrs Atributos para grabar desde el evento de movimiento.
record_attrs es aListProperty y predeterminados a [ is_touch , x , y ].
record_profile_mask perfil para guardar en el evento de movimiento falso cuando
reproducen.
record_profile_mask es aListProperty y predeterminados a [ pos ].
Ventana Ventana de ejemplo para acoplar el grabador. Si ninguno, se utilizar la i
nstancia predeterminada.
Ventana es aObjectProperty y predeterminados a Ninguno.
29.4 Evento de movimiento
la MotionEvent es la clase base para los eventos proporcionados por dispositivos
sealadores (tctil y no tctil). Esta clase define todas las propiedades y mtodos nec
esarios para manejar en 2D y 3D de movimientos pero tiene muchas ms posibilidades
.
Nota: Usted no cree nunca theMotionEvent usted mismo: este es el papel de thepro
viders.
29.4.1 Evento de movimiento y tocar
diferenciamos entre un evento de movimiento y toque evento. Un evento tctil es aM
otionEvent pos con el perfil. Estos eventos slo se expiden en todo el rbol de widg
et.
1. TheMotionEvent s son recopilados a partir de proveedores de insumos.
2. Todos theMotionEvent s son despachados desde el_motion().
3. Si tiene un perfil aMotionEvent pos, despachamos a travs de_TOUCH_down(),_TOUC
H_move() ydel_TOUCH_up().
29.4.2 escuchando a un evento de movimiento
si desea recibir todos los MotionEvents, toque o no, puede enlazar los MotionEve
nt desde loskits a su propia llamada:
def sobre_motion(self, etype, motionevent):
# recibir todos los eventos de movimiento.
pass
Window.bind(on_motion=on_motion)
tambin puede escuchar a los cambios de la posicin del ratn por watchingmouse_pos.
375

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

dsx = None Delta entre self.sx y self.psx, en rango 0-1.


dsy = Ninguno Delta entre self.sy y self.psy, en rango 0-1.
dsz = None Delta entre self.sz y self.psz, en rango 0-1.
Dx = Ninguno Delta entre self.x y self.px, en rango de ventana
dy = None Delta entre auto y auto.y.py, en rango de ventana
dz = None Delta entre self.z y self.PZ, en rango de ventana
grab(class_instance, exclusivo=false) Agarrar este evento de movimiento. Usted p
uede agarrar un toque si desea recibir en subsiguientes_TOUCH_move() y ON_TOUCH_
up() eventos, incluso si el contacto no es enviado por el padre:
def sobre_TOUCH_down(self, tctil):
toque.grab(self)
en def_TOUCH_move(self, tctil):
Si touch.grab_current es legtima:
# recib mi toque agarr otra cosa:
# es un toque normal
en def_TOUCH_up(self, tctil):
Si touch.grab_current es legtima:
# recibo mi toque agarr, debo soltar!
Toque.soltar(self) else:
# es un toque normal pasar
grab_current = Ninguno utilizado para determinar qu widget el toque ha sido envia
do. Verificar thegrab() fun- cin para obtener ms informacin.
id = Ninguno Id del tacto, no Restriccin de unic. Este es generalmente el Id esta
blecido por el proveedor de entrada, como ID de TUIO. Si tiene varios TUIO fuent
e, el mismo id puede ser utilizado. Prefiere en lugar del atributo useuid.
is_DOUBLE_toque = Ninguno indican si el toque es un doble toque o no
es_MOUSE_desplazamiento devuelve True si el toque es un desplazamiento mousewhee
l
nuevo en la versin 1.6.0.
Se_touch = Ninguno True si el evento de movimiento es un toque. Puede ser verifi
cada tambin ispos isprofile.
is_triple_toque = Ninguno indican si el toque es un triple toque o no es
nuevo en la versin 1.7.0.
377

move(args) Mueva el toque a otra posicin


opos devolver la posicin inicial de la pantalla tctil en el sistema de coordenadas
(self.OX, OY) self.
osx = Ninguno X de origen, posicin en la gama 0-1.
osy = Ninguno y de origen, posicin en la gama 0-1.
osz = Ninguno origen posicin Z, en el rango de 0-1.
ox = Ninguno X de origen, posicin en rango de ventana
oy = Ninguno y de origen, posicin en la ventana
Origen gama oz = ninguna posicin Z, en rango de ventana
Pop pop() los valores de los atributos de la pila
pos = ninguna posicin (X, Y), en el rango de ventana
opp volver la posicin anterior de la pantalla tctil en el sistema de coordenadas (
self.px, self.py)
perfil = ninguno de los perfiles utilizados actualmente en el toque
psx = Ninguno Posicin X anterior, en el intervalo 0-1.
psy = Ninguno anterior, en posicin y rango 0-1.
psz = ninguna posicin Z anteriores, en el rango de 0-1.
push(attrs=None) empujar los valores de atributo en attrs en la pila
push_attrs_stack = Ninguno Atributos para empujar de forma predeterminada, cuand
o nos usepush(): x, y, z, dx, dy, dz, OX, OY y OZ, px, py, pz.
px = ninguna posicin X anterior, en rango de ventana
py = ninguna posicin y anterior, en rango de ventana
pz = ninguna posicin Z anteriores, en la ventana escala
_para_screen(w, h, p=none, rotacin=0, smode= None , kheight=0) Posicin de la escal
a de la
forma de la pantalla = ninguna forma de tocar, subclase ofShape. De forma predet
erminada, la propiedad se establece en Ninguno
378

oep devolver la posicin en el sistema de coordenadas (0-1 self.sx, self.sy)


sx = ninguna posicin X en el intervalo 0-1
sy = ninguna posicin y, en 0-1 gama
sz = ninguna posicin Z, en el rango de 0-1
time_end = ninguna hora del evento final (ltimo uso tctil)
hora_inicio = ninguno momento inicial de la creacin tctil
time_update = ninguna hora de la ltima actualizacin
triple_toca_time = Ninguno si el toque es ais_triple_toca, este es el periodo de
tiempo entre el primer toque y el toque actual.
Nuevo en la versin 1.7.0.
Ud = ninguno de diccionario de datos de usuario. Utilizar este diccionario para
guardar sus propios datos en el touch.
uid = Ninguna Restriccin de unic ID del contacto. Puede utilizar esta propiedad,
nunca ser el mismo cruzando todos los toques.
Soltar(class_instance) Soltar un toque agarr anteriormente
x = ninguna posicin X, en rango de ventana
y = ninguna posicin y, en la ventana rango
z = ninguna posicin Z, en rango de ventana
29.5 eventos movimiento
fbrica fbrica ofMotionEvent proveedores.
classkivy.input.factory.MotionEventFactory Bases: builtins.object
MotionEvent Factory es una clase que registra todas las fbricas de entrada dispon
ibles. Si crea una nueva fbrica de entrada, usted necesita registrarse aqu:
MotionEventFactory.register( myproviderid ,

staticget MyInputProvider)(nombre) Obtenga una clase de proveedor desde el id de


l proveedor
staticlist() obtiene una lista de todos los proveedores disponibles
379

staticregister(nombre, classname) registrar un proveedor de entrada en la base d


e datos
29.6 Movimiento
clase abstracta de proveedor de eventos para la aplicaci n de un proveedor Motio
nEvent. La aplicacin debe admitir delinicio(), stop()() los mtodos andupdate
classkivy.input.provider.MotionEventProvider(device, args) Bases: builtins.objec
t
clase base para un proveedor.
start() Iniciar el proveedor. Este mtodo se llama automticamente cuando se inicia
la aplicacin y si la configuracin utiliza el proveedor actual.
stop() parar el proveedor.
update(DISPATCH_fn) Actualizacin del proveedor y enviar todos los nuevos eventos
tctiles aunque el envo_fn argumento.
29.7 Evento de movimiento forma
representan la forma de theMotionEvent
classkivy.input.shape.Shape Bases: builtins.object
clase abstracta para todas las implementaciones de una forma
classkivy.input.shape.ShapeRect Bases: kivy.input.shape.
clase Shape para la representacin de un rectngulo.
altura altura del rect
width fo el rect
380

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

El contenido puede contener definiciones de regla, una raz widget, definiciones d


e clases dinmicas y plantillas:
# La sintaxis de la definicin de una norma. Tenga en cuenta que algunas Reglas pu
eden compartir el mismo # Definicin (como en CSS). Nota las llaves: son parte de
la definicin.
<Rule1,Rule2>:
# .. Definiciones ..
<Rule3>:
# .. Definiciones ..
# La sintaxis para crear un widget RootClassName root:
# .. Definiciones ..
# La sintaxis para crear una clase dinmica <NewWidget@BaseClass>:
# .. Definiciones ..
# La sintaxis para crear una plantilla [Nombredeplantilla@BaseClass1,BaseClass2]
:
# .. Definiciones ..
Independientemente de si se trata de una regla, root widget, clase dinmica o plan
tilla que est definiendo, la definicin debera tener este aspecto:
# con las llaves es una regla. Sin ellos, es una raz de widget.
<ClassName>:
: valor1 prop1 prop2: valor2
canvas:
CanvasInstruction1:
canvasprop1: valor1 CanvasInstruction2:
canvasprop2: valor2
archivo AnotherClass:
prop3: valor1
Aqu prop1 y prop2 son las propiedades de ClassName y prop3 es propiedad de archiv
o AnotherClass. Si el widget no tiene una propiedad con el nombre dado, ser automt
icamente anObjectProperty cre- ados y aadido al widget.
Archivo AnotherClass se crea y se agrega como un elemento secundario de la insta
ncia ClassName.
La sangra es importante y debe ser coherente. El espacio debe ser un mltiplo del nm
ero de espacios utilizados en la primera lnea con sangra. Los espacios son alentad
os: mezcla de tabulaciones y espacios no se recomienda.
El valor de una propiedad debe ser dada en una sola lnea (por ahora, al menos).
la propiedad Canvas es especial: puede colocar instrucciones grficas para crear u
na interfaz grfica de repre- sentation de la clase actual.
Aqu hay un ejemplo simple de un kv archivo que contiene un widget de root:
#:kivy 1.0
Botn:

texto:
382

hola mundo

ha cambiado en la versin 1.7.0: La sangra no est limitado a 4 espacios ms. El espaci


o debe ser un mltiplo del nmero de espacios utilizados en la primera lnea con sangra
.
Ambos lacarga_file() y lacarga_string() mtodos devuelven el widget raz definida en
el archivo de kv/cadena. Tambin podrn agregar cualquier clase y definiciones de p
lantilla de theFactory para uso posterior.
30.3 Las expresiones de valor, On_expresiones de propiedad, identificadores y pa
labras clave reservadas
cuando se especifica el valor de una propiedad, el valor ser evaluado como una ex
presin de Python. Esta expresin puede ser esttica o dinmica, lo que significa que el
valor puede utilizar los valores de otras propiedades utilizando palabras clave
reservadas.
auto la palabra clave auto hace referencia a la instancia actual de "widget":
Botn:
self.estado % texto: Mi estado es %s
Esta palabra clave root est disponible slo en definiciones de regla y representa l
a raz widget de la regla (la primera instancia de la regla):
<MyWidget>:
custom: hola mundo :
texto: root.
aplicacin personalizada Esta palabra se refiere siempre a la instancia de la apli
cacin. Es el equivalente a una llamada a kivy.app.App.get_RUNNING_app() en Python
.
Etiqueta:
texto: app.name
args esta palabra clave est disponible en_ <action>Las devoluciones de llamada. S
e remite a los argumentos pasados a la funcin callback.
TextInput:
en_foco: self.insert_text("Focus" si args[1], de lo contrario, "ningn foco")
30.3.1
puede contener definiciones de clase de ids ids que puede utilizarse como palabr
as clave:
<MyWidget>:
:
id: botn btn1: botn
btn1.state % texto: "El estado del otro botn es %s
Tenga en cuenta que el id no estarn disponibles en el widget Ejemplo: se utiliza
exclusivamente para referencias externas. id es un weakref al widget, y no el pr
opio widget. El widget en s puede ser accedido con id.__self__ (Btn1.__self__ en
este caso).
Cuando el archivo se procesa, kv weakrefs a todos los widgets tagged with ID se
agrega a la raz widgets ids diccionario. En otras palabras, siguiendo el ejemplo
anterior, el estado de los botones tambin podran acceder de la siguiente manera:
383

widget = Miwidget() estado = widget.ids["Btn1"].state


# o, como alternativa, sintaxis, estado = widget.ids.btn1.El Estado
nota que el widget ultraperifricas aplica las reglas de kv a todos sus widgets in
terior antes que las dems reglas se aplican. Esto significa que si un widget inte
rior contiene ids, estos identificadores pueden no estar disponibles durante el
interior del widget __init__.

30.3.2 expressons vlido


hay dos lugares que aceptan statments python en un archivo kv: despus de una prop
iedad, que asigna a la propiedad el resultado de la expresin (como el texto de un
botn como se muestra arriba) y despus un on_propiedad, que ejecuta la instruccin c
uando se actualiza la propiedad (como en_state).
En el primer caso, la expresin slo puede abarcar una sola lnea, no puede extenderse
a varias lneas con newline escapar y debe devolver un valor. Un ejemplo de una e
xpresin vlida istext: self.estado y ( Up si self.State == normal , ms down ).
En este ltimo caso, varias declaraciones de una sola lnea son vlidas, incluyendo mu
lti-lnea declaraciones que escapar de su nueva lnea, siempre que no se aada un nive
l de indentacin.
Ejemplos de declaraciones vlidas son:
on_pulse: si self.State == normal : print( normal ) en_state:
si self.State == normal : print( normal ) else: print( Down ) si self.State ==
normal : \ print( multiline normal") for i in range(10): print(i) print([1,2,3,
4, 5,6,7])
Un ejemplo de una instruccin no vlida:
en_state:
si self.State == normal :
print( normal )
30.4 Relacin entre valores y propiedades
cuando se utiliza el lenguaje de Kivy, usted podra notar que debemos hacer algn tr
abajo detrs de las escenas para auto- matically hacer que las cosas funcionen cor
rectamente. Usted debe saber thatProperties aplicar el patrn de diseo observador.
Eso significa que puede enlazar su propia funcin a ser llamada cuando cambia el v
alor de una propiedad (es decir, usted observar pasivamente la propiedad de posi
bles cambios).
El idioma Kivy detecta propiedades en su expresin de valor y crear callbacks a au
to- matically actualizar la propiedad a travs de su expresin cuando se producen ca
mbios.
He aqu un ejemplo sencillo que demuestra este comportamiento:
Botn:
texto: Str(self.state)
384

En este ejemplo, el analizador detecta que el auto.state es un valor dinmico (una


propiedad). Elestado propiedad del botn puede cambiar en cualquier momento (cuan
do el usuario toca). Ahora queremos este botn para mostrar su propio estado como
texto, aun cuando los cambios de estado. Para ello, utilizamos la propiedad esta
tal del botn y utilizarlo en la expresin de valor de la propiedad Text del botn, qu
e controla el texto que se mostrar en el botn (tambin podemos convertir el estado e
n una representacin de cadena). Ahora, siempre que el estado del botn cambia la pr
opiedad text se actualizar automticamente.
Recuerde: El valor es una expresin de python! Esto significa que usted puede hace
r algo ms interesante como:
Botn:
texto: chasquido mundial si self.State == normal si no Release me!"
El texto del botn cambia con el estado del botn. De forma predeterminada, el texto
del botn ser chasquido mundial, pero cuando el botn est pulsado, el texto cambiar
a Release me!".
Ms precisamente, el analizador de lenguaje kivy detecta todas las subcadenas de l
a forma X.a.b donde X es legtima o raz o app o un conocido id, y a y b son propied
ades: a continuacin agrega las dependencias adecuadas para provocar que la restri
ccin a ser reevaluados cuando algo cambia. Por ejemplo, este funciona exactamente
como se esperaba:
<IndexedExample>:
beta: self.a.b.c.d [Auto]

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

# la herencia mltiple de clases(ButtonBehavior NewWidget, Etiqueta):


pasar
cualquier nuevas propiedades, normalmente aadido en el cdigo Python, debe ser decl
arado en primer lugar. Si la propiedad no existe en la clase dinmica, se crear aut
omticamente como anObjectProperty (pre 1.8.0) o como una propiedad escrito apropi
ado (desde la versin 1.8.0).
Ha cambiado en la versin 1.8.0: Si el valor de la propiedad es una expresin que se
puede evaluar de inmediato (no hay enlace externo), entonces el valor se utiliz
ar como valor predeterminado de la propiedad, y el tipo del valor que se utilizar
para la especializacin de la clase de la propiedad. En otros trminos: si se declar
a: "hello world", un newStringProperty ser instanciado, con el valor por defecto
"Mundo". Listas, tuplas, diccionarios y cadenas son compatibles.
Vamos a ilustrar el uso de estas clases dinmicas con una implementacin de un botn d
e imagen bsica. Podramos derivar nuestras clases desde el botn y simplemente agrega
r una propiedad para el nombre de archivo de imagen:
<ImageButton@Button>:
Fuente: ninguna
imagen:
Fuente: root.fuente pos: root.pos tamao: root.size
# vamos a utilizar las nuevas clases de otra regla:
<MainUI>:
BoxLayout:
ImageButton:
Fuente: hola.png" en_press: root.do_algo():
Fuente: ImageButton world.png" en_press: root.do_algo_else()
en Python, puede crear una instancia de la clase dinmica como sigue:
de kivy.factory Importacin botn Fbrica_inst = Factory.ImageButton()
Nota: Utilizar clases dinmicas, un nio de clase pueden declararse antes de su padr
e. Sin embargo, esto lleva a la situacin nada intuitivo donde el padre de propied
ades o mtodos reemplazan a los del nio. Tenga cuidado si usted decide hacerlo.
30.7 Las plantillas
ha cambiado en la versin 1.7.0: Uso de plantilla ya est obsoleto. Por favor, utili
ce las clases dinmicas en su lugar.
30.7.1 Sintaxis de plantillas
utilizando una plantilla de Kivy requiere 2 cosas:
1. Un contexto para pasar por el contexto (ctx dentro de plantilla).
387

kv 2. una definicin de la plantilla.


La sintaxis de una plantilla:
# con slo una clase base [ClassName@BaseClass]:
# .. Definiciones ..
# con ms de una clase base [ClassName@BaseClass1,BaseClass2]:
# .. Definiciones ..
Por ejemplo, para una lista, tendrs que crear una entrada con una imagen de la iz
quierda, y una etiqueta de la derecha.
Puede crear una plantilla para hacer esa definicin ms fcil de usar. Por lo tanto, v
amos a crear una plantilla que utiliza 2 entradas en el contexto: un nombre de a
rchivo de imagen y un ttulo:
[IconItem@BoxLayout]:
Imagen:
Fuente: ctx.Image Label:

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 # &lt;&lt; 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 # &lt;&lt; # root.prop1 incluso

si es una propiedad, si cambia de valor, ctxkey # no se actualizarn


389

definiciones de plantilla tambin sustituir las definiciones de nombre similar en


su totalidad y, por lo tanto, no admite la herencia.
30.8 redefinir un estilo del widget
a veces nos gustara heredar de un widget para utilizar sus propiedades Python sin
utilizar tambin su .kv estilo definido. Por ejemplo, nos gustara heredar de una e
tiqueta, pero tambin nos gustara definir nuestras propias instrucciones de lienzo
en lugar de automticamente utilizando el lienzo instrucciones heredadas de la eti
queta. Esto lo podemos lograr mediante la anteposicin de un guin (-) antes del nom
bre de la clase en el archivo .kv definicin de estilo.
En myapp.py:
clase miwidget(etiqueta):
pass
y en mi.kv:
&lt;-Miwidget&gt;:
canvas:
COLOR:
rgb: 1, 1, 1 Rectngulo:
Tamao: (32, 32)
Miwidget tendr ahora un rectngulo de color y la instruccin en su lienzo sin ninguna
de las instrucciones heredadas de la etiqueta.
30.9 redefinir un estilo
similar propiedad del widget para redefinir un estilo del widget, a veces nos gu
stara heredar de un widget, mantener todos sus estilos definidos de KV, excepto p
ara el estilo que se aplica a una propiedad especfica. Por ejemplo, nos gustara he
redar de un botn, pero tambin nos gustara establecer nuestro propio Estado_image, e
n lugar de depender del background_NORMAL_down antecedentes y valores. Esto lo p
odemos lograr mediante la anteposicin de un guin (-) antes del nombre de la propie
dad state_image en el archivo .kv definicin de estilo.
En myapp.py:
clase miwidget(Button):
nuevo_background = StringProperty( mi_background.png")
y en mi.kv:
<MyWidget>:
-estado_image: self.new_background
miwidget tendr ahora un estado_image antecedentes establecidos slo por nueva_backg
round y no por cualquiera de los estilos anteriores que hayan estado set_image.
Nota: Aunque las reglas anteriores se borran, todava son aplicados durante la con
struccin del widget y slo se elimina cuando la nueva norma con el guin es alcanzado
. Esto significa que, inicialmente, las normas anteriores podran utilizarse para
establecer la propiedad.

30.10 Fin de kwargs 390 KV y


propiedades de la aplicacin de la regla se puede inicializar en KV as como en pyth
on. Por ejemplo, en KV:
<MyRule@Widget>:
Texto: Hola rampa: 45.
Orden: self.x + 10
Luego miregla() inicializa los tres kivy propiedades a los dados los valores de
KV. Por separado en python, si las propiedades propiedades kivy existe ya como u
no puede hacer por ejemplo miregla(lnea= Adis , side=55).

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:

#:incluir [force] <file>


Incluye un archivo de kivy externo. Esto le permite dividir los widgets complejo
s en sus propios archivos. Si include es forzado, el archivo primero se descarga
y se vuelve a cargar de nuevo. Por ejemplo:
# Test.kv #:incluir mycomponent.kv #:incluyen la fuerza miboton.kv
<Rule>:
Estado: normal MyButton:
MyComponent:
392

# mycomponent.kv #:incluir miboton.kv


<MyComponent>:
MyButton:
# miboton.kv
<MyButton>:
canvas:
COLOR:
rgb: (1.0, 0.0, 0.0) rectngulo:
pos: self.pos tamao: (Self.tamao[0]/4, auto.tamao[1]/4)
classkivy.lang.Bases: kivy observable.event.ObjectWithUid
observable es un ramal clase define los mtodos necesarios para la encuadernacin. E
ventDispatcher (LA) es un ejemplo de una clase que implementa la interfaz de enl
ace. Ver detalles de EventDispatcher.
Nuevo en la versin 1.9.0.
fbind().fbind SeeEventDispatcher().
Nota: Para mantener la compatibilidad con las clases derivadas que pueden haber
heredado de antes, la observable fbind() mtodo fue agregado. La apli- cacin de pre
determinado fbind() es crear una funcin parcial que pasa a enlazar al guardar el
uid y largs/kwargs. Sin embargo,funbind() (andunbind_uid()) son bastante inefica
z puesto que primero tenemos que buscar esta funcin parcial mediante el largs/kwa
rgs o uid y luego llamar unbind() en la funcin devuelto. Se recomienda para sobre
scribir estos mtodos de rived clases para enlazar directamente para obtener un me
jor rendimiento.
Asimismo toEventDispatcher.fbind(), este mtodo devuelve 0 en caso de error y un ni
co uid positivo sobre el xito. Este uid puede utilizarse withunbind_uid.
funbind()()().andEventDispatcher Seefbind funbind().
uid_unbind()() andEventDispatcher Seefbind.uid_unbind().
classkivy.lang.BuilderBase Bases: builtins.object,
el constructor es el responsable de crear aParser para analizar un archivo de kv
, fusionando los resultados en sus normas internas, plantillas, etc.
Por defecto,Builder es una instancia de Kivy global utilizado en widgets que pue
de utilizar para cargar otros archivos kv adems de las predeterminadas.
Aplicar(widget, ignorado_CONST=set()) Buscar todas las reglas que coinciden con
el widget y aplicarlas. Se
omite_const es un conjunto o lista tipo cuyos elementos son nombres de propiedad
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.
393

aplicar_rules(widget, nombre_regla, ignorado_CONST=set()) Buscar todas las regla


s que coinciden con la regla_name y aplicarlos a widget widget.
Nuevo en la versin 1.9.2. Se
omite_const es un conjunto o lista tipo cuyos elementos son nombres de propiedad

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:
&gt;&gt;&gt; w = Builder.load_string(
... Widget:
... altura: self.ancho / 2. Si el auto.disabled else self.width
... x: self.y + 50
...
)
&gt;&gt;&gt; w.tamao [100, 100] &gt;&gt;&gt; w.pos [50, 0] &gt;&gt;&gt; w.width =
500 &gt;&gt;&gt; w.tamao [500, 500] &gt;&gt;&gt; Builder.unbind_property(w, alt
ura ) &gt;&gt;&gt; w.width = 222
394

&gt;&gt;&gt; w.tamao [222, 500] &gt;&gt;&gt; w.y = 500 &gt;&gt;&gt; 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:
&gt;&gt;&gt; w = Builder.load_string(
... Widget:
... altura: self.ancho / 2. Si el auto.disabled else self.width
... x: self.y + 50
...
)
&gt;&gt;&gt; w.tamao [100, 100] &gt;&gt;&gt; w.pos [50, 0] &gt;&gt;&gt; w.width =
500 &gt;&gt;&gt; w.tamao [500, 500] &gt;&gt;&gt; Builder.unbind_widget(w.uid) &g
t;&gt;&gt; w.width = 222 &gt;&gt;&gt; w.y = 500 &gt;&gt;&gt; w.tamao [222, 500] &
gt;&gt;&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

strip_comentarios (lneas) Quitar todos los comentarios de todas las lneas en el lu


gar. Los comentarios deben estar en una sola lnea y no al final de una lnea. Es de
cir, una lnea de comentario del primer carcter distinto de espacio debe ser un #.
exceptionkivy.lang.ParserException(Contexto, lnea, mensaje, causa=None) Bases: EX
CEPTION
excepcin planteada cuando algo malo sucede en un archivo de kv.
30.12 Builder
clase utilizada para el registro y la aplicacin de reglas para widgets especficos.
classkivy.lang.builder.Bases: kivy observable.event.ObjectWithUid
observable es un ramal clase define los mtodos necesarios para la encuadernacin. E
ventDispatcher (LA) es un ejemplo de una clase que implementa la interfaz de enl
ace. Ver detalles de EventDispatcher.
Nuevo en la versin 1.9.0.
fbind().fbind SeeEventDispatcher().
Nota: Para mantener la compatibilidad con las clases derivadas que pueden haber
heredado de antes, la observable fbind() mtodo fue agregado. La apli- cacin de pre
determinado fbind() es crear una funcin parcial que pasa a enlazar al guardar el
uid y largs/kwargs. Sin embargo,funbind() (andunbind_uid()) son bastante inefica
z puesto que primero tenemos que buscar esta funcin parcial mediante el largs/kwa
rgs o uid y luego llamar unbind() en la funcin devuelto. Se recomienda para sobre
scribir estos mtodos de rived clases para enlazar directamente para obtener un me
jor rendimiento.
Asimismo toEventDispatcher.fbind(), este mtodo devuelve 0 en caso de error y un ni
co uid positivo sobre el xito. Este uid puede utilizarse withunbind_uid.
funbind()()().andEventDispatcher Seefbind funbind().
uid_unbind()() andEventDispatcher Seefbind.uid_unbind().
kivy.lang.builder.Builder = <kivy.lang.builder.BuilderBase object>Instancia prin
cipal de aBuilderBase.
classkivy.lang.builder.BuilderBase Bases: builtins.objeto
el constructor es el responsable de crear aParser para analizar un archivo de kv
, fusionando los resultados en sus normas internas, plantillas, etc.
Por defecto,Builder es una instancia de Kivy global utilizado en widgets que pue
de utilizar para cargar otros archivos kv adems de las predeterminadas.
Aplicar(widget, ignorado_CONST=set()) Buscar todas las reglas que coinciden con
el widget y aplicarlas. Se
omite_const es un conjunto o lista tipo cuyos elementos son nombres de propiedad
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.
396

aplicar_rules(widget, nombre_regla, ignorado_CONST=set()) Buscar todas las regla


s que coinciden con la regla_name y aplicarlos a widget widget.
Nuevo en la versin 1.9.2. Se
omite_const es un conjunto o lista tipo cuyos elementos son nombres de propiedad
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:
&gt;&gt;&gt; w = Builder.load_string(
... Widget:
... altura: self.ancho / 2. Si el auto.disabled else self.width
... x: self.y + 50
...
)
&gt;&gt;&gt; w.tamao [100, 100] &gt;&gt;&gt; w.pos [50, 0] &gt;&gt;&gt; w.width =
500 &gt;&gt;&gt; w.tamao [500, 500] &gt;&gt;&gt; Builder.unbind_property(w, alt
ura ) &gt;&gt;&gt; w.width = 222
397

&gt;&gt;&gt; w.tamao [222, 500] &gt;&gt;&gt; w.y = 500 &gt;&gt;&gt; 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:
&gt;&gt;&gt; w = Builder.load_string(
... Widget:
... altura: self.ancho / 2. Si el auto.disabled else self.width
... x: self.y + 50
...
)
&gt;&gt;&gt; w.tamao [100, 100] &gt;&gt;&gt; w.pos [50, 0] &gt;&gt;&gt; w.width =
500 &gt;&gt;&gt; w.tamao [500, 500] &gt;&gt;&gt; Builder.unbind_widget(w.uid) &g
t;&gt;&gt; w.width = 222 &gt;&gt;&gt; w.y = 500 &gt;&gt;&gt; w.tamao [222, 500] &
gt;&gt;&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

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
strip_comentarios (lneas) Quitar todos los comentarios de todas las lneas en el lu
gar. Los comentarios deben estar en una sola lnea y no al final de una lnea. Es de
cir, una lnea de comentario del primer carcter distinto de espacio debe ser un #.
exceptionkivy.lang.parser.ParserException(Contexto, lnea, mensaje, causa=None) Ba
ses: EXCEPTION
excepcin planteada cuando algo malo sucede en un archivo de kv.
399

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.

32.1.1 Activar un mdulo en el archivo config


para activar un mdulo de esta manera, puede editar el archivo de configuracin (en
yourHOME/.kivy/config.ini):
[mdulos] para activar touchring # descomentar = monitor = # # = keybinding
slo el nombre del mdulo, seguido por "=" es suficiente para activar el mdulo.
32.1.2 Activar un mdulo en Python
antes de iniciar su solicitud, preferentemente al comienzo de su importacin, uste
d puede hacer algo como esto:
403

importar kivy kivy.require( 1.0.8 )


# activar el mdulo touchring de kivy import.config Config Config.set(de "mdulos",
"touchring , )
32.1.3 Activar un mdulo a travs de la lnea de comandos
al iniciar la aplicacin desde la lnea de comandos, puede aadir la opcin -m <modulena
me>A los argu- mentos. Por ejemplo:
python main.py -m webdebugger
Nota: algunos mdulos, tales como la pantalla, pueden requerir parmetros adicionale
s. No obstante, estos parmetros de impresin en la consola cuando se inicia sin ell
os.
32.2 Crear tu propio mdulo
crear un archivo en el HOME/.kivy/Mods, y crear 2 funciones:
def inicio(win, ctx):
pase la
parada de def(win, ctx):
pase
start/stop son funciones que se llamar para cada ventana abierta de Kivy. Cuando
se inicia un mdulo, puedes usarlos para almacenar y administrar el estado del mdul
o. Utilice el ctx variable como un diccionario.
Este contexto es nico para cada instancia/start() llamada del mdulo y se pasar a st
op().
32.3 Console
nuevo en la versin 1.9.1.
Reinicio del antiguo inspector, diseado para ser modular y preocupaciones mantene
r separados. Tambin tienen una arquitectura addons que le permiten agregar un botn
, panel o ms en la propia consola.
Advertencia: este mdulo funciona, pero puede fallar en algunos casos. Por favor,
contribuya!
32.3.1 Uso
de mdulo normal de uso, por favor consulte la documentacin themodules:
python main.py -m
404

32.3.2 consola de navegacin con el ratn


al botn "Seleccionar" est activado, puede:
Pulse una vez sobre un widget para seleccionarla sin salir de modo de inspeccin
doble click sobre un widget para seleccionar y dejar a modo de inspeccin (entonce
s puede manipular el widget nuevo)
32.3.3 la navegacin mediante el teclado
"Ctrl + E": Alternar la consola
"Escape": cancelar el widget de bsqueda, a continuacin, oculte la vista inspector
"Top": seleccione el widget de padres
"Abajo": seleccione la primera infancia del widget seleccionado actual
"izquierda": seleccionar el anterior siguiente hermano

"Derecho": seleccione la siguiente hermano


32.3.4 Informacin adicional
Algunas propiedades pueden ser editados en vivo. Sin embargo, debido al retraso
en el uso de algunas propiedades, es posible que se bloquee si no manejar todos
los casos.
32.3.5 Addons
Addons debe ser agregado a la Consola.addons antes del primer pulso de reloj de
la solicitud, o antes de la create_console es llamado. No puede agregar addons e
n la mosca en la actualidad. Addons son muy baratos hasta que la consola est acti
vada. Panel son incluso ms baratos, no se hace nada hasta que el usuario seleccio
ne.
Por defecto, se ofrecen varios addons activados por defecto:
ConsoleAddonFps: mostrar el FPS en la esquina superior derecha ConsoleAddonSelec
t: activar el modo de seleccin
ConsoleAddonBreadcrumb: mostrar la jerarqua de la actual widget en la parte infer
ior
ConsoleAddonWidgetTree: panel para mostrar el widget de rbol de la aplicacin
ConsoleAddonWidgetPanel: panel para mostrar las propiedades del widget seleccion
ado
si necesita agregar widget personalizado en la consola, use ConsoleButton, Conso
leToggleButton orConsoleLabel
Un addon theConsoleAddon debe heredar de la clase.
Por ejemplo, aqu es un simple addon para mostrar los FPS en la parte superior/der
echa de la consola:
desde kivy.modules.consola Consola de importacin,
clase ConsoleAddon ConsoleAddonFps(ConsoleAddon):
def init(self):
self.lbl = ConsoleLabel(text="0 fps") self.Console.add_toolbar_widget(self.lbl,
derecha=True)
def activar(self):
Reloj.Schedule_interval(self.update_fps, 1 / 2.)
405

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)

kivy.modules.Console.start(win, ctx) crea una instancia de la consola conectada


al ctx y enlazado a la Windowsen_keyboard() evento para capturar el atajo de tec
lado.
Parmetros AWindowThe win: la ventana de la aplicacin que se va a enlazar.
ctx: AWidget o subclassThe Widget para ser inspeccionado.
kivy.modules.Console.stop(win, ctx) detener y descargar cualquier actividad de l
os inspectores para la ctx.
classkivy.modules.Console.Console( kwargs) Bases: kivy.uix.relativelayout.RelativeL
ayout
interfaz de consola,
este widget es creado por consola_create(), cuando se carga el mdulo. Durante ese
tiempo, usted puede agregar addons en la consola para ampliar las funcionalidad
es, o agregar su propia aplicacin stats / mdulo de depuracin.
406

Activa True si la consola est activada (se mostr)


add_PANEL_cb(nombre, activar, desactivar, cb_cb_REFRESH=None) Agregar un nuevo p
anel en la consola.
cb_Activate es exigible que se llamar cuando el panel est activada por el usuario.
cb_desactivar es exigible que se llamar cuando el panel est desactivado o cuando la
consola va a ocultar.
cb_refresh es invocable facultativos que se llama cuando el usuario haga clic de
nuevo en el botn para mostrar el panel
cuando se activa, el panel para mostrar un contenido en la consola usando set_co
ntent().
add_toolbar_widget(widget, derecha=false) aadir un widget en la barra de herramie
ntas superior izquierda de la consola. Utilice la derecha=True si quieres aadir e
l widget a la derecha en su lugar.
addons = [ <class kivy.modules.console.ConsoleAddonSelect>, <class kivy.modules.con
sole.ConsoleAddonFps>, <class kivy.modules.console.ConsoleAddonWidgetPanel>, <class
kivy.modules.console.ConsoleAddonWidgetTree>, <class kivy.modules.console.ConsoleA
ddonBreadcrumb>] Variedad de addons que ser creado en la consola creacin
highlight_a(x, y) seleccionar un widget desde una ventana x/y coordinar. Esto es
principalmente usado internamente cuando se activa el modo de seleccin
inspeccionar_enabled indica si est habilitada la inspeccin, el inspector. Si la re
spuesta es s, el siguiente toque seleccionar un widget en el
modo tctil modo de visualizacin de la consola, o bien acoplado en la parte inferio
r, o como una ventana flotante.
pick(widget, x, y) Elija un widget en x/y, dada una rootwidget
quitar_toolbar_widget(widget) quitar un widget de la barra de herramientas
set_content (contenido) Sustituir el contenido con una consola nueva.
widget widget actual beeing
classkivy seleccionado.modules.Console.ConsoleAddon(Consola) Bases: builtins.obj
ect
clase base para implementar addons
Activate() mtodo llamado cuando el complemento es activado por la consola (cuando
la consola se muestra la
consola Consola = Ninguna instancia
Deactivate() mtodo llamado cuando el addon es desactivado por la consola (cuando
la consola est oculto)
mtodo init() se llama cuando el addon es por la consola
classkivy instanciated.modules.Console.ConsoleButton( kwargs) Bases: Kivy.uix.butto
n.Button

Botn 407 especializados para la consola


classkivy.modules.Console.ConsoleToggleButton( kwargs) Bases: kivy.uix..togglebutto
n ToggleButton
ToggleButton especializados para la consola
classkivy.modules.Console.ConsoleLabel( kwargs) Bases: kivy.uix.label.Label
LabelButton especializados para la consola
32.4 Inspector
nuevo en la versin 1.0.9.
Advertencia: este mdulo es altamente experimental, utilizarla con cuidado.
El Inspector es una herramienta para encontrar un rbol en el widget widget hacien
do clic o tocando sobre ella. Algunas de las principales- junta accesos directos
estn activados:
"Ctrl + E": activar / desactivar la vista inspector
"Escape": Cancelar bsqueda widget en primer lugar y, a continuacin, oculte la vist
a inspector
inspector disponible interacciones:
Pulse una vez sobre un widget para seleccionarla sin salir de modo de inspeccin
doble click sobre un widget para seleccionar y dejar a modo de inspeccin (entonce
s puede manipular el widget de nuevo)
Algunas propiedades pueden ser editados en vivo. Sin embargo, debido al retraso
en el uso de algunas propiedades, es posible que se bloquee si no manejar todos
los casos.
32.4.1 Uso
de mdulo normal de uso, por favor consulte la documentacin themodules.
Sin embargo, el inspector tambin puede ser importado y utilizado como un mdulo pyt
hon normal. Esto tiene la ventaja aadida de poder activar y desactivar el mdulo
de programacin: kivy.core.Ventana Ventana importacin de kivy.app App importacin de
kivy.uix.Button Botn Importar de kivy.modules importar
clase inspector Demo(App):
def construir(self):
botn = Botn(text="Test") inspector.create_inspector(ventana, botn) Botn de retorno
Demo().run()
para extraer el Inspector, puede hacer lo siguiente:
inspector.stop(ventana, botn)
408

kivy.modules.inspector.stop(win, ctx) detener y descargar cualquier actividad de


los inspectores para la ctx.
kivy.modules.inspector.create_inspector(win, ctx, l) Crear una instancia inspecto
r adjunto a la ctx y enlazado a las ventanas de_keyboard() evento para capturar
el atajo de teclado.
Parmetros AWindowThe win: la ventana de la aplicacin que se va a enlazar.
ctx: AWidget o subclassThe Widget para ser inspeccionado.
32.5 Keybinding
fuerzas este mdulo la asignacin de algunas teclas de funciones:
F11: Gire la ventana por 0, 90, 180 y 270 grados
Mays + F11: Cambia entre vertical y horizontal en los escritorios
F12: tomar una captura de pantalla
Nota: esto does t funciona si la aplicacin solicita el teclado de antemano.
32.5.1 Uso
de mdulo normal de uso, por favor consulte la documentacin themodules.
El mdulo Keybinding, sin embargo, tambin pueden ser importados y utilizados como u
n mdulo python normal.
Esto tiene la ventaja aadida de poder activar y desactivar el mdulo
de programacin: kivy.app App importacin de kivy.uix.Button Botn Importar de kivy.mo
dules importacin de kivy keybinding.core.Window ventana importar la

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

la funcin de devolucin de llamada del evento on_success.


Ejemplo de buscar el tiempo en Pars:
def got_weather(req, resultados): El
valor de la clave, en resultados[ tiempo ][0].items():
print(clave, : , valor)
req =( http://api.openweathermap.org/data/2.5/weather?q=Paris,fr , UrlRequest g
ot_tiempo)
Ejemplo de la contabilizacin de los datos (adaptado de httplib ejemplo):
import urllib
def bug_req, enviado(resultado):
print( Nuestro bug es publicado !") print(resultado)
413

params = urllib.urlencode({ @nmero: 12524, @type : problema , @action : show


}) encabezados = { Content-type : application/x-www-form-urlencoded , Aceptar
: text/plain } req =( bugs.python.org , UrlRequest on_success=bug_publicado, r
eq_body=params, req_headers=encabezados)
si desea una solicitud sincrnica, puede llamar al mtodo wait().
classkivy.network.urlrequest.UrlRequest(url, on_success=none, sobre_redirect=non
e, on_failure=none, sobre_ERROR=none, sobre_progress=none, req_body=none, req_he
aders=none, chunk_size=8192, time out=none, method=none, decodificar=True, de- b
ug=False, file_path=none, ca_file=none, ver- ify=True, proxy_host=none, proxy_po
rt=none, proxy_headers=None) Bases: Threading.Thread
un UrlRequest. Consulte la documentacin del mdulo para su uso.
Ha cambiado en la versin 1.5.1: Agregar parmetro debug ha cambiado en la versin 1.0
.10: Aadir parmetro del mtodo
ha cambiado en la versin 1.8.0: parmetro agregado de decodificacin. El parmetro file
_path aadida. Parmetro en_redirect aadido. El parmetro on_failure aadido.
Ha cambiado en la versin 1.9.1: Parmetro ca_archivo agregado. Verificar parmetro ag
regado.
Ha cambiado en la versin 1.9.2: Los parmetros host_proxy, proxy y proxy_port_heade
rs aadido.
Parmetros URL: URL strComplete cadena para llamar.
on_success: retrollamada(solicitud, resultado)funcin de devolucin de llamada para
llamar cuando el resultado ha sido descabellada.
on_redirect: retrollamada(solicitud, resultado)La funcin de devolucin de llamada s
i el servidor re- convierte una redireccin.
on_failure: retrollamada(solicitud, resultado)La funcin de devolucin de llamada si
el servidor devuelve un error de servidor o cliente.
on_error:(solicitud de devolucin de llamada, error)La funcin de devolucin de llamad
a si se produce un error.
El_progress: retrollamada(solicitud, current_size, total_size)funcin de devolucin
de llamada que se llamar para informar sobre el progreso de la descarga. total_si
ze puede ser -1 Content-Length si no ha sido reportada en la respuesta HTTP. Est
a devolucin de llamada que se llamar despus de cada chunk_size es leer.
req_body: str, por omisin NoneData enviado en la solicitud. Si no es ninguno, se
har un POST en lugar de GET.
req_headers: dict, por omisin NoneCustom encabezados para agregar a la solicitud.
chunk_size: int, por defecto 8192 Tamao de cada fragmento para leer, utiliza slo c
uando el callback_progress ha sido establecida. Si disminuye demasiado, un montn
de en_progress callbacks ser despedido y ralentizar su descarga. Si usted quiere
tener la mxima velocidad de descarga, aumente el tamao o chunk_no_progress useon.
timeout: int, por omisin NoneIf set, operaciones de bloqueo finalizar tras muchos
segundos.
Mtodo: str, por omisin GET (o POST ifbody)se especifica el mtodo HTTP que se ut
ilizar.
decode: bool, por omisin TrueIf falso, salte la decodificacin de la respuesta.

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 ]

# original: store.count() len(guardar)


418

# original: store.exists( tito ) tito en la tienda


original: # Para la clave en la tienda.keys() para la clave en la tienda:
pase
classkivy.storage.AbstractStore( kwargs) Bases: kivy.event.EventDispatcher,
clase abstracta utilizado para implementar un almacn
async_clear (callback) versin asincrnica ofclear().
async_count(callback) asincrnicamente devolver el nmero de entradas en el almacena
miento.
async_delete(callback, CLAVE) versin asincrnica ofdelete().
Los argumentos de la devolucin de llamada tienda: AbstractStore instanceStore ins
tancia clave: stringName de la clave para buscar resultado: boolIndicate True si
el almacenamiento se ha actualizado, o False si noth- ing ha sido realizada (si
n cambios). Ninguno si cualquier error.
async_exists(callback, CLAVE) versin asincrnica ofexists().
Los argumentos de la devolucin de llamada tienda: AbstractStore instanceStore ins
tancia clave: stringName de la clave para buscar resultado: booResult de la cons
ulta, ninguno si cualquier error
async_find(callback,
filtros) versin asincrnica offind().
Se llamar a la funcin callback para cada entrada en el resultado.
Los argumentos de la devolucin de llamada tienda: AbstractStore instanceStore ins
tancia clave: stringName de la clave para buscar, o ninguno si queremos llegar a
l final de los resultados resultado: boolIndicate True si el almacenamiento se h
a actualizado, o False si noth- ing ha sido realizada (sin cambios). Ninguno si
cualquier error.
async_get(callback, CLAVE) versin asincrnica ofget().
Los argumentos de la devolucin de llamada tienda: AbstractStore instanceStore ins
tancia clave: stringName de la clave para buscar resultado: dictResult de la con
sulta, ninguno si cualquier error
async_keys(callback) asincrnicamente devolver todas las llaves en el almacenamien
to.
async_put(callback, clave,
valores) versin asincrnica ofput().
Los argumentos de la devolucin de llamada tienda: AbstractStore instanceStore ins
tancia clave: stringName de la clave para buscar resultado: boolIndicate True si
el almacenamiento se ha actualizado, o False si noth- ing ha sido realizada (si
n cambios). Ninguno si cualquier error.
419

clear() Borrar todo el almacenamiento.


count() devuelve el nmero de entradas en el almacenamiento.
Delete(clave) Eliminar una clave del almacenamiento. Si la llave no se encuentra
, una excepcin KeyError ser arrojado.
Existe(clave) Comprobar si una clave existe en el almacn.
find( filtros) Devolver todas las entradas que coinciden con los filtros. Las entra
das son devueltos a travs de un generador como una lista de (clave, entrada) pare
s whereentry es un diccionario de pares clave-valor
de la clave, la entrada en la tienda.find(name= Mathieu ):
print( clave: , clave : , de entrada, entrada)
porque es un generador, no puede utilizar directamente como una lista. Usted pue
de hacer:
# Obtener todas las claves (entrada) Entradas disponibles = lista(STORE.find(nam
e= Mathieu ) # obtener slo la entrada de clave (entrada) Entradas = list((x[1] pa

ra x en la tienda.find(name= Mathieu )))


get(clave) obtener los pares clave-valor almacenado en clave. Si la llave no se
encuentra, una excepcin KeyError ser arrojado.
keys() devolver una lista de todas las teclas en el almacenamiento.
put(clave,
valores) Ponga nuevos pares clave-valor (en valores) en el almacenamien
to. Ninguno de los pares clave-valor se eliminar.
34.5
Uso de almacenamiento Diccionario un diccionario de Python como almacn.
classkivy.storage.dictstore.DictStore(filename, data=none,
kwargs) Bases: kivy.sto
rage.AbstractStore
Store aplicacin utilizando un encurtido de dict. Consulte la documentacin del mdulo
de almacenamiento kivy.Para obtener ms informacin.
34.6 JSON
AStorage tienda mdulo utilizado para guardar/cargar pares clave-valor desde un ar
chivo JSON.
classkivy.storage.jsonstore.JsonStore(filename, kwargs) Bases: kivy.storage.Abstra
ctStore
Store aplicacin utilizando un archivo JSON para almacenar los pares clave-valor.
Consulte la documentacin del mdulo de almacenamiento kivy.Para obtener ms informacin
.
420

34.7 Redis Almacenar la


aplicacin utilizando Redis. Debe tener instalado redis-py.
Ejemplo de uso:
desde kivy.storage.redisstore importar RedisStore
params = dict(host= localhost , port=6379, db=14) = RedisStore tienda(Parmetros)
Todos los pares clave-valor se almacenar con el prefijo Almacenar de forma pred
eterminada. Puede instanciate el almacenamiento con otro prefijo como este:
de kivy.storage.redisstore importar RedisStore
params = dict(host= localhost , port=6379, db=14) = RedisStore tienda(params, pr
efix= mystore2 )
el diccionario params se pasar a la redis.StrictRedis clase.
Ver redis-py.
classkivy.storage.redisstore.RedisStore(redis_params, kwargs) Bases: kivy.storage.
AbstractStore
Store aplicacin utilizando una base de datos Redis. Consulte la documentacin del md
ulo de almacenamiento kivy.Para obtener ms informacin.
421

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

mportados indirectamente que pyin- staller no encontrara en su propio usando get_


deps"_all(). hookspath() devuelve la ruta de acceso a un al- ternate kivy gancho
, kivy/tools/Paquetes/pyinstaller_hooks/kivy-hook.py que no aada estas dependenci
as para su lista de importaciones ocultas y tienen que incluirse explcitamente en
su lugar.
Uno puede sobrescribir el gancho predeterminado, proporcionando en la lnea de com
andos --adicional-ganchos-dir=HOOKSPATH opcin. Porque aunque el gancho predetermi
nado seguir funcionando, las importantes variables globales, por ej excludedimpor
ts andhiddenimports ser sobreescrito por el nuevo gancho, si existe.
Adems, se puede agregar un gancho para ejecutarse despus del default gancho pasand
o por ejemplo
hookspath=[HOOKSPATH] para la clase de anlisis. En ambos casos, HOOKSPATH es la r
uta a una di- rectora que contiene un archivo denominado hook-kivy.py que es el g
ancho para kivy pyinstaller para ser procesados despus del gancho.
hiddenimports predeterminado
cuando se importa un mdulo indirectamente, por ejemplo, con__import__, pyinstalle
r no saber y el mdulo tiene que ser agregado.
hiddenimports throughhiddenimports gancho y otras variables pueden ser especific
ados dentro de un gancho como se ha descrito anteriormente. Adems, estas variable
s pueden ser pasados toAnalysis y sus valores se anexa al gancho de los valores
de estas variables.
La mayora de mdulos del ncleo del kivy, por ejemplo, video son importados indirecta
mente y por lo tanto, necesita ser agregado en hiddenimports. El valor predeterm
inado de gancho PyInstaller agrega todos los proveedores. Para sobrescribir una
modificacin kivy- similar a la del gancho gancho predeterminados, como hookspath(
) que slo importa los mdulos deseados puede ser aadido. Uno luego usesget_deps"_min
imal() orget_deps"_all() para obtener la lista de mdulos y agrega manualmente en
un gancho o modificados pasa toAnalysis en el archivo spec.
423

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

los proveedores para incluir o excluir de la aplicacin compilada.


Los posibles nombres clave son de audio, cmara, Portapapeles, imagen, ortografa, t
exto, video y ventana. Sus valores pueden ser:
true: Incluir actuales proveedores providerThe importadas cuando el mdulo core es
cargado en este sistema se aaden a escondidas de las importaciones. Este es el v
alor predeterminado si no se especifica el nombre de la palabra clave.
Ninguno: no ExcludeDo devolver este mdulo bsico a todos.
Una cadena o una lista de cadenas: Proveedores incluircada string es el nombre d
e un proveedor para este mdulo para ser incluido.
Por ejemplo, get_deps"_minimal(video=none, WINDOW=True, audio=[ gstplayer , ffp
yplayer ], ortografa= encantar ) se excluyen todos los proveedores de vdeo, inclui
r el gstreamer y proveedores ffpyplayer para audio, incluir el encantar proveedor
para la ortografa, y utilizar el proveedor predeterminado actual forwindow.
exclude_ignorado, si es True (predeterminado) si el valor de una biblioteca bsica
es None, entonces si exclude_ignorado es verdadero, no slo har que la biblioteca
no se incluirn en el hiddenimports sino que tambin le agregan a la excluy las impor
taciones para impedir que ste se incluy accidentalmente por pyinstaller.
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" con, por ejemplo,

un anlisis de 424 =([ .\kivy\Ejemplos\demo\touchtracer\main.py ], ...


hookspath=hookspath(), runtime_ganchos=[], win_no_prefieren_redirects=False, win
_Private_assemblies=False, cipher=block_cipher,
get_deps"_minimal(video=none, audi
o=None)
kivy.tools.packaging.pyinstaller_hooks.get_factory_modules() devuelve una lista
de todos los mdulos registrados en la fbrica.
kivy kivy.tools.packaging.pyinstaller_hooks.get_ganchos() devuelve la dict para
el spechookspath andruntime_ganchos valores.
kivy.tools.packaging.pyinstaller_hooks.hookspath() devuelve una lista con el dir
ectorio que contiene el suplente (no por defecto incluido con pyinstaller) ganch
o para kivy pyinstaller, kivy/tools/Paquetes/pyinstaller_hooks/kivy-hook.py. Se
utiliza normalmente withhookspath=hookspath() en el archivo spec.
El valor predeterminado de gancho pyinstaller devuelve todos los principales pro
veedores usado usingget_deps"_minimal() para aadir a su lista de importaciones oc
ultas. Este gancho alternativo slo inclua la esencial mod- eglas y deja los princi
pales proveedores que se inclua adems withget_deps"_minimal() o get_deps"_all().
kivy.tools.packaging.pyinstaller_hooks.runtime_ganchos() devuelve una lista con
los ganchos para kivy en tiempo de ejecucin. Puede utilizarse con ganchos de runt
ime_=runtime_ganchos() en el archivo spec. Pyinstaller viene preinstalado con es
te gancho.
425

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

widgets como desee sin romper la compatibilidad: en la medida en que apliquen lo


s comportamientos correctamente, pueden simplemente sustituir el estndar de los w
idgets.
36.1.2 Adicin de comportamientos
digamos que desea addButton capacidades para anImage, usted podra hacer:
clase IconButton(ButtonBehavior, Imagen):
pase
esto le dara anImage con los eventos y propiedades heredadas fromButtonBehavior.
Por ejemplo, el on_prensa y ON_release eventos seran despedidos cuando proceda:
clase IconButton(ButtonBehavior, Imagen):
def sobre_press(self):
print("on_press")
o en kv:
IconButton:
on_pulse: print( on_press )
Naturalmente, tambin puede enlazar a cualquier propiedad cambia el comportamiento
de la clase ofrece:
def_changed( args):
print( State cambiado )
= Botn IconButton().bind(state=state_cambiado)
Nota: La clase del comportamiento debe ser siempre _antes_ de la clase widget. S
i no se especifica la herencia en este orden, el comportamiento no funcionar porq
ue los mtodos del comportamiento son sobrescritos por el mtodo de clase el primero
de la lista.

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

trigger_action(duracin=0,1) cualquier accin desencadenante(s) han sido enlazados a


l botn llamando tanto la prensa_y_release callbacks.
Esto simula una rpida pulsacin de botn sin utilizar ningn toque eventos.
La duracin es la longitud de la prensa en segundos. Paso 0 si desea que la accin s
ucede instantneamente.
Nuevo en la versin 1.8.0.
classkivy.uix.behaviors.ToggleButtonBehavior( kwargs) Bases: kivy.uix.behaviors.but
ton.ButtonBehavior
mixin providestogglebutton esta clase de comportamiento. Consulte la documentacin
del mdulo de comportamientos thetogglebutton para ms informacin.
Nuevo en la versin 1.8.0.
_staticget widgets(groupname) devuelve una lista de los widgets incluidos en un
grupo especfico. Si el grupo no existe, una lista vaca ser devuelto.
Nota: Siempre soltar el resultado de este mtodo! Mantiene una referencia a cualqu
iera de estos widgets puede impedir su basura recopilada. En caso de duda, hacer
:
l = ToggleButtonBehavior.get_widgets( mygroup ) # hacer su trabajo del l
Advertencia: Es posible que algunos widgets que usted ha eliminado previamente e
stn todava en la lista. El recolector de elementos no utilizados puede necesitar p
ara liberar otros objetos antes de enjuagar.
classkivy.uix.behaviors.DragBehavior( kwargs) Bases: builtins.object
DragBehavior mixin proporciona Arrastre el comportamiento. Cuando se combina con
un widget, arrastrando en el rectngulo definido bydrag_rectngulo se arrastra el w
idget. Consulte la documentacin del mdulo de comportamientos thedrag para ms inform
acin.
Nuevo en la versin 1.8.0.
classkivy.uix.behaviors.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.
hide_keyboard() funcin de conveniencia para ocultar el teclado en modo gestionado
.
keyboard_on_key_down(window, keycode, texto, modificadores) al mtodo enlazado al
teclado cuando la instancia tiene el foco.
Cuando la instancia se centra, este mtodo est enlazado con el teclado y se llamar p
ara cada entrada de prensa. Los parmetros son los mismos que kivy.core.window.Win

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

retirados de la lista permanecer seleccionado untildeselect_node() es llamado.


Advertencia: los nios muestran sus diseos en el orden inverso. Es decir, el conten
ido de los nios se muestra el formulario de derecha a izquierda, de abajo a arrib
a. Por lo tanto, internamente, los ndices de los elementos devueltos por esta fun
cin estn invertidas para hacerla funcionar por defecto para la mayora de los diseos

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

thatselect_con_key_down() devuelve true es liberado.


Los parmetros son tales que podra estar vinculado directamente a la_key_up en caso
de una clave- junta.
Returnsbool, True si la llave de liberacin fue utilizado, FALSE de lo contrario.
select_con_touch(node, toque=None) (interno) procesa un toque en el nodo. Esto d
ebe ser llamado por la deriva widget cuando un nodo es tocado y se utilizar para
la seleccin. Dependiendo del teclado teclas pulsadas y la configuracin, puede sele
ccionar o excluir este y otros nodos en la lista nodos seleccionables,get_selecc
ionable_nodes().
Parmetros nodo nodeThe que recibieron el toque. No puede ser de un tipo de despla
zamiento tctil.
touchOptionally, el tacto. El valor predeterminado es Ninguna.

Returnsbool, True si el toque fue utilizado, FALSE de lo contrario.


classkivy.uix.behaviors.CodeNavigationBehavior Bases: kivy.event.EventDispatcher
,
cdigo de comportamiento de navegacin. Modifica el comportamiento de navegacin de Te
xtInput, a trabajar como un IDE en lugar de un procesador de textos. Consulte mdu
lo de comportamientos navegacin thecode documen- tacin para ms informacin.
Nuevo en la versin 1.9.1.
classkivy.uix.behaviors.EmacsBehavior( kwargs) Bases: builtins.objeto
un mixin que permite Emacs-style mtodos abreviados de teclado para theTextInput w
idget. Consulte la documentacin del mdulo de comportamientos de Emacs para ms infor
macin.
Nuevo en la versin 1.9.1.
delete_word_LEFT() elimina el texto a la izquierda del cursor al principio de la
palabra
delete_word_right() elimina el texto a la derecha del cursor hasta el final de l
a palabra
36.1.3 Comportamiento del botn
clase mixin TheButtonBehavior providesButton comportamiento. Puede combinar esta
clase con otros widgets como anImage, para proporcionar alternativas de botones
que preservar Kivy comportamiento del botn.
Para una descripcin de las conductas, por favor refirase a la documentacin thebehav
iors.
Ejemplo En
el ejemplo siguiente se agrega a una imagen de comportamiento del botn para hacer
que una casilla de verificacin que se comporta como un botn:
de kivy.app App importacin de kivy.imagen.uix Importar imagen de kivy.uix.behavio
rs importar la
clase MyButton(ButtonBehavior ButtonBehavior, Imagen):
def __init__(self,
kwargs):
super(MyButton, auto).__init__( kwargs) self.Source = atlas://data/images/defaultt
heme/checkbox_off
432

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.

last_touch es aObjectProperty y predeterminados a Ninguno.


min_state_time El tiempo mnimo que el widget debe permanecer en el estado de dow
n .
Nuevo en la versin 1.9.1.
min_state_time es un flotador y predeterminados a 0.035. Este valor se toma from
Config. El
estado El estado del botn debe ser normal o down . El estado es down slo cuan
do el botn est tocado/hacer clic, de lo contrario su
estado normal es anOptionProperty y predeterminados a normal .
trigger_action(duracin=0,1) cualquier accin desencadenante(s) han sido enlazados a
l botn llamando tanto la prensa_y_release callbacks.
Esto simula una rpida pulsacin de botn sin utilizar ningn toque eventos.
La duracin es la longitud de la prensa en segundos. Paso 0 si desea que la accin s
ucede instantneamente.
433

Nuevo en la versin 1.8.0.


36.1.4
El comportamiento de navegacin de cdigo CodeNavigationBehavior modifica el comport
amiento de navegacin en el TextInput, hacer que funcione como un IDE en lugar de
un procesador de textos.
Utilizando este mixin da el TextInput, la capacidad para reconocer los espacios
en blanco, puntuacin y caso varia- ciones (p. ej. CamelCase) al pasar sobre el te
xto. En la actualidad es utilizado por theCodeInput widget.
classkivy.uix.behaviors.codenavigation.CodeNavigationBehavior Bases: kivy.event.
EventDispatcher,
cdigo de comportamiento de navegacin. Modifica el comportamiento de navegacin de Te
xtInput, a trabajar como un IDE en lugar de un procesador de textos. Consulte mdu
lo de comportamientos navegacin thecode documen- tacin para ms informacin.
Nuevo en la versin 1.9.1.
36.1.5
El comportamiento de seleccin de compuestos CompoundSelectionBehavior mixin clase
implementa la lgica detrs del teclado y toque seleccin de widgets seleccionable ge
stionado por la deriva widget. Por ejemplo, puede ser combinado con aGridLayout
para agregar la seleccin al diseo.
Conceptos de seleccin compuesto
en su ncleo, mantiene una lista dinmica de widgets que pueden ser seleccionados. E
ntonces, como la entrada de teclado y toques se pasan, selecciona uno o ms de los
widgets basados en estas entradas. Por ejemplo, utiliza el teclado y el ratn par
a desplazarse hacia arriba/abajo para desplazarse por la lista de widgets. Multi
seleccin tambin puede realizarse mediante las teclas Shift y Ctrl del teclado.
Por ltimo, adems del tipo de arriba/abajo las entradas del teclado, seleccin de com
puestos tambin pueden aceptar letras del teclado que se utiliza para seleccionar
nodos asociados con las cadenas que comienzan con esas letras, de forma similar
a cmo se seleccionan archivos mediante un navegador de archivos.
La mecnica de seleccin
cuando el controlador necesita seleccionar un nodo, se llama select_node() y des
eleccione_node().
Por lo tanto, deben ser sobrescrito con el fin de alterar la seleccin de nodos. D
e forma predeterminada, la clase no escucha para teclado o toque eventos, por lo
que el widget derivado debe llamar a select_con_touch(), select_con_key_down()
y select_con_key_up() en los eventos que quiere transmitir con fines de seleccin.
Ejemplo
para agregar la seleccin de un diseo de cuadrcula que containButton widgets. Para c
ada botn aadido al diseo, necesita enlazar elen_TOUCH_abajo del botn paraseleccionar
_con_touch() para transmitir el contacto eventos:
desde la importacin de kivy kivy.uix.behaviors.compoundselection CompoundSelectio

nBehavior.uix.Button Botn Importar de kivy.uix.gridlayout GridLayout importacin de


kivy.core.Ventana Ventana importacin de kivy.app App
434

Clase de importacin(CompoundSelectionBehavior SelectableGrid, GridLayout):


def __init__(self,
kwargs):
""" utiliza el mtodo initialize para enlazar el teclado para habilitar la interac
cin con el teclado por ejemplo utilizando las teclas Mays y Ctrl para seleccionar
varios.
""" super(CompoundSelectionBehavior, auto).__init__( kwargs) Teclado = window.reque
st_keyboard(Ninguno, auto) teclado.bind(on_key_down=self.select_con_key_down, so
bre_key_up=self.select_con_key_up)
def add_widget(self, widget):
""" anulan la adicin de widgets para que podamos enlazar y capturar sus sobre_touc
h_ eventos. """ abajo widget.bind(on_TOUCH_down=auto.button_TOUCH_down, sobre_TOU
CH_up=auto.button_TOUCH_up) volver super(SelectableGrid, auto).add_widget(widget
)
botn def_TOUCH_down(self, botn touch):
""" utiliza la deteccin de colisin para seleccionar los botones cuando el contacto
ocurre dentro de su rea. """ si button.colisionan_point( touch.pos):
self.select_con_touch(botn, toque)
botn def_TOUCH_up(self, botn touch):
""" utiliza la deteccin de colisin para anular la seleccin de los botones cuando el
contacto ocurre fuera de su rea y touch_MULTISELECT no es cierto. """ si no (botn.c
olisionan_point( touch.pos) o Auto.Toque_MULTISELECT):
self.deseleccione_node(Button)
seleccione def_node(self, nodo):
nodo.background_color = (1, 0, 0, 1) Volver super(SelectableGrid, auto).select_N
ODE (NODO)
def deseleccionar_node(self, nodo):
nodo.background_color = (1, 1, 1, 1) super(SelectableGrid, auto).deseleccione_NO
DE (NODO)
def on_selected_nodes(self, ceidor, nodos):
print("nodos seleccionados = {0}".Format(nodos))
clase TestApp(App):
def construir(self):
rejilla = SelectableGrid(cols=3, filas=2, toque_MULTISELECT=True, multiselect=Tr
ue) for i in Range(0, 6):
grid.add_widget(Botn(text="Button {0}".Format(i))) volver grid
TestApp().run()
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
classkivy.uix.behaviors.compoundselection.CompoundSelectionBehavior( kwargs) Bases:
builtins.objeto
el comportamiento de seleccin mixin implementa la lgica detrs de un teclado tctil y
seleccin de
435

widgets seleccionable gestionado por la deriva widget. Consulte la documentacin d


el mdulo de comportamientos de seleccin de compuestos para obtener ms informacin.
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. Los nodos seleccionados y quita de la lista permanecer seleccionado
untildeselect_node() es llamado.
Advertencia: los nios muestran sus diseos en el orden inverso. Es decir, el conten
ido de los nios se muestra el formulario de derecha a izquierda, de abajo a arrib
a. Por lo tanto, internamente, los ndices de los elementos devueltos por esta fun
cin estn invertidas para hacerla funcionar por defecto para la mayora de los diseos
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,
436

y scrollleft cadenas. Si las letras se escriben en rpida sucesin, la tle- ros se c


ombinarn antes del pasado como clave y puede ser usado para encontrar los nodos q
ue 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.
keyboard_select determina si el teclado se puede utilizar para la seleccin. Si es
False, las entradas del teclado ser ignorado.
keyboard_select es aBooleanProperty y su valor predeterminado es True.
multiselect determina si se pueden seleccionar varios nodos. Si est activado, el
teclado Mays y Ctrl se- lection, opcionalmente combinado con tacto, por ejemplo,
podr seleccionar varios widgets en la manera que se espera normalmente. Este domi

natestouch_MULTISELECT. False cuando


multiselect es aBooleanProperty y su valor por defecto es false.
Los nodos_order_invertido (Interno) indica si el orden de los nodos como se mues
tra arriba- abajo se invierte comparada a su orden inget_seleccionable_nodes() (
por ejemplo, cmo los nios propiedad es re- versado en comparacin a cmo se muestran).
page_count determina por cunto el nodo seleccionado se mover hacia arriba o hacia
abajo respecto a la posicin del ltimo nodo seleccionado, cuando repg o avpg) est pres
ionado.
page_count aNumericProperty y predeterminados a 10.
right_count determina por cunto el nodo seleccionado se mover hacia arriba o hacia
abajo respecto a la posicin del ltimo nodo seleccionado cuando el derecho (o izqu
ierdo) de flecha en el teclado est presionada.
right_count es aNumericProperty y predeterminados a 1.
scroll_count Determina por cunto el nodo seleccionado se mover hacia arriba o haci
a abajo respecto a la posicin del ltimo nodo seleccionado, cuando la rueda de desp
lazamiento del ratn se desplaza.
right_count es aNumericProperty y predeterminados a 0.
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.
kwargs) proces
select_con_key_down(teclado, scancode, punto de cdigo, modificadores
a una tecla. Esto se llama cuando se presiona una tecla de seleccin que van a uti
lizarse. Dependiendo
437

del teclado teclas pulsadas y la configuracin, puede seleccionar o anular la sele


ccin de nodos o rangos de nodo de la lista de nodos seleccionables,get_selecciona
ble_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 thatselect_con_
key_down() devuelve true es liberado.
Los parmetros son tales que podra estar vinculado directamente a la_key_up en caso
de una clave- junta.
Returnsbool, True si la llave de liberacin fue utilizado, FALSE de lo contrario.
select_con_touch(node, toque=None) (interno) procesa un toque en el nodo. Esto d
ebe ser llamado por la deriva widget cuando un nodo es tocado y se utilizar para
la seleccin. Dependiendo del teclado teclas pulsadas y la configuracin, puede sele
ccionar o excluir este y otros nodos en la lista nodos seleccionables,get_selecc
ionable_nodes().
Parmetros nodo nodeThe que recibieron el toque. No puede ser de un tipo de despla
zamiento tctil.
touchOptionally, el tacto. El valor predeterminado es Ninguna.
Returnsbool, True si el toque fue utilizado, FALSE de lo contrario.
_nodes seleccionada de la lista de nodos seleccionados.
Nota: se pueden seleccionar varios nodos justo uno despus del otro por ejemplo ut
ilizando el teclado. Cuando se escucha toselected_nodos, uno debe ser consciente
de ello.
selected_nodos es aListProperty y predeterminados a la lista vaca []. Es de slo le

ctura y no debe ser modificado.


Toque_MULTISELECT un toque especial de modo que determina si los eventos tctiles,
como procesada por select_con_touch(), va a agregar el nodo toc actualmente a la
seleccin, o si se va a borrar la seleccin antes de agregar el nodo. Esto permite
la seleccin de varios nodos simplemente tocando.
Esto es diferente frommultiselect porque cuando es True, simplemente tocando un
nodo no seleccionados, se seleccionarn, incluso si no se pulsa la tecla Ctrl. Si
es falso, sin embargo, se debe pulsar la tecla ctrl para aadir a la seleccin whenm
ultiselect es True.
Nota: cuando multiselect False, se disabletouch_MULTISELECT.
Toque_MULTISELECT es aBooleanProperty y su valor por defecto es false.
up_count determina por cunto el nodo seleccionado se mover hacia arriba o hacia ab
ajo, con respecto a la posicin de la ltima, cuando el nodo seleccionado hacia arri
ba (o hacia abajo) flecha en el teclado est presionada.
up_count es aNumericProperty y predeterminados a 1.
438

36.1.6 comportamiento Arrastrar


TheDragBehavior mixin clase proporciona el comportamiento de arrastrar. Cuando s
e combina con un widget, arrastrando en el rectngulo definido por thedrag_rectngul
o se arrastra el widget.
Ejemplo en
el siguiente ejemplo se crea una etiqueta: arrastrable
de kivy.uix.label etiqueta de importacin de kivy.app App importacin de kivy.uix.be
haviors importacin de kivy DragBehavior.lang importar Builder
# Tambin puede poner lo siguiente en el archivo... kv
<DragLabel>:
Kv =
# Definir las propiedades para las DragLabel drag_rectngulo: self.x, Auto, Auto.y
.width, height self.drag_timeout: 10000000 drag_Distancia: 0
FloatLayout:
# define la raz DragLabel widget:
size_HINT: 0.25, 0.2 Texto: drag me
class DragLabel(DragBehavior, Etiqueta):
Pase
clase TestApp(App):
def construir(self):
return Builder.load_string(kv)
TestApp().run()
classkivy.uix.behaviors.Arrastre.DragBehavior( kwargs) Bases: builtins.object
DragBehavior mixin proporciona Arrastre el comportamiento. Cuando se combina con
un widget, arrastrando en el rectngulo definido bydrag_rectngulo se arrastra el w
idget. Consulte la documentacin del mdulo de comportamientos thedrag para ms inform
acin.
Nuevo en la versin 1.8.0.
drag_distancia distancia para mover antes de arrastrar theDragBehavior, en pxeles
. Tan pronto como la distancia que ha recorrido, theDragBehavior empezar a arrast
rar, y ningn evento tctil sern enviados a los nios. Es aconsejable que la base de es
te valor en el dpi de la pantalla del dispositivo de destino.
drag_distance es un NumericProperty y predeterminados a los scroll_distancia tal
como se define en el userConfig (20 pxeles por defecto).
Arrastre_rect_height Altura del eje alineado rectngulo delimitador donde arrastra
r est permitido.
439

drag_rect_height es aNumericProperty y predeterminados a 100.


drag_rect_width Ancho del eje alineado rectngulo delimitador donde est permitido a
rrastrar.
drag_rect_width es aNumericProperty y predeterminados a 100.
drag_rect_x posicin X del eje alineado rectngulo delimitador donde est permitido ar
rastrar (en la ventana coordenadas).
Arrastre_rect_x es aNumericProperty y predeterminados a 0.
drag_rect_y y posicin del eje alineado rectngulo delimitador donde est permitido ar
rastrar (en la ventana coordenadas).
Arrastre_rect_Y es aNumericProperty y predeterminados a 0.
Arrastre_rectangle Posicin y tamao del eje alineado rectngulo delimitador donde est
permitido arrastrar.
drag_es un rectngulo de ReferenceListProperty (drag_rect_x_y_rect de arrastre, ar
rastre_rect_width,arrastre_rect_height) propiedades.
drag_timeout timeout permitido desencadenar thedrag_distance, en milisegundos. S
i el usuario no se ha movido drag_distancia dentro del tiempo de espera, arrastr
ando estar deshabilitado y el toque evento ser enviada a los nios.
drag_timeout es aNumericProperty y predeterminados a los scroll_timeout definido
en la userConfig (55 milisegundos por defaut).
36.1.7
El comportamiento de Emacs EmacsBehavior mixin permite agregar mtodos abreviados
de teclado de Emacs para los movimientos bsicos y de edicin para theTextInput widg
et. Los accesos directos disponibles en la actualidad son listados a continuacin:
Emacs accesos directos
Acceso directo Descripcin Control + a mover el cursor al principio de la lnea Cont
rol + e mueva el cursor hasta el final de la lnea Control + f mueve el cursor un
carcter a la derecha Control + b mueve el cursor un carcter a la izquierda Alt + F
Mueva el cursor hasta el final de la palabra a la derecha Alt + B mueve el curs
or al principio de la palabra a la izquierda Alt + Retroceso eliminar el texto a
la izquierda del cursor hasta el principio de la palabra Alt + d eliminar el te
xto a la derecha del cursor hasta el final de la palabra Alt + W Copiar la selec
cin Control + w Cortar seleccin Control + y Pegar seleccin
Advertencia: si tiene el mdulo inspector habilitado, el acceso directo para abrir
el inspector (Control + e) entra en conflicto con los atajos de Emacs para move
rse al final de la lnea (que an se mueve el cursor al final de la lnea, pero el ins
pector abrir tambin).
440

classkivy.uix.behaviors.emacs.EmacsBehavior( kwargs) Bases: builtins.objeto


un mixin que permite Emacs-style mtodos abreviados de teclado para theTextInput w
idget. Consulte la documentacin del mdulo de comportamientos de Emacs para ms infor
macin.
Nuevo en la versin 1.9.1.
delete_word_LEFT() elimina el texto a la izquierda del cursor al principio de la
palabra
delete_word_right() elimina el texto a la derecha del cursor hasta el final de l
a palabra
clave enlaces_String nombre que determina el tipo de combinaciones de teclas par
a utilizar con el componente TextInput. Esto permite que las combinaciones de te
clas de emacs para activarse/desactivarse mediante programacin para los widgets q
ue en- herit fromEmacsBehavior. Si el valor no es emacs , Emacs bindings se desa
ctivar.
Utilice default para cambiar la asignacin de teclas predeterminadas de TextInput
.
key_enlaces es aStringProperty y predeterminados a emacs .
Nuevo en la versin 1.9.2.
36.1.8 el comportamiento del foco

la clase mixin FocusBehavior proporciona el comportamiento del foco de teclado.


Cuando se combina con otros fo- cusBehavior widgets permite ciclo se centran ent
re ellos presionando la tecla tab. Adems, al ganar el foco, la instancia recibir a
utomticamente la entrada del teclado.
El enfoque, muy diferente de la seleccin, est ntimamente ligada con el teclado; cad
a teclado puede centrarse en cero o uno de cada widget widgets, y slo puede tener
el foco del teclado. Sin embargo, varios teclados pueden centrarse simultneament
e en diferentes widgets. Cuando escapar es golpeado, el widget tiene el foco del
teclado se de-focus.
Gestin de centrarse
en lo esencial, el enfoque se implementa como una lista doblemente enlazada, don
de cada nodo tiene una (dbil) referencia a la instancia de ence antes y despus de
ella, como visualizado cuando el ciclismo a travs de los nodos usando Tab (hacia
adelante) o Mays+Tab (hacia atrs). Si un widget anterior o siguiente no est especif
icado, focus_Focus_Next y Previous predeterminados a Ninguno. Esto significa que
la lista de los nios y los padres estn andando a buscar el siguiente enfocable wi
dget, salvo focus_Focus_anterior o siguiente se establece en la clase StopIterat
ion, en cuyo caso el foco se detiene all.
Por ejemplo, en el ciclo focus betweenButton elementos de aGridLayout:
clase FocusButton(FocusBehavior, botn):
pase la
rejilla = GridLayout(cols=4) for i in range(40):
grid.add_widget(FocusButton(text=str(i))) # haciendo clic en un widget activar el
foco, y ahora se puede utilizar la ficha # para recorrer
al utilizar un teclado de software, tpico en mviles y dispositivos tctiles, la pant
alla del teclado comportamiento est determinado por la propiedad thesoftinput_mod
e. Puede utilizar esta propiedad para asegurar el centrado widget no est cubierto
ni oscurecida por el teclado.
441

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

da a la instancia. Si se establece en False se desnaturalice y/o liberar el tecl


ado. Para un teclado, slo un widget puede tener su enfoque, a fin de centrarse au
tomticamente la otra instancia unfocus mantiene su enfoque.
Cuando se utiliza un software de teclado, consulte thesoftinput_propiedad mode p
ara deter- minar cmo se maneja la pantalla del teclado.
focus es aBooleanProperty y su valor por defecto es false.
focus_next El FocusBehavior instancia para adquirir el foco cuando se pulsa tab
y esta instancia tiene el foco, si no ninguno o StopIteration.
Cuando se pulsa tab, foco theFocusBehavior recorre todos los widgets que estn vin
culadas throughfocus_next y son seleccionables. Iffocus_next es Ninguno, en luga
r camina por los nios listas para encontrar la siguiente enfocable widget. Por lti
mo, iffocus_next es la clase StopIteration, el enfoque no se mueva hacia adelant
e, pero al final aqu.
focus_next es anObjectProperty y predeterminados a Ninguno.
442

focus_anterior instancia TheFocusBehavior para adquirir el foco cuando se pulsa


Mays+Tab en esta instancia, si no ninguno o StopIteration.
Cuando se pulsa MAYS+TAB, focus, recorre todos los FocusBehavior widgets que estn
vinculadas a travs de focus_anterior y son seleccionables. Si FOCUS_anterior es N
one, en lugar recorre el rbol de los nios para encontrar el widget enfocable anter
ior. Por ltimo, si el foco_anterior es la clase StopIteration, el enfoque no se m
ueva hacia atrs, pero al final aqu.
focus_anterior es anObjectProperty y predeterminados a Ninguno.
Centra Un alias
es aBooleanProperty offocus. centrado y el valor predeterminado es False.
Advertencia: se trata de un alias offocus centrado y ser eliminado en la versin 2.
0.0.
hide_keyboard() funcin de conveniencia para ocultar el teclado en modo gestionado
.
ignorado_touch = [] una lista de detalles que no deben utilizarse para desenfoca
do. Despus de_TOUCH_up, cada toque que no inignored_touch desenfocado todos los w
idgets centrado si la configuracin del teclado no es el modo Multi. Toca enfocabl
e widgets que se utiliza para enfocar se agregan automticamente aqu.
Ejemplo de uso:
clase Unfocusable(Widget):
def sobre_TOUCH_down(self, tctil):
Si self.colisionan_point( touch.pos):
FocusBehavior.ignorado_touch.append(touch)
Observe que usted necesita para tener acceso a esta como una clase, no una varia
ble de instancia.
input_type El tipo de teclado a peticin.
Nuevo en la versin 1.8.0.
input_type es anOptionsProperty y predeterminados a texto . Puede ser una de t
exto , nmero , url , mail , datetime , tel o address .
is_enfocable si la instancia puede ser enfocado. Si se centra, perder el foco cua
ndo se establece en False.
es_ES UN BooleanProperty enfocable y su valor predeterminado es True en un equip
o de escritorio (desktop) inconfig es True, False de lo contrario.
teclado El teclado para enlazar (o enlazado al widget) cuando centrado.
Cuando ninguno, un teclado es solicitada y libera cuando el widget viene en y fu
era de foco. Si no ninguno, debe ser un teclado, que obtiene dependientes e inde
pendientes desde el widget siempre est en o fuera de foco. Slo es til cuando ms de u
n teclado est disponible, por lo que se recomienda para establecerse en Ninguno c
uando se dispone de un solo teclado.
Si ms de un teclado est disponible, siempre que una instancia se enfoca un nuevo t
eclado ser solicitado si ninguno. A menos que las otras instancias perder el enfo

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

a diferentes grupos de 443 instancias de FocusBehavior, asegurando que dentro de


cada grupo, slo uno FocusBehavior tendrn el foco, y recibir la entrada desde el te
clado correcto. Consulte keyboard_mode inconfig para obtener ms informacin sobre l
os modos de teclado.
El teclado y el comportamiento del foco
al utilizar el teclado, existen algunas importantes comportamientos predetermina
dos que usted debe tener en cuenta.
Cuando el teclado del Config_mode es mltiple, cada nuevo toque es considerado un t
oque por un dif erentes- usuario y establecer el foco (si hizo clic en un enfocab
le) con un teclado nuevo.
Los elementos se centr ya no perder su enfoque (incluso si se toca un unfocusable
widget).
Si la propiedad est establecida, teclado teclado que se utilizar cuando la instanci
a se enfoca. Si los widgets con teclados diferentes estn vinculados throughfocus_
Focus_anterior siguiente y, a continuacin, ya que se recorren, teclados diferente
s se activar. Por lo tanto, normalmente es conveniente vincular las instancias qu
e se asignan diferentes teclados.
Cuando un widget tiene el foco, estableciendo su teclado para ninguno quitar su te
clado, pero el widget entonces inmediatamente intenta conseguir otro teclado. A
fin de eliminar su teclado, ms bien establecer itsfocus en False.
Cuando se utiliza un teclado de software, tpico en mviles y dispositivos tctiles, l
a pantalla del teclado comportamiento est determinado por la propiedad thesoftinp
ut_mode. Puede utilizar esta propiedad para asegurar el centrado widget no est cu
bierto ni oscurecida.
teclado es anAliasProperty y predeterminados a Ninguno.
keyboard_mode determina cmo la visibilidad del teclado debe ser gestionado. auto
tendr como resultado el comportamiento estndar de mostrar/ocultar en el foco. "g
estionada" requiere la configuracin del teclado visibilidad manualmente, o llamar
a las funciones auxiliares show_keyboard() y hide_keyboard().
keyboard_mode es anOptionsProperty y predeterminados a auto . Puede ser una de
"automtica" o "gestionada".
keyboard_on_key_down(window, keycode, texto, modificadores) al mtodo enlazado al
teclado cuando la instancia tiene el foco.
Cuando la instancia se centra, este mtodo est enlazado con el teclado y se llamar p
ara cada entrada de prensa. Los parmetros son los mismos que kivy.core.window.Win
dowBase.en_key_down().
Al sobrescribir el mtodo de la deriva widget, super debe ser llamado para habilit
ar 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 carcter (
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.

444

unfocus_on_TOUCH Si una instancia se debe perder el foco al hacer clic fuera de


la instancia.
Cuando un usuario hace clic en un widget que es foco consciente y comparte el mi
smo teclado como este widget (que en el caso de un solo teclado, se centran todo
s conscientes de widgets), luego como los otros widgets recibe el foco, este wid
get pierde el foco. Adems, si esta propiedad es True, al hacer clic en cualquier
otro widget de este widget, quitar el foco forman este widget.
unfocus_on_touch es aBooleanProperty y el valor predeterminado es False si el te
clado_mode en Config es multi o systemandmulti , de lo contrario, el valor pr
edeterminado es True.
36.1.9 Kivy Namespaces
nuevo en la versin 1.9.1.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
Mixin TheKNSpaceBehavior clase proporciona la funcionalidad del espacio de nombr
es de objetos Kivy. Permite kivy objetos para ser nombrado y luego acceder media
nte espacios de nombres.
KNSpace instancias son los espacios de nombres que almacenar los objetos con nom
bre Kivy ObjectProperty en posturas. Adems, al heredar de KNSpaceBehavior, si el
objeto se denomina derivada, el nombre se agregar automticamente al espacio de nom
bres asociado y apuntar a aproxy_ref del objeto derivado.
Ejemplos bsicos
de forma predeterminada, slo hay un nico espacio de nombres: theknspace namespace.
El ejemplo ms simple es agregar un widget para el espacio de nombres:
de kivy.uix.behaviors.knspace importar knspace widget widget knspace =().mi_widg
et widget =
Esto aade un kivy ObjectProperty con reenlazar=True y allownone knspace=True a la
propiedad con un nombre de espacio de nombres my_widget. Y ahora la propiedad a
punta tambin a este widget.
Esto se puede hacer automticamente con:
clase miwidget(KNSpaceBehavior, widget
widget): pase = Miwidget(knsname= my_widget )
o en kv:
<MyWidget@KNSpaceBehavior+Widget>
Miwidget:
knsname: mi_widget
Ahora, knspace.mi_widget apuntar a ese widget.
Cuando se crea una segunda widget con el mismo nombre, el espacio de nombres tam
bin cambiar para indicar el nuevo widget. Por ejemplo:
445

= widget miwidget(knsname= my_widget )


widget2 = Miwidget(knsname= my_widget
a a
establecer el espacio de nombres
tambin se pueden crear los propios en
determinado estableciendo directamente
clase miwidget(KNSpaceBehavior, widget

# knspace.mi_widget ahora apunta a widget


) # knspace.mi_widget widget2 ahora apunt
lugar de utilizar el espacio de nombres pre
KNSpaceBehavior knspace.knspace:

widget): pase = Miwidget(knsname= my_widget ) mi_new_namespace = KNSpace() widge


t.knspace = mi_new_namespace

inicialmente, mi_widget es agregado al espacio de nombres predeterminado, pero c


uando el espacio de nombres del widget es cambiado a mi_new_namespace, la refere
ncia a mi_widget se mueve a ese espacio de nombres. Tambin podramos haber naturalm
ente primero definir el espacio de nombres para mi_new_namespace y luego han lla
mado my_widget widget, evitando la asignacin inicial para el espacio de nombres p
redeterminado.
Anlogamente, en kv:
<MyWidget@KNSpaceBehavior+Widget>
Miwidget:
knspace: knsname KNSpace(): mi_widget
heredar el espacio de nombres
en el ejemplo anterior, podemos establecer directamente el espacio de nombres se
desea utilizar. En el siguiente ejemplo, hemos heredado de los padres, tan slo t
enemos que configurarlo una vez:
<MyWidget@KNSpaceBehavior+Widget><MyLabel@KNSpaceBehavior+Label>
<MyComplexWidget@MyWidget>:
knsname: mi_complex MyLabel:
knsname: "label1 MyLabel:
knsname: etiqueta2
y, a continuacin, hacemos:
widget = MyComplexWidget() nueva_knspace = KNSpace() widget.knspace = new_knspac
e
la regla es que si no knspace ha sido asignado a un widget, busca un espacio de
nombres de su padre y padre del padre y as sucesivamente hasta que se encuentre u
no a utilizar. Si no se encuentra ninguno, se usa el defaultknspace.
446

Cuando se crea MyComplexWidget, todava utiliza el espacio de nombres predetermina


do. Sin embargo, cuando se le asign la raz widget de su nuevo espacio de nombres,
todos sus hijos pasa a utilizar ese nuevo espacio de nombres. Tan nuevo_knspace
ahora contiene label1 y label2, as como mi_complex.
Si habamos hecho:
widget = MyComplexWidget() nueva_knspace knspace KNSpace =().label1.knspace = kn
space widget.knspace = new_knspace
luego label1 seguira siendo almacenados en el predeterminado knspace pues se esta
blece directamente, pero label2 y mi_complex seguira siendo aadido al nuevo espaci
o de nombres.
Uno puede personalizar el atributo utilizado para buscar en el rbol primario camb
iando KNSpaceBehavior.knspace_key. Si el knspace deseada no es accesible a travs
de un rbol primario de widgets, por ejemplo, en una ventana emergente que no es u
n widget s Child, KNSpaceBehavior.knspace_clave puede utilizarse para establecer
un orden de bsqueda diferentes.
Acceso al espacio de nombres
como puede verse en el ejemplo anterior, si no directamente asignado, el espacio
de nombres se encuentran buscando en el rbol primario. Por lo tanto, si hay un e
spacio de nombres se asignan ms arriba en el rbol primario, todos sus hijos y a co
ntinuacin, podra tener acceso a ese espacio de nombres mediante theirKNSpaceBehavi
or.knspace propiedad.
Esto permite la creacin de mltiples widgets con nombres idnticos si cada instancia
widget raz se asigna un nuevo espacio de nombres. Por ejemplo:
<MyComplexWidget@KNSpaceBehavior+Widget>:
Etiqueta:
texto: root.knspace.pretty.texto si root.knspace.bastante ms
<MyPrettyWidget@KNSpaceBehavior+TextInput>:
knsname: "bastante" el texto: Hola
<MyCompositeWidget@KNSpaceBehavior+BoxLayout>:
MyComplexWidget MyPrettyWidget

ahora, cuando hacemos:


knspace1, knspace2 = KNSpace KNSpace()() = MyCompositeWidget composite1() compos
ite1.knspace = knspace1
composite2 = MyCompositeWidget() composite2.knspace =
knspace knspace21.bastante = "Aqu est la escalera, ahora arreglar el techo!" knspa
ce2.bastante = "Conseguir que el mapache fuera de m!"
Porque cada una de las instancias de MyCompositeWidget tienen un espacio de nomb
res diferente a sus hijos utilizar tambin dif erentes- espacios de nombres. Por c
onsiguiente, la bonita y compleja widgets de cada instancia tendr un texto difere
nte.
Adems, debido a que el espacio de nombres y referencias ObjectProperty :atrr: KNS
paceBehavior.knspace han reenlazar=True, el texto de la etiqueta MyComplexWidge
t es re447

enlazado a coincidir con el texto de MyPrettyWidget cuando la raz del espacio de


nombres cambia o cuando el root.knspace.bastante los cambios de propiedad, como
se esperaba.
La bifurcacin de un espacio de nombres a la
ramificacin de un espacio de nombres proporciona la oportunidad de crear un nuevo
espacio de nombres de un padre namesapce de modo que el espacio de nombres bifu
rcada contendr todo en el espacio de nombres de origen, pero el espacio de nombre
s de origen no tendrn acceso a nada aade a la horqueta de espacio de nombres.
Por ejemplo:
nio = knspace.fork() = hijo nieto.fork()
nio.label = etiqueta() nieto.Button Botn =()
Ahora etiqueta es accesible tanto por hijo y nieto, pero no por knspace. Botn y sl
o es accesible por el nieto, pero no por el nio o por knspace. Por ltimo, haciendo
nieto.label = etiqueta() dejar nieto.label y nio.etiqueta apuntando a diferentes
etiquetas.
Un ejemplo motivador es el ejemplo de arriba:
<MyComplexWidget@KNSpaceBehavior+Widget>:
Etiqueta:
texto: root.knspace.pretty.texto si root.knspace.bastante ms
<MyPrettyWidget@KNSpaceBehavior+TextInput>:
knsname: "bastante" el texto: Hola
<MyCompositeWidget@KNSpaceBehavior+BoxLayout>:
knspace: horquilla MyComplexWidget MyPrettyWidget
Observe la adicin de knspace: "tenedor". Esto es idntico a hacer knspace: self.kns
pace.fork(). De cualquier modo, lo que llevara a la recursin infinita que kv regla
sera ejecutado de forma recursiva ya que self.knspace seguir cambiando. Sin embar
go, permitiendo knspace: "Horquilla cirumvents . Ver KNSpaceBehavior.knspace.
Ahora, habiendo ahorquillado, slo tenemos que hacer:
composite1 = MyCompositeWidget() = MyCompositeWidget composite2()
composite1.knspace.bastante = "Aqu est la escalera, ahora arreglar el techo!" comp
osite2.knspace.bastante = "Conseguir que el mapache fuera de m!"
Ya que por la bifurcacin nos crea automticamente un espacio de nombres nico para ca
da instancia.
classkivy MyCompositeWidget.uix.behaviors.knspace.KNSpace(parent=none, KEEP_ref=
False,
kwargs) Bases: kivy.event.EventDispatcher KNSpace cada instancia es un espa
cio de nombres denominado Kivy que almacena los objetos asociados a este espacio
de nombres. Cada objeto nombrado se almacena como el valor de una KivyObjectPro
perty de esta instancia cuya propiedad name es el nombre del objeto. Reenlazar a
llownone tanto y se establece en True para la propiedad.

Ver KNSpaceBehavior knspace 448.Para obtener ms informacin sobre cmo un espacio de


nombres est asociado con un objeto designado.
Al almacenar un objeto en el espacio de nombres, el objeto proxy_ref se almacena
si el objeto tiene un atributo.
Parmetros: primario (interno) o ninguna instancia AKNSpace.Si se especifica, se t
rata de un padre nombres- ritmo, en cuyo caso, el espacio de nombres actual tend
r en su espacio de nombres denominado todos sus objetos, as como los objetos con n
ombre de su padre y padre del Padre etc. Seefork() para ms detalles.
fork() devuelve una nueva instancia KNSpace que tendr acceso a todos los objetos
definidos en el espacio de nombres actual sino que tambin tendr un espacio de nomb
res propio que es nico.
Por ejemplo:
Horqueta_knspace1 = knspace.fork()_bifurcada knspace2 = knspace.fork()
Ahora, los nombres agregados a knspace ser accesible por el ahorquillado_knspace1
y bifurcar_knspace2 espacios de nombres por los medios normales. Sin embargo, l
os nombres agregados para bifurcar_knspace1 no ser accesible desde knspace o ahor
quillados_knspace2. Similar para bifurcar_knspace2.
Keep_ref = False si una referencia directa debe mantenerse a los objetos almacen
ados. IfTrue, utilizamos el objeto directo, de lo contrario nos useproxy_ref cua
ndo estn presentes.
El valor predeterminado es False.
parent = None (interno) El espacio de nombres primario ejemplo,KNSpace o ninguno
. Seefork().
kwargs) Bases: built
classkivy.uix.behaviors.knspace.KNSpaceBehavior(knspace=none,
ins.object
heredar de esta clase permite nombres de los objetos heredados, que se aaden a lo
s asociados namespaceknspace y accesibles a travs de l.
Consulte la documentacin del mdulo de comportamientos theknspace para ms informacin.
knsname el nombre dado a esta instancia. Si el nombre, el nombre ser agregado al
espacio de nombres knspace asociado, que, a continuacin, elija el proxy_ref de es
ta instancia.
Al ser nombrado, se puede acceder a este objeto, por ejemplo self.knspace.name,
donde nombre es el nombre de esta instancia. Y el mdulo Seeknspace descripcin para
ms detalles.
El espacio de nombres de instancia knspace,KNSpace asociados con este widget. Es
pacio de nombres Theknspace almacena este widget a la hora de denominar este wid
get withknsname.
Si el espacio de nombres se ha fijado con, por ejemplo, con la instancia aKNSpac
e self.knspace = KNSpace(), entonces se devuelve dicha instancia (ajuste con nin
guno no cuenta). De lo contrario, ifknspace_key no es ninguno, buscamos un espac
io de nombres para su uso en el objeto que se almacena en la propiedad denominad
a knspace_key, de esta instancia. Es decir, los objetos = getattr(auto, auto.kns
pace_key).
Si el objeto tiene una propiedad knspace, entonces debemos devolver su valor. De
lo contrario, vamos ms arriba, por ejemplo, con getattr(object, self.knspace_key
) y busque es knspace propiedad.
Finalmente, si queremos alcanzar un valor de Ninguno o knspace_key estaba ningun
o, el valor predeterminado knspace namespace es devuelto.
449

Si knspace est configurado para la cadena fork , el espacio de nombres actual en


knspace ser ahorquillado con KNSpace.fork() y el espacio de nombres resultante s
er asignado a esta instancia knspace. Consulte el mdulo ejemplos de un ejemplo mot
ivador.
Ambos reenlazar y allownone son verdaderas.

knspace_clave el nombre de la propiedad de esta instancia, que se va a usar para


buscar hacia arriba para un espacio de nombres para utilizar esta instancia. Ca
mbia a padre , de modo que vamos a buscar en el rbol primario. Seeknspace.
Cuando ninguno, no vamos a buscar en el rbol primario para el espacio de nombres.
allownone es True.
kivy.uix.behaviors.knspace.knspace = <kivy.uix.behaviors.knspace.KNSpace object>
El espacio de nombres defaultKNSpace. Knspace SeeKNSpaceBehavior.Para obtener ms
detalles.
36.1.10 comportamiento ToggleButton
TheToggleButtonBehavior clase mixin providesToggleButton comportamiento. Puede c
ombinar esta clase con otros widgets, como una imagen, para proporcionar alterna
tivas que preserven Kivy togglebuttons togglebutton comportamiento.
Para una descripcin de las conductas, por favor refirase a la documentacin thebehav
iors.
Ejemplo En
el ejemplo siguiente se agrega un togglebutton comportamiento a una imagen para
hacer que una casilla de verificacin que se comporta como un togglebutton:
de kivy.app App importacin de kivy.imagen.uix Importar imagen de kivy.uix.behavio
rs importar la
clase MyButton(ToggleButtonBehavior ToggleButtonBehavior, Imagen):
def __init__(self, super(MyButton,
kwargs):
Auto).__init__( kwargs) self.Source = atlas://data/images/defaulttheme/checkbox_of
f
de def_state(self, widget, valor):
Si valor == down :
self.Source = atlas://data/images/defaulttheme/checkbox_on ms:
self.Source = atlas://data/images/defaulttheme/checkbox_off
class SampleApp(App):
def construir(self):
retorno MyButton()
SampleApp().run()
classkivy.uix.behaviors.togglebutton.ToggleButtonBehavior( kwargs) Bases: kivy.uix.
behaviors.button.ButtonBehavior
esta clase mixin providestogglebutton comportamiento. Consulte la documentacin de
l mdulo de comportamientos thetogglebutton para ms informacin.
Nuevo en la versin 1.8.0.

Allow_450_selection no especifica si los widgets en un grupo no permiten la sele


ccin, es decir, todo lo que se dese- lected.
Nuevo en la versin 1.9.0.
allow_no_seleccin es aBooleanProperty y su valor predeterminado es True
staticget_widgets(groupname) devuelve una lista de los widgets incluidos en un g
rupo especfico. Si el grupo no existe, una lista vaca ser devuelto.
Nota: Siempre soltar el resultado de este mtodo! Mantiene una referencia a cualqu
iera de estos widgets puede impedir su basura recopilada. En caso de duda, hacer
:
l = ToggleButtonBehavior.get_widgets( mygroup ) # hacer su trabajo del l
Advertencia: Es posible que algunos widgets que usted ha eliminado previamente e
stn todava en la lista. El recolector de elementos no utilizados puede necesitar p
ara liberar otros objetos antes de enjuagar.
Grupo Grupo del botn. Si ninguno, ningn grupo se utilizarn (el botn ser independiente
). Si se especifica, el grupo debe ser un objeto hashable, como una cadena. Slo u
n botn de un grupo puede estar en un estado de down .
grupo aObjectProperty y predeterminados a Ninguno.
36.2 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).
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).

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.
452

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.
Advertencia: Cuando las vistas son re-utilizados no podrn activar si los datos si
gue siendo la misma.
.recycleview classkivy.uix.__init__.RecycleViewBehavior( kwargs) Bases: builtins.ob
ject
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.2 NINGUNA documentacin (mdulo.recycleview kivy.uix.__init__)
.recycleview classkivy.uix.layout.LayoutSelectionBehavior( kwargs) Bases: kivy.uix.
behaviors.compoundselection.CompoundSelectionBehavior withRecycleLayoutManagerBe
havior TheLayoutSelectionBehavior pueden combinarse para permitir que sus clases
derivadas de comportamientos de seleccin similar a howCompoundSelectionBehavior
puede utilizarse para agregar comportamientos de seleccin a la presentacin normal.
RecycleLayoutManagerBehavior gestiona sus hijos de manera distinta a la normal o
diseos de widgets para esta clase se adapta CompoundSelectionBehavior basado en
la seleccin para trabajar con RecycleLayoutManagerBehavior tambin.
Asimismo toCompoundSelectionBehavior, uno puede seleccionar con el teclado o toq
ue, que llama a select_node() o deseleccionar_node(), o se puede llamar a estos
mtodos directamente. Cuando un elemento est seleccionado o deselectedapply_selecti
on() es llamado. Seeapply_selection().
Aplique_selection(index, ver is_seleccionado) se aplica la seleccin a la vista. E
sto se denomina internamente cuando se muestra una vista y necesita ser mostrado
como seleccionado o no seleccionado.
453

Se llama whenselect_node() ordselect_node() es llamado o cuando una vista debe a


ctualizarse. Su funcin es puramente para actualizar la vista para reflejar el est
ado de la seleccin. De modo que la funcin se puede llamar varias veces, incluso si
el estado de la seleccin puede no haber cambiado.
Si la vista es una instancia de RecycleDataViewBehavior, su apply_(), mtodo de se
leccin se llamar todo lo que la vista debe actualizar el estado de la seleccin. De
lo contrario, este mtodo es el encargado de aplicar la seleccin.
Parmetros: intThe ndice ndice del elemento de datos que est asociado con la vista.
Ver: widgetThe widget que es la opinin de este elemento de datos.
Es_seleccionado: boolWhether el elemento est seleccionado.
key_seleccin la clave utilizada para comprobar si una vista de un elemento de dat
os que se pueden seleccionar con el teclado o tctil.
key_es la clave en la seleccin de los datos, que si estn presentes andTrue permiti
r la seleccin de este elemento desde el teclado o con un toque. Cuando ninguno, el
valor predeterminado, y no el tema ser seleccionable.
key_seleccin es aStringProperty y predeterminados a Ninguno.
Nota: Todos los elementos de datos pueden ser seleccionados directamente utiliza
ndo select_node() o deseleccionar_node(), incluso ifkey_seleccin es falso.
.recycleview classkivy.uix.layout.RecycleLayoutManagerBehavior Bases: builtins.o
bjeto
RecycleLayoutManagerBehavior es responsable para el posicionamiento de las vista
s en el RecycleView.datos dentro de un RecycleView. Agrega nuevas vistas de los
datos cuando se hace visible para el usuario, y se quita cuando abandonan el rea
visible.
Calcular_visible_views(datos, viewport viewport) en coordenadas del gestor de di
seo.
get_view_index_a(pos) volver la vista ndice en qu posicin, pos, cae.
pos es en coordenadas del gestor de diseo.
goto_view(index) Mueve las opiniones, de modo que la vista correspondiente al ndi
ce es visible.
key_viewclass SeeRecyclerView.key_viewclass.
refresh_view_layout(index, pos, pos_HINT, tamao, tamao_HINT, vista la vista) Vase :
meth: ~kivy.uix.recycleview.Views.RecycleDataAdapter.refresh_view_layout.
set_visible_views(ndices, datos, viewport viewport) en coordenadas del gestor de
diseo.
viewclass SeeRecyclerView.viewclass.
36.2.3 El adaptador parte del RecycleView que junto con el diseo es el
punto de vista de parte de la modelo, vista y controlador patrn.
Ver el mdulo gestiona la conversin de los datos a una vista utilizando la clase de
adaptador que se muestra a continuacin por el diseo. Una vista es una clase basad
a en widget. Sin embargo, la herencia de RecycleDataViewBehavior aade mtodos para
convertir los datos en una vista.
454

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

liza la informacin de tamao de la vista.


viewport est en coordenadas del gestor de diseo.
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.
set_visible_views(ndices, datos, viewclasses) obtiene un 3-tupla de los nuevos y
viejos, restante, vistas en el visor actual.
Las nuevas vistas se sincroniza con los datos, excepto para el tamao/punto de ven
ta de propiedades. Las antiguas opiniones deben eliminarse del diseo, y las nueva
s vistas aadido.
Las nuevas ideas no son necesariamente nuevas, pero todas son vistas actualmente
visible.
classkivy.uix.recycleview.Views.RecycleDataViewBehavior Bases: builtins.objeto
una clase base opcional para las vistas de datos (RecycleView.viewclass). Si una
vista hereda de esta clase, la clase de funciones ser llamado cuando la vista de
be actualizarse, debido a un cambio de datos o actualizacin del diseo.
refresh_view_attrs(RV, ndice datos) llamado por theRecycleAdapter cuando la vista
est poblada inicialmente con los valores del diccionario de datos de este elemen
to.
Cualquier informacin sobre el tamao de tpv o deben eliminarse porque son posterior
mente con refresh_view_layout.
Rv: RecycleView instanceTheRecycleView parmetros que caus la actualizacin.
Datos: datos dictThe dict utilizada para rellenar esta opinin.
456

refresh_view_layout(RV, ndice, pos, pos_HINT, tamao, tamao_HINT, viewport) llamado


cuando el tamao de la vista se actualiza mediante el gestor de diseo, RecycleLayou
tManagerBehavior.
Rv: RecycleView instanceTheRecycleView parmetros que caus la actualizacin.
viewport: 4-tupleThe las coordenadas de la esquina inferior izquierda y anchura
altura en layout manager coordina. Esto puede ser ms grande que este elemento de
la vista.
RaisesLayoutChangeException: Si el cambio de tamao o datos ha cambiado durante un
a llamada a este mtodo, levantando una excepcin LayoutChangeException forzar una ac
tualizacin.
til cuando los datos cambian y no queremos ms desde diseo ser sobrescrito pronto de
nuevo.
36.2.4 El modelo de datos parte de la RecycleView MODEL-VIEW-controller patrn.
Define los modelos (clases) que almacenan los datos asociados con un RecycleView
Behavior.
Cada modelo (clase) determina cmo se almacenan los datos y cmo se emite peticiones
al controlador (RecycleViewBehavior) cuando se modifican los datos.
classkivy.uix.recycleview.datamodel.Bases: RecycleDataModelBehavior
RecycleDataModelBehavior builtins.object es la clase base para los modelos que d
escribe y proporciona los datos para theRecycleViewBehavior.
Eventos en_data_cambiado:dispararon cuando los datos cambian. El evento puede de
spachar- palabra clave argumentos especficos para cada aplicacin del modelo de dat
os.
Cuando se envi el evento y argumentos se reenvan a refresh_from_data().
attach_recycleview aRecycleViewBehavior(RV) asociados con este modelo de datos.
_detach() elimina theRecycleViewBehavior recycleview asociados con este modelo d
e datos.
recycleview TheRecycleViewBehavior instancia asociada con este modelo de datos.
.recycleview classkivy.uix.datamodel.RecycleDataModel( kwargs) Bases: kivy.uix.recy
cleview.datamodel.RecycleDataModelBehavior, kivy.event.EventDispatcher
ofRecycleDataModelBehavior una aplicacin que guarda los datos en una lista indexa
bles. Ver datos.

Cuando los cambios en los datos de esta clase actualmente en despachos_data_camb


iado con uno de los siguientes argumentos adi- cionales.
none: no existen palabras clave argumentWith ningn argumento adicional que signif
ica un cambio de datos genrico.
Eliminado: un sector o integerThe valor es un entero que indica el corte o ndices
extrados.
anexa: un segmento sliceThe indata indicando la primera y la ltima nuevos element
os (es decir, el sector apuntando a los nuevos elementos agregados al final).
Insertados: un ndice integerThe indata donde un nuevo elemento de datos insertado
s.
modificado: un sliceThe tajada con los ndices cuando se han modificado los datos.
En la actualidad esto no permite cambiar el tamao de
los almacenes de datos, etc. El modelo de datos mediante una lista.
Los datos de un elemento en el ndice i tambin pueden ser accedidos withRecycleData
Model [i].
457

_dict observable una instancia de diccionario, que cuando se modifica, desencade


nar un datos y por consiguiente un_data_changed despacho.
36.3 Ninguna documentacin (mdulo.recycleview kivy.uix.__init__)
.selectableview classkivy.uix.SelectableView( kwargs) Bases: builtins.object TheSel
ectableView mixin se usa con los elementos de la lista y otras clases que van a
ser instanciados en una vista de lista o de otras clases que utilizan una selecc
in habilitada como adaptador ListAdapter. select() y deseleccione() puede anulars
e con mostrar cdigo para marcar los elementos como seleccionada o no, si lo desea
.
Desmarque( args) el elemento de la lista es el responsable de actualizar la pantal
la cuando est desactivada, si lo desea.
ndice El ndice en la lista de datos subyacente o el elemento de datos Esta vista r
epresenta.
is_seleccionado una instancia SelectableView lleva esta propiedad que debe mante
nerse en sincrona con la propiedad alent equiv- representa el elemento de datos.
select(*args) el elemento de la lista es el responsable de actualizar la pantall
a cuando est Seleccionado, si lo desea.
36.4 visin abstracta
nuevo en la versin 1.5.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
TheAbstractView widget tiene un adaptador propiedad para un adaptador que mediat
iza a datos. El adaptador gestiona un elemento_view_instance dict propiedad que
posee vistas para cada elemento de datos, operando como un cach.
.abstractview classkivy.uix.AbstractView( kwargs) Bases: kivy.uix.floatlayout.Float
Layout
Vista utilizando anAdapter como un proveedor de datos.
adaptador el adaptador puede ser uno de varios tipos de adaptadores. El ejemplo
ms comn es el ListAdapter utilizadas para la gestin de los elementos de datos en un
a lista.
36.5 Acorden
nuevo en la versin 1.0.8.
458,

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

Clase de importacin AccordionApp(App):


def construir(self):
root =() para acorden en la gama x(5):
x) item.add_widget(Label(text="contenido m
10) root.add_widget(item) volver root
uy grande\n % elemento = AccordionItem(title= ttulo %d
si __name__ == "__main__ :
AccordionApp().run()
36.5.2 Personalizar el acorden
puede aumentar el tamao predeterminado de la barra de ttulo:
root = Acorden(min_espacio=60)
o cambiar la orientacin a vertical:
root = Acorden(Orientation=vertical )
El AccordionItem es ms configurable y puede establecer su propio ttulo fondo cuand
o el elemento est colapsado o abierto:
elemento = AccordionItem(background_normal= image_al_colaps.png", antecedentes_se
lected= image_al_selected.png")
classkivy.uix.acorden.Acorden( kwargs) Bases: kivy.uix.widget.Widget
clase de acorden. Consulte la documentacin del mdulo para obtener ms informacin.
anim_Duracin La duracin de la animacin en segundos cuando un nuevo elemento de acor
den est seleccionado.
anim_duration es aNumericProperty y predeterminados a .25 (250ms).
anim_func aliviar la funcin a utilizar para la animacin. AnimationTransition Check
kivy.animation.Para obtener ms informacin acerca de la disponibilidad de las funci
ones de animacin
ANIM_func es una ObjectProperty y predeterminados a "out_expo . Puede definir un
a cadena o una funcin para usar como una atenuacin Funcin.
min_space Espacio mnimo para utilizar para el ttulo de cada tema. Este valor se es
tablece automticamente para cada nio cada vez que el diseo se produce un evento.
min_Espacio es aNumericProperty y predeterminados a 44 (px).

Orientacin Orientacin del diseo.


Orientacin es un OptionProperty y predeterminados a horizontal . Puede tomar un
valor vertical o horizontal .
classkivy.uix.acorden.AccordionItem( kwargs) Bases: kivy.uix.floatlayout.FloatLayout
460

clase AccordionItem que debe utilizarse en conjuncin con la clase theAccordion. C


onsulte la documentacin del mdulo para obtener ms informacin.
Instancia de acorden theAccordion que pertenece el elemento.
Es anObjectProperty acorden y predeterminados a Ninguno.
background_disabled_imagen de fondo normal del acorden elemento utilizado para la
representacin grfica por defecto cuando el elemento est contrado y los discapacitad
os.
Nuevo en la versin 1.8.0.
ANTECEDENTES__disabled_normal es un StringProperty y predeterminados a A- la li
ga://data/images/defaulttheme/button_disabled .
background_disabled_imagen de fondo seleccionado del acorden elemento utilizado p
ara la representacin grfica por defecto cuando el elemento est seleccionado (no con
trae) y discapacitados.
Nuevo en la versin 1.8.0.
ANTECEDENTES_disabled_seleccionado es un StringProperty y predeterminados a Ala liga://data/images/defaulttheme/button_disabled_presionado .
background_imagen de fondo normal del acorden elemento utilizado para la represen
tacin grfica por defecto cuando el elemento est colapsado.
background_normal es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/botn .
background_imagen de fondo seleccionado del acorden elemento utilizado para la re
presentacin grfica por defecto cuando el elemento est seleccionado (no contrada).
background_normal es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/button_presionado .
Colapso Boolean para indicar si el elemento actual es o no contrado.
colapso se aBooleanProperty y su valor predeterminado es True.
Colapso_alpha valor entre 0 y 1 para indicar cunto es el elemento collasped (1) o
si est seleccionado (0). Se usa mayormente para animacin.
Colapso_alpha es aNumericProperty y predeterminados a 1.
Contenedor (interna) de los bienes que se establecer en el contenedor de los nios
dentro de la representacin AccordionItem.
container_title (interna) de los bienes que se establecer en el contenedor de ttul
o dentro de la AccordionItem repre- sentation.
content_size (interno) establecido por theAccordion al tamao asignado al contenid
o.
min_space Enlace a theAccordion.min_propiedad espacial.
461

orientacin vincular theAccordion.propiedad orientation.


ttulo cadena ttulo del tema. El ttulo puede ser utilizado en conjuncin con el Accord
ionItemTitle plantilla. Si est utilizando una plantilla personalizada, puede util
izar la propiedad como una entrada de texto, o no. De forma predeterminada, se u
tiliza para el texto del ttulo. Vase el ttulo_template y el ejemplo de abajo. El
ttulo es aStringProperty y predeterminados a .
title_args argumentos predeterminados que se pasarn al thekivy.lang.Builder.templ
ate() mtodo.
title_args es aDictProperty y predeterminados a {}.
title_plantilla a utilizar para crear la parte del ttulo del elemento de acorden.

La plantilla predeterminada es una simple etiqueta, no es personalizable (except


o el texto) que admite la orientacin vertical y horizontal- cacin y distintos ante
cedentes para el colapso y el modo seleccionado.
Es mejor crear y utilizar su propia plantilla si la plantilla predeterminada no
basta. El
ttulo es un StringProperty y predeterminados a AccordionItemTitle . La plantilla
predeterminada actual vive en la kivy/data/style.kv archivo.
Aqu est el cdigo si desea crear su propia plantilla:
[AccordionItemTitle@Label]:
texto: ctx.title canvas.antes:
COLOR:
rgb: 1, 1, 1 BorderImage:
Fuente:
ctx.item.background_normal \ Si ctx.item.Contraer \ else ctx.item.background_pos
seleccionado: self.pos tamao: self.tamao PushMatrix Translate:
xy: self.centro_x, auto.center_y girar:
ngulo: 90 si ctx.item.orientacin == horizontal otro eje 0: 0, 0, 1 Translate:
xy: -self.centro_x, -auto.center_y canvas.Despus:
PopMatrix
exceptionkivy.uix.acorden.AccordionException Bases: Excepcin
AccordionException clase.
36.6 Barra de acciones
nuevas en la versin 1.8.0.
462

El ActionBar widget es como Android s ActionBar , donde los elementos se apilan


horizontalmente.
Con variousContextualActionViews anActionView AnActionBar contiene. Contendr una
ActionPrevious AnActionView tener ttulo, app_icon_icon anterior y propiedades. Un
ActionView contendr las subclases de ActionItems. Algunas predefinidas inlcude A
ctionButton ActionToggleButton un, un, un, un ActionSeparator ActionCheck y un A
ctionGroup.
Se utiliza para displayActionItems AnActionGroup en un grupo. Siempre mostrar AnA
ctionView otherActionItems anActionGroup despus. Contendr AnActionView anActionOve
rflow. Un ContextualActionView es una subclase de anActionView.
exceptionkivy.uix.actionbar.ActionBarException Bases: Excepcin
clase ActionBarException
classkivy.uix.actionbar.ActionItem Bases: builtins.
ActionItem objeto class, una clase abstracta para todas ActionBar widgets. Para
crear un widget personalizado para una ActionBar, heredar de esta clase. Consult
e la documentacin del mdulo para obtener ms informacin.
background_abajo la imagen de fondo de la ActionItem utilizado para la represent
acin grfica por defecto cuando se pulsa un ActionItem.
background_down es un StringProperty y predeterminados a A- la liga://data/imag
es/defaulttheme/action_item_down .
background_normal de la imagen de fondo ActionItem utilizados para la representa
cin grfica por defecto cuando no se pisa el ActionItem.
background_normal es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/action_item .
importante determina si un ActionItem es importante o no
importante es aBooleanProperty y su valor por defecto es false.
Dentro_group (interno) Determina si un ActionItem se muestra dentro de un Action
Group o no.
dentro_group es aBooleanProperty y su valor por defecto es false.
minimum_width anchura mnima requerida por un ActionItem.
minimum_width es aNumericProperty y predeterminados a 90sp .
mipmap define si la imagen/icono dispayed encima del botn usa Un mipmap. o no

es aBooleanProperty mipmap y su valor predeterminado es True.


pack_width (slo lectura) El ancho real de utilizar cuando el elemento de embalaje
. Igual a la mayor de mini- mum_width y ancho.
pack_width es anAliasProperty.
463

classkivy.uix.actionbar.ActionButton( kwargs) Bases: kivy.uix.button.Button,kivy.ui


x.actionbar.ActionItem
ActionButton mdulo de clase, vea la documentacin para ms informacin.
El color del texto, el ancho y el tamao_HINT_x se establecen manualmente mediante
el archivo de idioma de kv. Abarca una gran cantidad de casos: con/sin un icono
, con/sin un grupo y cuida del relleno entre los elementos.
Usted no tiene mucho control sobre estas propiedades, de modo que si desea perso
nalizar su apariencia, le sugerimos crear su propio botn de representacin. Usted p
uede hacer esto mediante la creacin de una clase que las subclases un widget y an
ActionItem existente:
clase MyOwnActionButton(Botn, ActionItem):
pase
a continuacin, puede crear su propio estilo usando el lenguaje de kv.
icono imagen de origen para utilizar cuando el botn es parte de la ActionBar. Si
el botn est en un grupo, el texto ser preferido.
classkivy.uix.actionbar.ActionToggleButton( kwargs) Bases: kivy.uix.actionbar.Actio
nItem,kivy.uix.ToggleButton togglebutton.
ActionToggleButton mdulo clase, vea la documentacin para ms informacin.
icono imagen de origen para utilizar cuando el botn es parte de la ActionBar. Si
el botn est en un grupo, el texto ser preferido.
classkivy.uix.actionbar.ActionCheck( kwargs) Bases: kivy.uix.actionbar.ActionItem,k
ivy.uix.checkbox.
ActionCheck CheckBox mdulo clase, vea la documentacin para ms informacin.
classkivy.uix.actionbar.ActionSeparator( kwargs) Bases: kivy.uix.actionbar.ActionIt
em,kivy.uix.widget.Widget
ActionSeparator mdulo clase, vea la documentacin para ms informacin.
background_image imagen de fondo para los separadores representacin grfica predete
rminada.
background_imagen es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/separador .
classkivy.uix.actionbar.ActionDropDown( kwargs) Bases: kivy.uix.dropdown.
ActionDropDown desplegable clase, consulte la documentacin del mdulo para obtener
ms informacin.
classkivy.uix.actionbar.ActionGroup( kwargs) Bases: kivy.uix.actionbar.ActionItem,k
ivy.uix.Spinner.Spinner
ActionGroup mdulo clase, vea la documentacin para ms informacin.
modo establece el modo actual de un ActionGroup. Si el modo es normal , los nios
ActionGroups ser mostrado normalmente si hay espacio suficiente, de lo contrario
se mostrarn en un spinner. Si el modo es spinner , luego a los nios siempre se m
ostrar en un spinner.
Modo es aOptionProperty y predeterminados a normal .
464

_separador la imagen de fondo de una imagen en un ActionView ActionSeparator.


Separador_imagen es un StringProperty y predeterminados a A- la liga://data/ima
ges/defaulttheme/separador .
Separador_width del ActionView ActionSeparator en un
separador._width es aNumericProperty y predeterminados a 0.

use_separator Especifica el uso de un separador despus/antes de este grupo. o no


use_separador est aBooleanProperty y su valor por defecto es false.
classkivy.uix.actionbar.ActionOverflow( kwargs) Bases: kivy.uix.actionbar.ActionGro
up
ActionOverflow mdulo clase, vea la documentacin para ms informacin.
Imagen_overflow para ser utilizado como un desbordamiento de
desbordamiento. Imagen_imagen es anObjectProperty anddefaults a A- la liga://da
ta/images/defaulttheme/desbordamiento".
classkivy.uix.actionbar.ActionView( kwargs) Bases: kivy.uix.boxlayout BoxLayout
ActionView.class, consulte la documentacin del mdulo para obtener ms informacin.
ACCIN_Anterior Anterior botn para un ActionView.
ACCIN_anterior es anObjectPropertyand predeterminados a Ninguno.
_color de fondo color de fondo en el formato (r, g, b, a).
background_color es aListProperty anddefaults [1, 1, 1, 1].
background_image imagen de fondo de una representacin grfica por defecto ActionVie
ws.
background_imagen es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/action_View .
Grupo_Overflow Widget para ser usado para el desbordamiento.
overflow_group es una ObjectProperty y predeterminados a una instancia de Action
Overflow.
use_separator Especifica si se debe utilizar un separador antes de cada ActionGr
oup. o no
use_separador est aBooleanProperty y su valor por defecto es false.
classkivy.uix.actionbar.ContextualActionView( kwargs) Bases: kivy.uix.actionbar.Act
ionView
ContextualActionView clase, consulte la documentacin del mdulo para obtener ms info
rmacin.
classkivy.uix.actionbar.ActionPrevious( kwargs) Bases: kivy.uix.boxlayout.BoxLayout
,kivy.uix.actionbar.ActionItem
ActionPrevious mdulo de clase, vea la documentacin para ms informacin.
465

app_icon el icono de la aplicacin para el ActionView.


app_icon es un StringProperty y predeterminados para el icono de la ventana si s
e establece lo contrario, data/logo/icono kivy-32.png .
app_icon_height Altura de app_icon image.
app_icon_width de app_imagen de icono. El
color de texto, en el formato de color (r, g, b, a) El
color es aListProperty y predeterminados a [1, 1, 1, 1].
previous_Imagen para anterior ActionButtons representacin grfica predeterminada.
previous_imagen es un StringProperty y predeterminados a A- la liga://data/imag
es/defaulttheme/previous_normal".
previous_image_height Altura de imagen Image_anterior.
previous_image_width ancho de imagen Image_anterior.
Ttulo Ttulo
Ttulo es aStringProperty ActionView y predeterminados a .
Con_anterior haciendo clic en ActionPrevious Especifica si va a cargar la pantal
la anterior o no. Si es True, el anterior_icono se mostrar en caso contrario no s
er.
Con_anterior es aBooleanProperty y su valor predeterminado es True.
classkivy.uix.actionbar.ActionBar( kwargs) Bases: kivy.uix.boxlayout.BoxLayout
ActionBar, consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_previousFired cuando action_anteriores de action_view est pulsado.
action_view_accin vista de ActionBar.
action_view es anObjectProperty y predeterminados a una instancia de ActionView.
background_color, color de fondo, en el formato (r, g, b, a).

background_color es aListProperty anddefaults [1, 1, 1, 1].


background_image imagen de fondo de la representacin grfica por defecto ActionBars
.
background_imagen es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/action_bar .
fronterizos para aplicarse a thebackground_image.
466

36.7 Diseo de anclaje


TheAnchorLayout alinea sus hijos a un borde (arriba, abajo, izquierda, derecha o
centro.
Para dibujar un botn en la esquina inferior derecha:
layout = AnchorLayout( anchor_x= Right , anchor_y= inferior ) = Botn btn(text= Ho
la Mundo ) layout.add_widget(btn)
.anchorlayout classkivy.uix.AnchorLayout( kwargs) Bases: kivy.uix.layout.Diseo
Diseo de anclaje de clase. Consulte la documentacin del mdulo para obtener ms inform
acin.
anchor_x anclaje horizontal.
anchor_x es anOptionProperty y predeterminados a Centro . Acepta los valores de
izquierda , cen- ter o Right .
anchor_y anclaje vertical.
anchor_y es anOptionProperty y predeterminados a Centro . Acepta valores de ar
riba , cen- ter o inferior . El
relleno relleno entre el widget box y sus nios, en pxeles: [el relleno, el relleno
_Left_top_right, el relleno, el relleno_Bottom].
467

padding tambin acepta un argumento dos [formulario relleno, el relleno_HORIZONTAL


_vertical] y un argumento [formulario]. padding
padding es aVariableListProperty y predeterminados a [0, 0, 0, 0].
36.8 Diseo de cuadro
BoxLayout organiza los nios en una caja vertical u horizontal.
Para colocar los widgets por encima/debajo de cada uno de otros, utilice un
diseo vertical: BoxLayout BoxLayout(orientacin ==vertical) = Botn Btn1(text= Hola )
= Botn Btn2(text= El mundo ) layout.add_widget(Btn1) layout.add_widget(Btn2)
a la posicin de los widgets uno junto a otro, utilice un BoxLayout horizontal. En
este ejemplo, utilizamos 10 pxeles de espacio entre los nios; el primer botn cubre
un 70% del espacio horizontal, la segunda cubre el 30%:
diseo BoxLayout(espaciado ==10) = Botn Btn1(text= Hola , tamao_HINT=(.7, 1) = Botn B
tn2(text= world , tamao_HINT=(.3, 1) layout.add_widget(Btn1) layout.add_widget(Bt
n2)
Colocar las sugerencias estn trabajando parcialmente, dependiendo de la orientacin
:
Si la orientacin es vertical: x, derecha y centro_x ser utilizado.
Si la orientacin es horizontal: y, en la parte superior y centro_y ser utilizado.
468

puede controlar los ejemplos/widgets/boxlayout_poshint.py para ver un ejemplo re


al.
Nota: El tamao_hint utiliza el espacio disponible despus de restar todos los widge
ts de tamao fijo. Por ejemplo, si tiene un diseo que es 800px de ancho, y agregue

tres botones como este:


Btn1 = Botn(text= Hola size=(200, 100), tamao_HINT=(Ninguno, Ninguno) = Botn Btn2(
text= Kivy , tamao_HINT=(.5, 1) = Botn Btn3(text= world , tamao_HINT=(.5, 1)
0.5
el primer botn ser de 200px ancho especificado, la segunda y la tercera ser 300
px cada una, por ejemplo: (800-200)
ha cambiado en la versin 1.4.1: Se ha aadido soporte para pos_HINT.
classkivy.uix.boxlayout.BoxLayout( kwargs) Bases: kivy.uix.layout.
Cuadro de diseo de clases de diseo. Consulte la documentacin del mdulo para obtener
ms informacin.
minimum_height calcula automticamente la altura mnima necesaria para contener a to
dos los nios.
Nuevo en la versin 1.9.2.
_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.9.2.
_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.9.2.
_width es aNumericProperty mnimo y el valor predeterminado es 0. Es de slo lectura
.
Orientacin Orientation del diseo.
Orientacin es un OptionProperty y predeterminados a horizontal . Puede ser verti
cal o horizontal . El
relleno relleno entre nios y cuadro de diseo: [el relleno, el relleno_Left_top_rig
ht, el relleno, el relleno_Bottom].
padding tambin acepta un argumento dos [formulario relleno, el relleno_HORIZONTAL
_vertical] y un argumento forma [relleno].
Ha cambiado en la versin 1.7.0: sustituido con VariableListProperty NumericProper
ty.
padding es aVariableListProperty y predeterminados a [0, 0, 0, 0]. El
espaciado el espaciado entre los nios, en pxeles. El
espaciado es aNumericProperty y por defecto es 0.
469

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

arrow_imagen de la flecha apuntando a la burbuja.


arrow_imagen es un StringProperty y predeterminados a A- la liga://data/images/
defaulttheme/bubble_arrow .
arrow_pos especifica la posicin de la flecha en relacin a la burbuja. Puede ser un
o de los siguientes: left_Top, Left_mid, left_bottom top_Left, Top_mid, top_righ
t right_top, right_mid_derecho_inferior izquierda, inferior_mid_inferior derecha
.
arrow_pos es aOptionProperty y predeterminados a inferior ._mid
_color de fondo color de fondo, en el formato (r, g, b, a).
background_color es aListProperty y predeterminados a [1, 1, 1, 1].
background_image imagen de fondo de la burbuja.
background_imagen es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/burbuja".

fronterizos utilizados forBorderImage instrucciones grficas. Se utiliza con theba


ckground_image.
Debe utilizarse cuando se utilizan fondos personalizados.
Debe ser una lista de 4 valores: (arriba, derecha, abajo, izquierda). Lea las in
strucciones BorderImage para obtener ms informacin sobre cmo usarlo.
frontera es aListProperty y predeterminados a (16, 16, 16, 16) ste es el objeto d
e contenido donde el contenido principal de la burbuja se mantiene. El
contenido es aObjectProperty y predeterminados a None .
limit_a especifica el widget para que las burbujas posicin es restringido.
Nuevo en la versin 1.6.0. El
lmite_a es aObjectProperty y predeterminados a None .
Orientacin especifica la manera en que los nios se organizan en el interior de la
burbuja. Puede ser una de vertical o horizontal .
Orientacin es aOptionProperty y predeterminados a horizontal .
show_flecha indica si se debe mostrar la flecha.
Nuevo en la versin 1.8.0.
show_arrow es aBooleanProperty y su valor predeterminado es True.
classkivy.uix.bubble.BubbleButton( kwargs) Bases: kivy.uix.button.botn
diseado para su uso en una burbuja de widget. Puede utilizar una "normal" de la c
lase Button, pero no se ve bien a menos que el contexto ha cambiado.
Utilizar este widget BubbleButton sino que ya est definida y proporciona un fondo
adecuado para usted.
472

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 &lt;%s&gt; 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 &lt;%s&gt; estado es &lt;%s"&gt;
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

background_disabled_down es un StringProperty y predeterminados a A- la liga://


data/images/defaulttheme/button_disabled_presionado .
background_disabled_normal de imagen de fondo del botn que se utiliza para la rep
resentacin grfica por defecto cuando el botn est deshabilitado y no presionado.
Nuevo en la versin 1.8.0.
ANTECEDENTES_disabled_normal es un StringProperty y predeterminados a A- la lig
a://data/images/defaulttheme/button_disabled .
background_abajo de la imagen de fondo del botn que se utiliza para la representa
cin grfica por defecto cuando se pulsa el botn.
Nuevo en la versin 1.0.4.
ANTECEDENTES_down es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/button_presionado .
background_normal de imagen de fondo del botn que se utiliza para la representacin
grfica por defecto cuando la tecla no est pulsada.
Nuevo en la versin 1.0.4.
ANTECEDENTES_normal es un StringProperty y predeterminados a A- la liga://data/
images/defaulttheme/botn".
fronterizos utilizados forBorderImage instrucciones grficas. Utiliza withbackgrou
nd_NORMAL_down y de fondo. Puede utilizarse para fondos personalizados.
Debe ser una lista de cuatro valores: (arriba, derecha, abajo, izquierda). Lea l
a instruccin BorderImage para obtener ms informacin sobre cmo usarlo.
frontera es aListProperty y predeterminados a (16, 16, 16, 16)
36.11 La Cmara
La cmara widget es utilizado para capturar y visualizar el video desde una cmara.
Una vez que el widget se crea, la textura dentro el widget se actualizar automtica
mente. Aplicacin OurCameraBase se utiliza bajo el cap:
CAM Cmara =()
Por defecto, la primera cmara encontrada en su sistema es utilizado. Utilice una
cmara diferente, establezca la propiedad Index:
CAM Cmara =(index=1)
tambin puede seleccionar la resolucin de la cmara:
cam(Resolucin de cmara ==(320, 240)
Advertencia: La textura de la cmara no se actualiza tan pronto como se haya cread
o el objeto. Inicializacin de la cmara es asincrnica, por lo que puede haber un ret
ardo antes de que el pedido de textura es creado.
474

classkivy.uix.cmara.Cmara( kwargs) Bases: kivy.uix.image.Imagen


clase de cmara. Consulte la documentacin del mdulo para obtener ms informacin.
index ndice de la cmara, empezando desde 0.
index es aNumericProperty y predeterminados a -1 para permitir seleccin automtica.
juego Boolean que indica si la cmara est jugando o no. Puede iniciar/detener la cma
ra estableciendo esta propiedad:
# inicia la cmara juega en la creacin (predeterminado) = Cmara cam(play=True)
# crear la cmara y empezar ms tarde cam Cmara =(play=false) # y luego cam.play = Tr
ue
Play es aBooleanProperty y su valor predeterminado es True.
resolucin resolucin preferida para utilizar a la hora de invocar la cmara. Si usted
est utilizando [-1, -1], la resolucin ser el predeterminado:
# crear un objeto camera con la mejor imagen disponible cam Cmara =()
# crear un objeto camera con una imagen de 320x240 si es posible cam(Resolucin de
cmara ==(320, 240)
Advertencia: Dependiendo de la aplicacin, puede que la cmara no respetar esta prop
iedad. La

resolucin es aListProperty y predeterminados a [-1, -1].


36.12 Carrusel de
nuevo en la versin 1.4.0.
TheCarousel widget proporciona la clsica vista de carrusel para mviles donde puede
deslizarse entre las diapositivas. Puede agregar cualquier contenido al carruse
l y tienen que desplazarse horizontalmente o verticalmente. El carrusel puede mo
strar las pginas en una secuencia o un bucle.
Ejemplo:
Importacin de kivy.app App de kivy.uix.carrusel Carrusel de importacin de kivy.uix
.importar imagen
clase AsyncImage CarouselApp(App):
def construir(self):
Carrusel Carrusel =(direccin= right ) for i in range(10):
475

i la imagen = AsyncImage(source=src, allow_stretch=True) carrusel_widget.add(ima


gen) volver carrusel % src = "http://placehold.it/480x270.png&amp;text=slide-%d&
amp;.png"
CarouselApp().run()
ha cambiado en la versin 1.5.0: El carrusel soporta ahora los nios activos, como e
l ScrollView.
Detectar un gesto de deslizamiento segn el Carrusel.scroll_timeout y Carrusel.scro
ll_distancia propiedades.
Adems, el contenedor de diapositivas ya no es expuesto por la API. El prop- ertie
s impactadas son Carrusel.diapositivas, carrusel.current_diapositiva, carrusel.p
revious_slide y Carrusel.next_diapositiva.
classkivy.uix.carrusel.Carrusel( kwargs) Bases: kivy.uix.stencilview.StencilView
clase de carrusel. Consulte la documentacin del mdulo para obtener ms informacin.
anim_cancel_duration define la duracin de la animacin cuando un lector de movimien
to no es aceptada. Esto es generalmente cuando el usuario no realiza un golpe lo
suficientemente grande. Seemin_move.
anim_cancel_duration es aNumericProperty y predeterminados a 0,3.
anim_MOVE_duration define la duracin de la animacin de carrusel entre pginas.
anim_MOVE_duration es aNumericProperty y predeterminados a 0,5.
anim_type El tipo de animacin para utilizar mientras la animacin a la diapositiva
siguiente/anterior. Este debe ser el nombre de funcin anAnimationTransition.
anim_type es aStringProperty y predeterminados a "out_quad .
Nuevo en la versin 1.8.0.
current_deslice la diapositiva mostrada actualmente.
current_diapositiva es anAliasProperty.
Ha cambiado en la versin 1.5.0: La propiedad ya no expone las diapositivas del co
ntenedor. Devuelve el widget que han agregado.
direccin especifica la direccin en la que se ordenan las diapositivas. Esto corres
ponde a la direccin desde la cual el usuario pasadas para pasar de una diapositiv
a a la siguiente. Puede ser derecha, izquierda, arriba o abajo. Por ejemplo, con
el valor por defecto de la derecha, la segunda diapositiva est a la derecha de l
a primera y el usuario se desliza desde la derecha hacia la izquierda para llega
r a la segunda diapositiva. La
direccin es anOptionProperty y predeterminados a Right .
index Get/Set la diapositiva actual basado en el ndice. El
ndice es anAliasProperty y por defecto es 0 (el primer elemento).
load_next(mode= Next ) Animar a la siguiente diapositiva.
Nuevo en la versin 1.7.0.
476

load_previous() Animar a la diapositiva anterior.


Nuevo en la versin 1.7.0.
cargar_diapositiva(Diapositiva) Animar a la diapositiva que se pasa como argumen
to.
Ha cambiado en la versin 1.8.0.
loop permitir el carrusel en un bucle infinito. Si es verdadero, cuando el usuar
io intenta pasar ms all de la ltima pgina, se volver a la primera. Si es False, se ma
ntendr en la ltima pgina. El
bucle es aBooleanProperty y su valor por defecto es false.
min_move define la distancia mnima para ser cubiertos antes del toque es consider
ado un gesto de deslizamiento y el carrusel contenido cambiado. Esto es expresad
o como una fraccin del ancho del carrusel.
Si el movimiento no alcanza este valor mnimo, el movimiento se cancela y el conte
nido se restablece a su posicin original.
min_move es aNumericProperty y predeterminados a 0,2.
NEXT_deslice la siguiente diapositiva en el carrusel. Es Ninguno si la diapositi
va actual es la ltima diapositiva en el carrusel.
Este orden refleja el orden en que se agregan las diapositivas de su presentacin
vara de mate- rial para ladireccin propiedad.
NEXT_diapositiva es anAliasProperty.
Ha cambiado en la versin 1.5.0: La propiedad ya no expone las diapositivas del co
ntenedor. Devuelve el widget que han agregado.
previous_deslice la diapositiva anterior en el carrusel. Es Ninguno si la diapos
itiva actual es la primera diapositiva en el carrusel. Este orden refleja el ord
en en que se agregan las diapositivas: su presentacin vara segn ladireccin propiedad
.
previous_diapositiva es anAliasProperty.
Ha cambiado en la versin 1.5.0: Esta propiedad ya no expone las diapositivas del
contenedor. Devuelve el widget que han agregado.
scroll_distancia distancia para mover antes de desplazarse theCarousel en pxeles.
Tan pronto como la distancia que ha recorrido, el Carrusel comenzar a desplazars
e, y ningn evento tctil ir a los nios. Es aconsejable que la base de este valor en e
l dpi de la pantalla del dispositivo de destino.
scroll_distancia es aNumericProperty y predeterminados a 20DP.
Nuevo en la versin 1.5.0.
scroll_timeout timeout permite activar el scroll_distancia, en milisegundos. Si
el usuario no ha movedscroll_distancia dentro del tiempo de espera, no se produc
ir el desplazamiento y el toque evento saldrn a la infancia.
scroll_timeout es aNumericProperty y predeterminados a 200 (milisegundos)
nuevo en la versin 1.5.0.
se desliza lista de diapositivas dentro del carrusel. Las diapositivas son los w
idgets aadido al carrusel utilizando el mtodo add_widget.
477

diapositivas es aListProperty y es de slo lectura.


36,13 CheckBox
nuevo en la versin 1.4.0.
Casilla de verificacin es un botn de dos estados que pueden ser activadas o desact
ivadas. Si la casilla de verificacin est en un grupo, se convierte en un botn de ra
dio. Como con theToggleButton, slo un botn de radio en un momento puede ser selecc
ionado cuando theCheckBox.group est configurado.
Un ejemplo de uso:
desde kivy.uix.checkbox casilla de importacin
# ...
def sobre_checkbox_activo(checkbox, valor):
si el valor:

print( checkbox , checkbox, activo ) else:


print( checkbox , checkbox, inactivo )
casilla de verificacin CheckBox() = checkbox.bind(active=on_checkbox_active)
classkivy.uix.checkbox.CheckBox( kwargs) Bases: kivy.uix.behaviors.togglebutton.Tog
gleButtonBehavior, kivy.uix.widget.
clase CheckBox Widget, consulte la documentacin del mdulo para obtener ms informacin
.
active indica si el interruptor es activo o inactivo.
activo es aBooleanProperty y su valor por defecto es false.
background_checkbox_disabled_down la imagen de fondo de la casilla de verificacin
utilizados para la representacin grfica por defecto cuando la casilla de verifica
cin se desactiva y activa.
Nuevo en la versin 1.9.0.
478

background_checkbox_disabled_down es un StringProperty y predeterminados a A- l


a liga://data/images/defaulttheme/checkbox_disabled_on .
background_checkbox_disabled_normal la imagen de fondo de la casilla de verifica
cin utilizados para la representacin grfica por defecto cuando la casilla est desact
ivada y no activo.
Nuevo en la versin 1.9.0.
ANTECEDENTES_checkbox_disabled_normal es aStringProperty y predeterminados a Ala liga://data/images/defaulttheme/checkbox_disabled_off .
background_checkbox_abajo la imagen de fondo de la casilla de verificacin utiliza
dos para la representacin grfica predeterminada cuando est activada la casilla de v
erificacin.
Nuevo en la versin 1.9.0.
ANTECEDENTES_checkbox_down es un StringProperty y predeterminados a A- la liga:
//data/images/defaulttheme/checkbox_on .
background_checkbox_normal la imagen de fondo de la casilla de verificacin utiliz
ados para la representacin grfica por defecto cuando la casilla no est activo.
Nuevo en la versin 1.9.0.
ANTECEDENTES_checkbox_normal es un StringProperty y predeterminados a A- la lig
a://data/images/defaulttheme/checkbox_off .
background_RADIO_disabled_abajo de la imagen de fondo del botn utilizado para la
representacin grfica por defecto cuando el botn se desactiva y activa.
Nuevo en la versin 1.9.0.
ANTECEDENTES_RADIO_disabled_down es un StringProperty y predeterminados a A- la
liga://data/images/defaulttheme/checkbox_RADIO_disabled_on .
background_RADIO_disabled_normal de imagen de fondo del botn utilizado para la re
presentacin grfica por defecto cuando el botn est desactivado y no activo.
Nuevo en la versin 1.9.0.
ANTECEDENTES_RADIO_disabled_normal es un StringProperty y predeterminados a Ala liga://data/images/defaulttheme/checkbox_RADIO_disabled_off .
background_RADIO_abajo de la imagen de fondo del botn utilizado para la represent
acin grfica predeterminada cuando se activa el botn de radio.
Nuevo en la versin 1.9.0.
ANTECEDENTES_RADIO_down es un StringProperty y predeterminados a A- la liga://d
ata/images/defaulttheme/checkbox_RADIO_on .
background_RADIO_normal de imagen de fondo del botn utilizado para la representac
in grfica por defecto cuando el botn no est activo.
Nuevo en la versin 1.9.0.
ANTECEDENTES_RADIO_normal es un StringProperty y predeterminados a A- la liga:/
/data/images/defaulttheme/checkbox_RADIO_off .
479

color El color se utiliza para teir la representacin grfica predeterminada de casil


la de verificacin y botn de radio (imgenes).
Est en el formato de color (r, g, b, a). Utilice alfa superior a 1 para obtener c
olores ms brillantes. Hace ms de 4 alpha blending y marque la frontera juntos.
Nuevo en la versin 1.9.2. El
color es aListProperty y predeterminados a [1, 1, 1, 1] .
36.14 de entrada de cdigo
nuevo en la versin 1.5.0.
TheCodeInput dispone de un cuadro de texto resaltado editable como la mostrada e
n la imagen.
Admite todas las funciones proporcionadas por el textinput, as como cdigo resaltad
o para lenguajes soportados por pygments junto con KivyLexer forkivy.lang resalt
ado.
Ejemplo de uso de 36.14.1
para crear un CodeInput con resaltado de KV idioma:
de kivy.uix.codeinput CodeInput importacin de kivy.extras.destaque importar KivyL
exer codeinput = CodeInput(lexer=KivyLexer())
para crear un CodeInput con resaltado de Cython:
de kivy.uix.codeinput importar desde pygments lexers CodeInput.importar CythonLe
xer codeinput = CodeInput(lexer=CythonLexer())
.codeinput classkivy.uix.CodeInput( kwargs) Bases: kivy.uix.behaviors.codenavigatio
n.CodeNavigationBehavior, kivy.uix.textinput
CodeInput.TextInput clase, utilizada para mostrar cdigo resaltado.
480

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(

kwargs) Bases: kivy.uix.relativelayout.

Consulte la documentacin del mdulo RelativeLayout.


color color mantiene el color actualmente seleccionado en formato rgba. El
color es aListProperty y predeterminados a (1, 1, 1, 1).
nombre_font Especifica la fuente utilizada en el componente ColorPicker.
nombre_font es aStringProperty y predeterminados a data/fonts/RobotoMono-Regula
r.ttf".
Thehex hex_color_color mantiene el color seleccionado actualmente en hex.
hex_color es anAliasProperty y predeterminados a #ffffffff.
vhs Thehsv mantiene el color actualmente seleccionado en formato vhs
el VHS es aListProperty y predeterminados a (1, 1, 1).
rueda de lostornillos mantiene el color Rueda.
rueda es anObjectProperty y predeterminados a Ninguno.
classkivy.uix.colorpicker.ColorWheel( kwargs) Bases: kivy.uix.widget.Widget
para la rueda cromtica ColorPicker.
Ha cambiado en la versin 1.7.1: font_size, font_name_color de primer plano y se h
an eliminado. El tamao es ahora el mismo como otros widget, basado en "P". Orient
acin tambin se determina automticamente segn la relacin anchura/altura.
El valor Alfa del color seleccionado actualmente.
Se aBoundedNumericProperty y puede ser un valor de 0 a 1.
b el valor de azul del color seleccionado actualmente.
b es aBoundedNumericProperty y puede ser un valor de 0 a 1.
El color mantiene el color seleccionado actualmente. El
color es aReferenceListProperty y contiene una lista de r, g, b, a valores.
g el valor de verde del color seleccionado actualmente.
g es aBoundedNumericProperty y puede ser un valor de 0 a 1.
r el valor de rojo del color seleccionado actualmente.
r es aBoundedNumericProperty y puede ser un valor de 0 a 1. El valor por omisin e
s 0.
482

36.16 Lista despegable


nuevo en la versin 1.4.0.
Una lista desplegable verstil que puede utilizarse con widgets personalizados. Le
permite mostrar una lista de widgets en la visualizacin de un widget. A diferenc
ia de otras herramientas, la lista de widgets pueden contener cualquier tipo de
widget: simples botones, imgenes, etc.
El posicionamiento de la lista desplegable es completamente automtica: siempre in
tentaremos colocar la lista desplegable de forma que el usuario puede selecciona
r un elemento de la lista.
36.16.1 ejemplo bsico
un botn con una lista desplegable de 10 posibles valores. Todos los botones dentr
o de la lista desplegable se activar el men DropDown.select() mtodo. Despus de recib
ir la llamada, el texto del botn principal mostrar la seleccin de la lista desplega
ble.
de kivy.uix.dropdown DropDown importacin de kivy.uix.Button Botn Importar de kivy.
base importar runTouchApp
# crear un men desplegable con 10 botones desplegable desplegable =() para el ndic
e en el intervalo(10):
# al agregar widgets, necesitamos especificar la altura manualmente (deshabilita
r # el tamao_HINT_y) de modo que el men desplegable puede calcular el rea que neces
ita.
Index, el tamao_y_HINT=none, height=44) % = botn btn(text= Valor %d
# para cada botn, fije una devolucin de llamada que se llame al mtodo Select() # en
el men desplegable. Pasaremos el texto del botn, como los datos de la seleccin #.
btn.bind(sobre_release=lambda btn: dropdown.select(btn.text))
# y despus agregar el botn en el interior de la lista desplegable dropdown.add_wid
get(btn)

# crear un gran botn principal mainbutton = Botn(text= Hola , tamao_HINT=(Ninguno,


Ninguno))
# Mostrar el men desplegable cuando se suelta el botn principal # Nota: todas las
llamadas bind() pase la instancia de la persona que llama (aqu, el # mainbutton i
nstancia) como el primer argumento de la funcin callback (aqu, # dropdown.open).
mainbutton.bind(on_release=dropdown.open)
# Una ltima cosa, escuchar la seleccin en la lista desplegable y # asignar los dat
os para el texto del botn.
dropdown.bind(sobre_SELECT=lambda ejemplo, x: setattr(mainbutton, texto , x))
)
36.16.2 runTouchApp(mainbutton ampliar desplegable de kv
puede crear una lista desplegable directamente desde su kv:
483

#:kivy 1.4.0 <CustomDropDown>


Botn ::
texto: Mi primer elemento size_y_HINT: Ninguna Altura: 44_release: root.select
( item1 ) Etiqueta:
texto: elemento Unselectable tamao_y_HINT: Ninguna Altura: 44 Botn:
texto: Mi segundo tema size_y_HINT: Ninguna Altura: 44_release: root.select( i
tem2")
y a continuacin, cree la clase python asociado y utilizarlo:
clase CustomDropDown (DropDown):
pase de
lista desplegable CustomDropDown mainbutton =() = Botn(text= Hola , tamao_HINT=(Ni
nguno, Ninguno) mainbutton.bind(on_release=dropdown.open) dropdown.bind(sobre_SE
LECT=lambda ejemplo, x: setattr(mainbutton, texto , x))
classkivy.uix.dropdown.DropDown( kwargs) Bases: kivy.uix.scrollview.ScrollView
clase desplegable. Consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_select: dataFired cuando se realiza una seleccin. Los datos de la sele
ccin se pasa como primer argumento y es lo que le pasa en theselect() mtodo como p
rimer argumento.
El_DISMISS:Nuevo en la versin 1.8.0.
Dispararon cuando la lista desplegable se desestim, ya sea en la seleccin o en toc
ar fuera del widget.
attach_a (interna) de los bienes que se establecer en el widget de la lista despl
egable que se adjunta.
Theopen() mtodo establecer automticamente esta propiedad whilstdismiss() va a regre
sar a Ninguno.
auto_descartar de forma predeterminada, el men desplegable ser automticamente deses
timada cuando un toque ocurre fuera de ella, esta opcin permite deshabilitar esta
caracterstica
auto_DISMISS es aBooleanProperty y su valor predeterminado es True.
Nuevo en la versin 1.8.0.
auto_width Por defecto, el ancho de la lista desplegable ser el mismo que el anch
o del widget adjunto.
False si desea proporcionar su propio ancho.
contenedor (interna) de los bienes que se establecer en el contenedor de la lista
desplegable. Es aGridLayout por defecto.
484

descartar( largs) Quitar el widget desplegable desde la ventana y separarlo del wi


dget adjunto
desestime_on_select Por defecto, la lista desplegable ser automticamente desestima

da cuando una seleccin se ha hecho.


Se establece en False para evitar que la despedir.
descartar_on_select es aBooleanProperty y su valor predeterminado es True.
max_height indica la altura mxima que el men desplegable puede tomar. Si ninguno,
tomar la altura mxima disponible hasta la parte superior o inferior de la pantalla
es alcanzado.
max_height es aNumericProperty y predeterminados a Ninguno.
min_state_time tiempo mnimo antes de theDropDown es rechazada. Esto se utiliza pa
ra permitir el widget dentro de la lista desplegable para mostrar un estado de a
pagado o theDropDown para visualizar una animacin para cerrar.
min_state_time es aNumericProperty y utiliza por omisin el valor min Config_state
_time.
Nuevo en la versin 1.9.2.
open(widget) Abra la lista desplegable y adjuntarlo a un widget especfico. Depend
iendo de la posicin del widget en la ventana y la altura de la lista desplegable,
el men desplegable puede estar por encima o por debajo de dicho widget.
Seleccione(data) Llame a este mtodo para desencadenar el evento on_select con la
seleccin de los datos. Los datos pueden ser cualquier cosa que desee.
36.17 EffectWidget
nuevo en la versin 1.9.0: Este cdigo es todava experimental y su API est sujeta a ca
mbios en versiones futuras.
TheEffectWidget es capaz de aplicar una amplia variedad de efectos grficos de fan
tasa para sus nios. Funciona por ren- dering a una serie de instancias ofFbo perso
nalizado con opengl shaders fragmento. Como tal, los efectos pueden libremente h
acer casi cualquier cosa, desde invertir los colores del widget, anti-aliasing,
para emular el aspecto de un monitor CRT!
El uso bsico es el siguiente:
w = w EffectWidget().add_widget(Botn(text="Hola!") w.Effects = [InvertEffect(), H
orizontalBlurEffect(size=2.0)]
el equivalente en kv sera:
#: importar ew.effectwidget kivy.uix EffectWidget:
efectos: ew.InvertEffect(), ew.HorizontalBlurEffect(size=2.0) Botn:
texto: Hola! de
los efectos puede ser una lista de efectos de cualquier longitud, y se aplicarn d
e forma secuencial.
El mdulo viene con una variedad de efectos precompilados, pero la interfaz est dis
eada para que sea fcil crear tu propia. En lugar de escribir un completo glsl somb
reado, puede proporcionar una sola funcin que toma algunas entradas
485

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 -&gt; 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.

MonochromeEffect - hace que el widget en escala de grises.


InvertEffect - Invierte los colores del widget.
ChannelMixEffect - intercambia los canales de color.
ScanlinesEffect - muestra parpadeos scanlines.
pixelates PixelateEffect - la imagen.
HorizontalBlurEffect - Gaussuan desenfoca horizontalmente.
VerticalBlurEffect - Gaussuan desenfoca verticalmente.
FXAAEffect - aplica un anti-aliasing muy bsico.
36.17.3 crear efectos
adversos se han diseado para que sea fcil crear y usar sus propias transformacione
s. Puede hacerlo creando y utilizando una instancia ofEffectBase con su propio c
ustomEffectBase.glsl propiedad.
El glsl propiedad es una cadena que representa parte de un fragmento de glsl sha
der. Puede incluir tantas funciones como quieras (la cadena es simplemente empal
mar en todo el shader), sino que debe implementar un functioneffect como se indi
ca a continuacin:
vec4 efecto(vec4 en color, sampler2D la textura, vec2 tex_coords, vec2 coords) {
// ... aqu su cdigo devolver algo; // Debe ser un vec4 que representa el nuevo co
lor }
El pleno shader calcular el normal el color del pxel en cada punto y, a continuacin
, llame a su funcin effect para transformarla. Los parmetros son:
color: El color normal del pxel actual (es decir, la textura muestreada en tex_co
ords).
textura: La textura que contiene el widget normal del fondo.
tex_coords: La textura normal_coords utilizado para acceder a la textura.
486

coords: Los ndices de pxel del pxel actual.


El shader cdigo tambin tiene acceso a dos variables uniformes,tiempo til con el tie
mpo (en segundos) desde el inicio del programa, que contiene la forma andresolut
ion (x pxeles y pxeles) del widget.
Por ejemplo, la siguiente cadena simple (tomado de la InvertEffect) podra inverti
r el color de entrada pero establezca Alpha 1.0:
vec4 efecto(vec4 en color, sampler2D la textura, vec2 tex_coords, vec2 coords) {
return vec4(1.0 - color.xyz, 1.0); }
Tambin puede establecer el glsl por carga automticamente la cadena desde un archiv
o, simplemente establezca la EffectBase.fuente propiedad de un efecto.
classkivy.uix.effectwidget.EffectWidget( kwargs) Bases: kivy.uix.relativelayout.Rel
ativeLayout
Widget con la capacidad de aplicar una serie de efectos grficos a sus hijos. Cons
ulte la documentacin del mdulo para obtener ms informacin sobre el ajuste de efectos
y crear tus propios
antecedentes_color define el color de fondo que se utilizar para el fbo en el Eff
ectWidget.
background_color es aListProperty predeterminados a (0, 0, 0, 0)
Lista de efectos de todos los efectos que se pueden aplicar. Estos deberan ser to
das las instancias o subclases de EffectBase.
efectos es aListProperty y predeterminados a [].
fbo_list (interno) Lista de todas las organizaciones confesionales que se utiliz
an para aplicar los efectos.
fbo_list es aListProperty y predeterminados a [].
refresh_fbo_setup(*args) (interno) crea y asigna oneFbo por efecto, y se asegura
de que todos los tamaos etc. son correctas y coherentes.
Textura La Textura de la salida finalFbo despus todos los efectos han sido aplica
das. La
textura es anObjectProperty y predeterminados a Ninguno.
classkivy.uix.effectwidget.EffectBase( args,
kwargs) Bases: kivy.event.EventDispatch

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

todo el sombreado se compone ofshader_header_shader + + uniformes self.glsl + sh


ader_footer_efecto.
fuente (opcional) El nombre del archivo que desea cargar theglsl cadena.
Fuente es aStringProperty y predeterminados a .
.effectwidget classkivy.uix.AdvancedEffectBase( args,
kwargs) Bases: kivy.uix.effect
widget.EffectBase
un EffectBase con comportamiento adicional para establecer y actualizar fcilmente
las variables uniformes en el sombreado.
Esta clase se proporcionan para su comodidad a la hora de implementar sus propio
s efectos: no se utiliza ninguna de las previstas con Kivy.
Adems de su base glsl cadena que debe proporcionarse como normal, propertyuniform
s theAdvancedEffectBase tiene un extra, un diccionario de pares nombre-valor. Si
empre que se cambia un valor, el nuevo valor de la variable uniforme est cargado
en el sombreado.
An debe declarar manualmente variables uniforme en la parte superior de la cadena
glsl.
uniformes uniformes un diccionario de nombres de variables y sus valores. Estos
son cargados automticamente a thefbo shader si procede.
uniformes es aDictProperty y predeterminados a {}.
.effectwidget classkivy.uix.MonochromeEffect( args,
kwargs) Bases: kivy.uix.effectwi
dget.EffectBase
devuelve sus colores de entrada en monocromo.
classkivy.uix.effectwidget.InvertEffect( args,
kwargs) Bases: kivy.uix.effectwidget.
EffectBase
Invierte los colores en la entrada.
.effectwidget classkivy.uix.ChannelMixEffect( args,
kwargs) Bases: kivy.uix.effectwi
dget.EffectBase
mezcla los canales de color de la entrada segn el orden de la propiedad. Los cana
les pueden ser arbitrariamente reorganizan o repetidos.
Solicite el nuevo orden de los canales RGB. El
orden es aListProperty y predeterminados a [1, 2, 0], correspondiente a (g, b, r
).
classkivy.uix.effectwidget.ScanlinesEffect( args,
kwargs) Bases: kivy.uix.effectwidg
et.EffectBase
agrega scanlines a la entrada.
classkivy.uix.effectwidget.PixelateEffect( args,
kwargs) Bases: kivy.uix.effectwidge
t.EffectBase
Pixelates la entrada segn itspixel_size
_pixel size establece el tamao de un nuevo "pxel" en el efecto, en trminos de nmero
de pxeles real .
pixel_size es aNumericProperty y predeterminados a 10.
.effectwidget classkivy.uix.HorizontalBlurEffect( args,
kwargs) Bases: kivy.uix.effe
ctwidget.EffectBase

488

desenfoca la entrada horizontalmente, con la anchura dada bysize.


Tamao del desenfoque ancho en pxeles. El
tamao es aNumericProperty y predeterminados a 4.0.
classkivy.uix.effectwidget.VerticalBlurEffect( args,
kwargs) Bases: kivy.uix.effectw
idget.EffectBase
desenfoca la entrada en posicin vertical con la anchura dada bysize.
Tamao del desenfoque de
tamao ancho en pxeles. Es aNumericProperty y predeterminados a 4.0.
classkivy.uix.effectwidget.FXAAEffect( args,
kwargs) Bases: kivy.uix.effectwidget.Ef
fectBase
aplica muy simple mediante fxaa anti-aliasing.
36.18 FileChooser
FileChooser mdulo proporciona varias clases para describir, mostrar y explorar lo
s sistemas de archivos.
36.18.1 widgets simples
hay dos listas para usar los widgets que proporcionan vistas del sistema de arch
ivos. Cada uno de estos presentes los archivos y carpetas en un estilo diferente
.
TheFileChooserListView muestra las entradas del archivo de texto como elementos
en una lista vertical, donde las carpetas pueden estar ocultas y ampliado.
TheFileChooserIconView presenta los iconos y el texto de izquierda a derecha, wr
appping ellos segn sea necesario.
489 se

proporcionan para el desplazamiento, la seleccin y la interaccin de usuario bsico.


Consulte la FileChooserController para detalles sobre el soporte de propiedades
y eventos.
36.18.2 composicin widget
FileChooser clases adoptar un diseo MVC. Estn expuestos de manera que puedan ampli
ar y personalizar el selector de archivos segn sus necesidades.
FileChooser clases pueden clasificarse como sigue:
Los modelos estn representados por las implementaciones concretas de clase, como
theFileSystemAbstract theFileSystemLocal.
Vistas son representados por el FileChooserIconLayout FileChooserListLayout y cl
ases. Estos son utilizados por theFileChooserListView andFileChooserIconView wid
gets respectivamente.
Controladores estn representados por las implementaciones concretas de los FileCh
ooserController, a saber,FileChooserIconView theFileChooser andFileChooserListVi
ew clases.
Esto significa que usted puede definir sus propias opiniones o proporcionar impl
ementaciones FileSystemAbstract para sistemas de archivo alternativo para utiliz
ar con estos widgets. TheFileChooser puede ser utilizado como un controlador par
a manejar mltiples, sincronizado en vistas de la misma ruta. Combinando estos ele
mentos, puede agregar sus propias opiniones y sistemas de archivos y hacerlos in
teractuar fcilmente con los componentes existentes.
Ejemplo de uso de 36.18.3
main.py
de kivy.app App de importacin.floatlayout kivy.uix FloatLayout importacin de kivy.
fbrica de fbrica de importacin importacin de kivy kivy.properties ObjectProperty.uix
.popup Popup
490

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:

tamao_y_HINT: Ninguna Altura: 30 Botn:


texto: "Cancelar" en_release: root.Cancel()
:
Texto: botn "Cargar" sobre_release: root.load(filechooser.path, filechooser.selec
cin)
<SaveDialog>:
Texto: texto_input_input BoxLayout:
Tamao: root.tamao pos: root.pos orientacin: "vertical":
id: FileChooserListView filechooser on_selection: text_input.Text = self.Seleccin
y self.seleccin[0] o
TextInput:
id: text_input size_y_HINT: Ninguna Altura: 30
492

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

ascii filename, undecodable sin saberlo la primera codificacin, no tenemos otra o


pcin que la de adivinar.
Por favor tenga en cuenta que si se produce un problema debido a la falta de una
codificacin aqu, estaremos encantados de aadir a esta lista.
file_codificaciones es aListProperty y predeterminados a [ utf-8 , latin1 , cp
1252 ].
Nuevo en la versin 1.3.0.
Obsoleto desde la versin 1.8.0: Esta propiedad ya no se utiliza como el filechoos
er ya no descodifica los nombres de archivo.
file_system el objeto de sistema de archivos utiliza para acceder al sistema de
archivos. Esto debe ser una subclase de FileSystemAbstract.
file_system es anObjectProperty e incumplimientos toFileSystemLocal()
nuevo en la versin 1.8.0.
Los archivos de la lista de archivos en el directorio especificado por ruta desp
us de aplicar los filtros.
archivos es una lectura onlyListProperty.
filter_dirs indica si los filtros se deben aplicar tambin a directorios. filter_d

irs es aBooleanProperty y su valor por defecto es false.


filtros especifica los filtros que se aplican a los archivos en el directorio. F
iltros es aListProperty y predeterminados a []. Esto es equivalente a " " es decir
, nada se filtra.
Los filtros no se restablece cuando la trayectoria cambia. Tendr que hacerlo si l
o desea.
Existen dos tipos de filtros: patrones y callbacks.
1.Patrones por ejemplo [ .png"]. Puede utilizar los siguientes patrones:
coincide con todo ? Coincide con cualquier carcter individual
Patrn Significado
[Seq] coincide con cualquier caracter en seq [!seq] coincide con cualquier carcte
r que no se encuentre en seq 2.Callbacks puede especificar una funcin que se llam
ar para cada archivo. La devolucin de llamada se pasar la carpeta y nombre de archi
vo como parmetros de primero y segundo, respectivamente. Debe devolver true para
indicar una coincidencia y False en caso contrario.
Ha cambiado en la versin 1.4.0: Se ha aadido la opcin de especificar el filtro como
una devolucin de llamada.
get_nice_size(fn) Pasar la ruta del archivo. Devuelve el tamao en el mejor format
o legible o
si es un directorio (no Calcular tamao de forma recursiva).
diseo referencia a la instancia de widget de diseo. El
diseo es anObjectProperty.
Nuevo en la versin 1.9.0.
multiselect determina si el usuario puede seleccionar varios archivos o no
es aBooleanProperty multiselect y el valor predeterminado es False.
495

ruta es un StringProperty y por defecto en el directorio de trabajo actual como


una cadena Unicode. Especifica la ruta de acceso en el sistema de ficheros que d
ebe referirse a este controlador.
Advertencia: Si una ruta Unicode es especificado, todos los archivos sern devuelt
os en Unicode, lo que permite la visualizacin de archivos Unicode y rutas. Si se
especifica una ruta de bytes, slo los archivos y las rutas con nombres ASCII se m
ostrarn correctamente: no-ascii los nombres sern mostrados y listados con signos d
e interrogacin (?) en lugar de sus caracteres Unicode.
progress_Cls clase a utilizar para mostrar un indicador de progreso para el file
chooser cargando.
progress_cls es toFileChooserProgress anObjectProperty y valores predeterminados
.
Nuevo en la versin 1.2.0.
Ha cambiado en la versin 1.8.0: Si se establece en una cadena, la fbrica se usar pa
ra resolver el nombre de la clase.
rootpath root path para utilizar en lugar de la ruta de la raz del sistema. Si se
establece, no se mostrar un directorio ".." para ir hasta la ruta raz. Por ejempl
o, si establece rootpath en /users/foo, el usuario ser incapaz de ir a /usuarios
o a cualquier otro directorio que no empiezan con /users/loquesea
rootpath es aStringProperty y predeterminados a Ninguno.
Nuevo en la versin 1.2.0.
Nota: De manera similar a la ruta, si rootpath est especificado en bytes o una ca
dena unicode deter- mina el tipo de los nombres de los archivos y las rutas de l
ectura.
seleccin contiene la lista de archivos que estn actualmente seleccionada. La
seleccin es una lectura onlyListProperty y predeterminados a [].
show_hidden determina si los archivos y carpetas ocultos deben mostrarse.
show_hidden es aBooleanProperty y su valor por defecto es false.
sort_func proporciona una funcin llamada con una lista de nombres de archivo como
primer argumento y el filesys- tem aplicacin como segundo argumento. Devuelve un
a lista de nombres de archivos ordenados para mostrar en la vista.
sort_func es una ObjectProperty y predeterminados para una funcin regrese alfanumr

icamente denominado primero las carpetas.


Ha cambiado en la versin 1.8.0: La firma debe ahora 2 argumentos: primero la list
a de archivos, segunda clase a utilizar el sistema de ficheros.
classkivy.uix.filechooser.FileChooserProgressBase( kwargs) Bases: kivy.uix.floatlay
out.FloatLayout
Base para implementar una visin de progreso. Esta vista se utiliza cuando hay dem
asiadas entradas necesitan ser creados y se retras durante varios fotogramas.
Nuevo en la versin 1.2.0.
Cancel( largs) Cancelar cualquier accin del FileChooserController.
496

ndice ndice actual oftotal entradas para cargarse.


ruta ruta actual de FileChooser, slo lectura.
total del nmero total de entradas para cargar.
classkivy.uix.filechooser.FileSystemAbstract Bases: builtins.
Clase de objeto para aplicar una vista de sistema de archivos que se pueden util
izar con theFileChooser.
Nuevo en la versin 1.8.0.
getsize(fn) Devolver el tamao en bytes de un archivo
ES_dir(fn) devuelve true si el argumento pasado a este mtodo es un directorio
es_hidden(fn) devuelve true si el archivo est oculto
listdir(fn) Volver la lista de archivos del directorio fn
classkivy.uix.filechooser.FileSystemLocal Bases: kivy.uix.filechooser.FileSystem
Abstract
ofFileSystemAbstract aplicacin para archivos locales.
Nuevo en la versin 1.8.0.
36,19 Diseo flotante
FloatLayout honores thepos_hint y thesize_hint propiedades de sus hijos.
497

Por ejemplo, con un tamao de FloatLayout (300, 300) se crea:


layout = FloatLayout(size=(300, 300)
De forma predeterminada, todos los widgets tienen su tamao_HINT=(1, 1), por lo qu
e este botn adoptar el mismo tamao como el diseo:
botn = Botn(text= Hola mundo ) layout.add_widget(Button)
para crear un botn a un 50% del ancho y el 25% de la altura de la disposicin y pos
icionado en (20, 20), puede hacer:
botn botn =( text= Hola mundo , tamao_HINT=(.5, .25), pos=(20, 20)
Si desea crear un botn que ser siempre el tamao de diseo menos el 20% de cada lado:
botn = Botn(text= Hola mundo , tamao_HINT=(.6, .6), pos_HINT={ x :.2, y :.2})
Nota: Este diseo puede ser utilizado para una aplicacin. La mayora de las veces, se
utilizar el tamao de la ventana.
Advertencia: Si usted no est utilizando pos_HINT, debe gestionar la colocacin de l
os nios: si el diseo de flotacin est en movimiento, debe encargarse de mover los nios
demasiado.
classkivy.uix.floatlayout.FloatLayout( kwargs) Bases: kivy.uix.layout.Layout
498

clase de diseo de flotacin. Consulte la documentacin del mdulo para obtener ms inform
acin.
36.20 Superficie gesto

nuevo en la versin 1.9.0.


Advertencia: Esto es experimental y sujetos a cambios mientras este aviso est pre
sente.
Seekivy/examples/demo/multistroke/main.py para una aplicacin completa de ejemplo.
classkivy.uix.gesturesurface.GestureSurface( kwargs) Bases: kivy.uix.floatlayout.Fl
oatLayout
simple gesto superficie para controlar/dibujar movimientos tctiles. Normalmente s
e utiliza para recoger la entrada del usuario adecuado.multistroke forkivy.Recog
nizer.
Propiedades_windowTime temporal que esperar desde el ltimo toque_up evento antes
de reconocer el gesto. Si se establece en 0, el on_GESTURE_evento completo no se
dispararon a menos themax_trazos condicin se cumpla.
_ventana es aNumericProperty temporal y predeterminados a 2.0 max_strokesMax nmer
o de trazos de un nico gesto; si ste es alcanzado, recon- nicin comenzar inmediatame
nte en el toque final_up evento. Si se establece en 0, el on_GESTURE_evento comp
leto no se dispararon a menos thetemporal_window caduca.
max_cerebrales es aNumericProperty y predeterminados a 2.0 bbox_cuadro marginBou
nding margen para detectar colisiones de gestos, en pxeles.
bbox_margin es aNumericProperty y predeterminados a 30 draw_timeoutNumber de seg
undos para mantener lneas/bbox sobre lienzo despus del gesto_en_evento complete es
despedido. Si se establece en 0, los gestos son inmediata- ately extrado de la s
uperficie al completo.
draw_timeout es aNumericProperty y predeterminados a 3.0 colorColor utilizada pa
ra dibujar el gesto, en RGB. Esta opcin no tiene ningn efecto ifuse_random_color e
s True.
draw_timeout es aListProperty y predeterminados a [1, 1, 1] (blanco) use_random_
colorSet en True para escoger un color aleatorio para cada gesto, si usted hace
esto entonces el color es ignorado. El valor predeterminado es False.
use_random_color es el valor por defecto es false y aBooleanProperty line_widthL
ine ancho utilizado para el rastreo de toques sobre la superficie. 0 si slo desea
detectar gestos sin dibujar nada. Si utiliza 1.0, OpenGL GL_lnea se utiliza para
dibujar; valores &gt; 1 utilizar un mtodo de dibujo interno basado en tringulos (m
enos eficiente), seekivy.grficos.
line_width es aNumericProperty y predetermina 2 draw_bboxSet a true si desea dib
ujar el cuadro delimitador detrs de los gestos. Esto slo funciona si la lnea_width
&gt;= 1. El valor predeterminado es False.
draw_bbox es aBooleanProperty y su valor predeterminado es True bbox_alphaOpacit
y para cuadro delimitador si draw_bbox es True. Default 0.1 bbox_alpha es aNumer
icProperty y predeterminados a 0,1 eventos

on_499_startGestureContainerFired gestos cuando se inicia un nuevo gesto en la s


uperficie, es decir, la primera en_TOUCH_down que no colisiona con un ex- isting
gesto en la superficie.
En_GESTURE_extendGestureContainerFired cuando un toque_down evento ocurre dentro
de un gesto existente.
on_GESTURE_mergeGestureContainer,GestureContainerFired cuando chocan dos gestos
y se confunden en un gesto. El primer argumento es el gesto que se ha fusionado
(no vlido); la segunda es la combinada (resultante) gesto.
on_GESTURE_completeGestureContainerFired cuando un conjunto de trazos es conside
- ered un gesto completo, esto sucede cuando_ventana temporal caduca o max_trazo
s es alcanzado. Normalmente se enlazar a este evento y utilizar siempre la Gestur
eContainer get_vectores(), mtodo que coincida con su ges- ture database.
on_GESTURE_cleanupGestureContainerFired draw_timeout segundos despus de_GESTURE_c
omplete, el gesto se eliminarn de la lona (si la lnea_width &gt; 0 o draw_bbox es
True) y el gesto interno antes de esta lista.
El_GESTURE_discardGestureContainerFired cuando un gesto no cumple los requisitos

de tamao mnimo de reconocimiento (anchura/altura &lt; 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

active_strokesNumber de trazos activo actualmente en el gesto, ie toques simultne


os asociados con este gesto.
active_cerebrales es aNumericProperty max_strokesMax nmero de carreras permitidas
en el gesto. Este valor es definido por GestureSurface.max_trazos pero puede an
ularse por ejemplo de_GESTURE_start.
max_cerebrales es_mergedIndicates aNumericProperty fue que este gesto se ha fusi
onado con otro gesto y deberan considerarse descartados.
was_combinado es aBooleanProperty bboxDictionary con claves, MINX, MAXX, MINY, M
AXY. Representa el tamao del cuadro delimitador de gestos.
bbox aDictProperty widthRepresents es el ancho del gesto.
width es aNumericProperty alturarepresenta la altura del gesto.
altura es aNumericProperty accept_stroke(count=1) devuelve true si este contened
or puede aceptar contar nuevos trazos
add_stroke(touch, lnea) asociar una lista de puntos con un toque.uid; la lnea en s
es creado por la persona que llama, pero consis- cuente mover/eventos buscarla a
travs de nosotros. Esto se hace para evitar problemas durante la fusin.
complete_stroke() llama el retoque de eventos para realizar un seguimiento de cmo
muchos trazos estn activas en el gesto (slo queremos enviar el suceso cuando el lt
imo trazo en el gesto est liberado)
get_vectores( kwargs) Volver trazos en un formato que es aceptable para kivy.multis
troke.Recognizer como gesto candi- la fecha o la plantilla. El resultado se alma
cena en cach automticamente; la memoria cach est invalidada al inicio y al final de
la carrera, y si se llama a Update_bbox. Si va a analizar un gesto a mitad de ca
rrera, puede ser necesario establecer el argumento no_cache en True.
Maneja(touch) devuelve true si el contenedor maneja el toque
nico_POINTS_test() devuelve true si el gesto slo consta de un nico punto de trazos,
debemos descartar que en este caso, o se producir una excepcin
update_bbox(touch) Actualizacin de gestos de un toque bbox coordinar

501

36,21 diseo de cuadrcula de


nuevo en la versin 1.0.4.
TheGridLayout organiza los nios en una matriz. Se aprovecha el espacio disponible
y la divide en columnas y filas y, a continuacin, aade widgets a la resultante "c
eldas".
Ha cambiado en la versin 1.0.7: La aplicacin ha cambiado para usar el widget size_
hint para calcular los tamaos de columna/fila uniforme._width y height_uniforme h
an sido eliminadas y otras propiedades han aadido para darle ms control.
Antecedentes 36.21.1
a diferencia de muchas otras herramientas, no se puede colocar de forma explcita
un widget en una columna/fila especfica. A cada nio se le asigna automticamente una
posicin determinada por el diseo y la configuracin de ndice del nio en la lista de l
os nios.
Un GridLayout siempre debe tener al menos una restriccin de entrada: cols GridLay
out GridLayout.o.Rows. Si no se especifican las filas o columnas, el diseo genera
r una excepcin.
36.21.2 el ancho de columna y alto de fila
el ancho de columna y alto de fila se determinan en 3 pasos:
El tamao inicial es dado por thecol_default_width androw_default_height propiedad
es. Para personalizar el tamao de una sola columna o fila usecols_MINIMUM_orrows
mnimo.
El tamao_HINT_x/size_HINT_y de los nios son tomados en cuenta. Si no widgets tiene
n un tamao de pista, el tamao mximo se utiliza para todos los nios.
Usted puede forzar el tamao predeterminado estableciendo thecol_force_default_for
ce_fila o propiedad predeterminada. Esto forzar la disposicin a ignorar thewidth y
tamao_hint propiedades de los nios y utilizar el tamao predeterminado.
502

usando un GridLayout 36.21.3


En el ejemplo de abajo, todos los widgets tendrn el mismo tamao. Por defecto, el t
amao_hint es (1, 1), de modo que un widget tendr el tamao completo del padre:
layout = GridLayout(cols=2) layout.add_widget(Botn(text= Hola 1 ) layout.add_widg
et(Botn(text= 1 Mundial) layout.add_widget(Botn(text= Hola 2 ) layout.add_widget(
Botn(text= 2 Mundial)
Ahora, vamos a corregir el tamao de botones Hola a 100px en lugar de usar tamao_HI
NT_x=1:
layout = GridLayout(cols=2) layout.add_widget(Botn(text= Hola 1 , tamao_HINT_x=non
e, width=100) layout.add_widget(Botn(text= 1 Mundial) layout.add_widget(Botn(text
= Hola 2 , tamao_HINT_x=none, width=100) layout.add_widget(Botn(text= 2 ) Mundial)
a
continuacin, vamos a fijar la altura de fila a un tamao especfico:
diseo = GridLayout(cols=2, Fila_force_default=True, row_default_height=40) layout
.add_widget(Botn(text= Hola 1 , tamao_HINT_x=none, width=100) layout.add_widget(Bo
tn(text= 1 ) Mundial)
503

layout.add_widget(Botn(text= Hola 2 , tamao_HINT_x=none, width=100) layout.add_wid


get(Botn(text= 2 mundial)
.gridlayout classkivy.uix.GridLayout( kwargs) Bases: kivy.uix.layout.Diseo de la

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

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 argumento forma [relleno].
Ha cambiado en la versin 1.7.0: sustituido con VariableListProperty NumericProper
ty.
padding es aVariableListProperty y predeterminados a [0, 0, 0, 0].
row_default_height tamao mnimo predeterminado para utilizar para la fila.
Nuevo en la versin 1.0.7. La
fila_default_height es aNumericProperty y predeterminados a 0. La
fila_force_default Si es True, ignorar la altura y tamao_HINT_y del nio y utilizar
el alto de fila predeterminado.
Nuevo en la versin 1.0.7. La
fila_force_default es aBooleanProperty y su valor por defecto es false.
rows Nmero de filas de la cuadrcula.
Ha cambiado en la versin 1.0.8: Cambia de una a un BoundedNumericProperty Numeric
Property.
Ya no puede establecer un valor negativo.
filas es aNumericProperty y predeterminados a 0.
rows_dict mnimo de altura mnima para cada fila. El diccionario claves son los nmero
s de fila, por ej., 0, 1, 2...

Nuevo en la versin 1.0.7.


_rows mnimo es aDictProperty y predeterminados a {}. El
espaciado el espaciado entre los nios: [el espaciado horizontal_spacing_
espaciado vertical]. tambin acepta un argumento de forma [Espacio]. El
espaciado es aVariableListProperty y predeterminados a [0, 0].
exceptionkivy.uix.gridlayout.GridLayoutException Bases: EXCEPTION
excepcin de errores si la manipulacin falla de diseo de cuadrcula.
36.22 Imagen
Imagen widget se utiliza para mostrar una imagen:
wimg = Image(source= mylogo.png")
36.22.1 carga asincrnica
para cargar una imagen de forma asncrona (por ejemplo desde un servidor externo),
utilice theAsyncImage subclase:
505

(fuente AsyncImage aimg == Http://mywebsite.com/logo.png )


esto puede ser til, ya que evita que la aplicacin espere hasta que la imagen se ha
cargado. Si desea mostrar imgenes de gran tamao o recuperarlos a partir de las UR
L, usingAsyncImage permitir que estos recursos se recupera en un subproceso en se
gundo plano sin que se bloquee la aplicacin.
36.22.2 Alineacin
Por defecto, la imagen est centrada y widget encaja dentro del cuadro delimitador
. Si usted no quiere, puede establecer allow_stretch en True y mantener_ratio en
False.
Tambin puede heredar de imagen y crear tu propio estilo. Por ejemplo, si desea qu
e su imagen sea mayor que el tamao de su widget, usted podra hacer:
clase FullImage(Imagen):
pase
y en su archivo de idioma kivy:
&lt;-FullImage&gt;:
canvas:
COLOR:
rgb: (1, 1, 1) rectngulo:
textura: Textura self.Tamao: self.ancho + 20, self.altura + 20 pos: self.x - 10,
auto.y - 10
classkivy.uix.image.Image( kwargs) Bases: kivy.uix.widget.Widget
clase de imagen, consulte la documentacin del mdulo para obtener ms informacin.
allow_estirar si es true, el normalizado se maximiza el tamao de la imagen para q
ue quepa en el cuadro de imagen. De lo contrario, si la caja es demasiado alto,
la imagen no se estirarn ms de 1:1 pxeles.
Nuevo en la versin 1.0.7.
allow_STRETCH se aBooleanProperty y su valor por defecto es false.
anim_DELAY Delay de la animacin si la imagen es secuenciado (como un gif animado)
. Si anim_delay est establecida en -1, la animacin se detendr.
Nuevo en la versin 1.0.8.
anim_delay es aNumericProperty y predeterminados a 0,25 (4 FPS).
anim_loop Nmero de bucles para jugar y, a continuacin, detener la animacin. 0 signi
fica mantener la animacin.
Nuevo en la versin 1.9.0.
anim_loop es aNumericProperty y predeterminados a 0.
Imagen en color, en el formato de color (r, g, b, a). Este atributo puede utiliz
arse para "tinte" una imagen. Tenga cuidado:
si la imagen de origen no es gris/blanco, el color no es realmente funcionan com
o se espera.
Nuevo en la versin 1.0.6.
506

color es aListProperty y predeterminados a [1, 1, 1, 1].


image_RATIO Relacin de la imagen (ancho / float(altura).
image_ratio es anAliasProperty y es de slo lectura.
Keep_datos Si es True, el _coreimage underlaying almacenar los datos crudos de la
imagen. Esto es til cuando se realiza una deteccin de colisin basado en pxeles.
Nuevo en la versin 1.3.0.
Keep_datos es aBooleanProperty y su valor por defecto es false.
Keep_ratio si es falso, junto con permitir_stretch siendo True, el normalizado s
e maximiza el tamao de la imagen para que quepa en el cuadro de imagen e ignora l
a relacin de aspecto de la imagen. De lo contrario, si la caja es demasiado alto,
la imagen no se estirarn ms de 1:1 pxeles.
Nuevo en la versin 1.0.8.
Keep_ratio es aBooleanProperty y su valor predeterminado es True.
Indique si desea mipmap mipmapping OpenGL para aplicarse a la textura. Leer Mipm
apping para ms informacin.
Nuevo en la versin 1.0.7.
Se aBooleanProperty mipmap y su valor por defecto es false.
nocache Si esta propiedad es True, la imagen no se agregar a la cach interna. La c
ach simplemente ignorar cualquier llamada intentando anexar la imagen principal.
Nuevo en la versin 1.6.0.
nocache es aBooleanProperty y su valor por defecto es false.
norm_image_size Tamao de imagen normalizada dentro del cuadro del widget.
Este tamao se ajustar siempre el tamao del widget y mantendr la relacin de imagen.
norm_image_size es anAliasProperty y es de slo lectura.
reload() recargar imagen desde el disco. Esto facilita la re-carga de imgenes des
de el disco en caso de que la imagen cambia el contenido.
Nuevo en la versin 1.3.0.
Uso:
IM = Imagen(source = 1.jpg ) # -- hacer algo -- im.reload() # imagen ser re-carg
ado desde el disco
fuente Filename / fuente de la imagen.
Fuente es aStringProperty y predeterminados a Ninguno.
507

objetos de textura de la imagen. La textura representa el original, la imagen ca


rgada de textura.
Es streched y colocada durante la representacin segn la propiedad allow_stretch y
mantener_ratio propiedades.
Dependiendo de la textura de la creacin, el valor ser aTexture o aTextureRegion ob
jeto. La
textura es anObjectProperty y predeterminados a Ninguno.
textura_size tamao de la textura de la imagen. Esto representa el original, el ta
mao de la textura de la imagen cargada.
Advertencia: El tamao de la textura se establece despus de la textura de la propie
dad. Por lo tanto, si usted escucha a los cambios en la textura, la propiedad te
xtura_size no sern actualizados. Use auto.texture.Tamao en lugar.
classkivy.uix.image.AsyncImage( kwargs) Bases: kivy.uix.image.Imagen
clase asincrnica de la imagen. Consulte la documentacin del mdulo para obtener ms in
formacin.
Nota: El AsyncImage es una forma especializada de la clase Image. Si lo desea, p
uede consultar la documentacin del cargador y, en particular, el ProxyImage para
ms detalles sobre cmo manejar los eventos alrededor de carga asincrnica de la image
n.
36,23 etiqueta

TheLabel widget es para el procesamiento de texto. Soporta cadenas ASCII y Unico


de:
# hola mundo texto l = etiqueta(text= Hola mundo )
# texto Unicode; slo puede mostrar glifos que estn disponibles en la fuente l = et
iqueta(text=u Hola mundo + unichr(2764))
# l = etiqueta de texto multilnea(text= Multi )
#\nlnea talla l = etiqueta(text= Hola mundo , font_size= 20sp )
508

36.23.1 el dimensionamiento y el contenido del texto


por defecto, el tamao de la etiqueta no es afectado por el contenido de texto y e
l texto no se ve afectado por el tamao.
A fin de controlar el dimensionamiento, debe especificar el texto_size para rest
ringir el texto y/o enlazar a la textura tamao_size a crecer con el texto.
Por ejemplo, el tamao de la etiqueta se establece en el texto contenido (pluspadd
ing):
Etiqueta:
Tamao: self.textura_size
Este el texto de la etiqueta se ajustar al ancho especificado y se recortar a la a
ltura:
Etiqueta:
text_size: cm(6),(4) cm
Nota: Theshorten andmax_lneas control de atributos de texto desbordante cmo se com
porta.
Combinar estos conceptos para crear una etiqueta que puede crecer verticalmente
pero ajusta el texto a una determinada anchura:
Etiqueta:
text_size: root.width, ninguno tamao: self.textura_size
36.23.2 y el ajuste de alineacin de texto
TheLabel hashalign andvalign propiedades para controlar la alineacin del texto. S
in embargo, de forma predeterminada el texto imagen (textura) es apenas lo sufic
ientemente grande para contener los caracteres y se posiciona en el centro de la
etiqueta. La propiedad valign no tendr ningn efecto y halign slo tendr efecto si su
texto tiene lneas; una sola lnea de texto aparecer centrada aunque halign est ajust
ado a la izquierda (por defecto).
Para que las propiedades de alineacin para surtir efecto, establezca Text_size, q
ue especifica el tamao del cuadro delimitador, dentro del cual se alinea el texto
. Por ejemplo, el siguiente cdigo enlaza este tamao para el tamao de la etiqueta, p
or lo que el texto se alinear en el widget de lmites. Esto tambin ajusta automticame
nte el texto de la etiqueta para permanecer dentro de esta zona.
Etiqueta:
text_size: self.tamao halign: "derecho" valign: central
36.23.3 Markup texto
nuevo en la versin 1.1.0.
Puede cambiar el estilo del texto con formato de texto. La sintaxis es similar a
la sintaxis de bbcode pero slo est permitido un estilo en lnea:
# Hola mundo con mundo en negrita l = etiqueta(text= Hola Mundo [b][/b] , la mar
ca=True)
# hola mundo en rojo, en azul
509

l = etiqueta(text= [color=ff3333]Hola[/COLOR][color=3333ff]Mundo[/COLOR] , marca


do = True)
si usted necesita para escapar de las revisiones del texto actual, usekivy.utils

.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 &amp;, necesita esca
par de ellos. Hemos creado una sencilla sintaxis:
[-&gt; &amp;bl; ] -&gt; &amp;br; &amp; -&gt; &amp;;
entonces usted puede escribir:
"[size=24]Hola &amp;bl;Mundo&amp;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

ta la inversin del sentido de la marcha, como valores de y comenzar en la parte s


uperior de # la textura y aumentar hacia abajo la etiqueta de devolucin.center_y
+ etiqueta.textura[1] Tamao_
def_mostrar marcas(self, etiqueta):
# indican la posicin de los anclajes con un marcador superior rojo Nombre, el ANC
en la etiqueta.anchors.items():
con la etiqueta.Canvas:
Color(1, 0, 0) rectngulo(pos=(self.get_x(etiqueta, el ANC[0]), self.get_y(etiquet
a, el ANC[1]), size=(3, 3))
# Dibujar una envolvente verde alrededor de los rbitros. Nota El nombre de invers
in y tamaos de cajas, en la etiqueta.refs.items():
para caja en cajas:
con etiqueta.Canvas:
Color(0, 1, 0, 0,25) rectngulo(pos=(self.get_x(etiqueta, caja[0]), self.get_y(eti
queta, caja[1]),
511

size=(cuadro de verificacin[2]-[0], la casilla de verificacin[1] -[3]))


def construir(self):
etiqueta label =( text= [a]un ancla=\nChars [anchor=b]b\n[ref=myref]ref[/ref] ,
la marca=True) Clock.Schedule_once(lambda dt: self.show_marcas(etiqueta), 1) la
etiqueta de devolucin
TestApp().run()
classkivy.uix.label.Label( kwargs) Bases: kivy.uix.widget.Widget
clase Label, consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_REF_pressFired cuando el usuario hace clic en una palabra con referen
cia a[ref] etiqueta en un texto marcado.
Anclajes nuevos en la versin 1.1.0.
Posicin de todos los[anchor=xxx] marcado en el texto. Estas coordenadas son relat
ivas a la esquina superior izquierda del texto, con el valor y creciente hacia a
bajo. Los nombres de los anclajes deben ser nicos y slo la primera aparicin de cual
quier anclajes duplicados sern registradas.
Puede colocar los anclajes en su texto de marcado de la siguiente manera:
texto = """ [anchor=title1][size=24]Este es mi gran ttulo.[/size] [anchor=content
]Hola mundo """
a continuacin, todos los[anchor=] referencias sern retirados y obtendr todas las po
siciones de anclaje en esta propiedad (slo despus de la representacin):
&gt;&gt;&gt; widget = etiqueta(text=texto, markup=True) &gt;&gt;&gt; widget.text
ura_update() &gt;&gt;&gt; widget.anchors {"contenido": (20, 32), "title1": (20,
16)}
Nota: Esto slo funciona con texto de marcado. Usted needmarkup establecida en Tru
e.
negrita indica el uso de la versin en negrita de la fuente.
Nota: Dependiendo de su fuente, el atributo negrita puede no tener ningn impacto
en el procesamiento de texto- ing.
Bold es aBooleanProperty y su valor por defecto es False. El
color de texto, en el formato de color (r, g, b, a). El
color es aListProperty y predeterminados a [1, 1, 1, 1].
512

disabled_color El color del texto cuando el widget est desactivada, en la (r, g,


b, a) formato.
Nuevo en la versin 1.8.0.
disabled_color es aListProperty y predeterminados a [1, 1, 1, .3].

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

font_size tamao de fuente del texto en pxeles.


font_size es aNumericProperty y predeterminados a 15sp.
halign la alineacin horizontal del texto.
es un OptionProperty halign y predeterminados a izquierda . Las opciones dispon
ibles son: izquierda, centro, derecha y Justificar.
Advertencia: Esto no cambia la posicin del texto de la etiqueta de textura (centr
ado), slo la posicin del texto en la textura. Probablemente desee enlazar el tamao
de la etiqueta para thetexture_size o establecer atext_size.
Ha cambiado en la versin 1.6.0: Se ha aadido una opcin nueva tohalign, a saber just
ificar.
Cursiva cursiva indica el uso de la versin de la fuente.
Nota: Dependiendo de su fuente, el atributo cursiva pueden no tener ningn impacto
en el procesamiento de texto- ing.
Cursiva aBooleanProperty y su valor por defecto es false.
line_height el alto de lnea del texto. Por ejemplo, lnea_height = 2 causar que el e
spaciado entre lneas que se doble el tamao.
line_height es aNumericProperty y predeterminados a 1.0.
Nuevo en la versin 1.5.0.
revisiones nuevas en la versin 1.1.0.
Si es True, el texto se mostrar con theMarkupLabel: puede cambiar el estilo del t
exto con etiquetas. Compruebe la documentacin de marcado de texto para obtener ms
informacin. La
marca es aBooleanProperty y su valor por defecto es false.
max_lneas nmero mximo de lneas que se van a utilizar, por defecto es 0, lo que signi
fica ilimitado. Por favor nota que acortan tomar sobre esta propiedad. (con acor
tar, el texto es siempre una lnea.)
nuevo en la versin 1.8.0.

max_lines es aNumericProperty y por defecto es 0.


Indica si OpenGL mipmap mipmapping se aplica a la
para ms informacin.
Nuevo en la versin 1.0.7.
Se aBooleanProperty mipmap y su valor por defecto
outline_color El color del contorno del texto, en
Nota: Esta caracterstica requiere SDL2 proveedor
514

textura o no. Leer Mipmapping


es false.
la (r, g, b) el formato.
de texto.

Nuevo en la versin 1.9.2.


outline_color es aListProperty y predeterminados a [0, 0, 0].
outline_Ancho el ancho en pxeles para el contorno alrededor del texto. Sin contor
no ser procesada si el valor es Ninguno.
Nota: Esta caracterstica requiere SDL2 proveedor de texto.
Nuevo en la versin 1.9.2.
_width es aNumericProperty esquema y predeterminados a Ninguno. El
relleno el relleno del texto en el formato (padding_x_y) de relleno, el
relleno es de aReferenceListProperty (padding_x,y)_padding propiedades.
x_padding padding horizontal del texto dentro del cuadro de widget
_x es aNumericProperty relleno y por defecto es 0.
Ha cambiado en la versin 1.9.0: relleno_x ha sido arreglado para funcionar como s
e espera. En el pasado, el texto fue acolchada por la negativa de sus valores. E
l
relleno_y relleno vertical del texto dentro del cuadro de widget
_y es aNumericProperty relleno y por defecto es 0.
Ha cambiado en la versin 1.9.0: relleno_y ha sido arreglado para funcionar como s
e espera. En el pasado, el texto fue acolchada por la negativa de sus valores.
refs nuevo en la versin 1.1.0.
Lista de [ref=xxx] los elementos de marcado en el texto con el cuadro delimitado
r de todas las palabras contenidas en un ref, disponible slo despus de la represen
tacin.
Por ejemplo, si escribi:
Echa un vistazo a mi [ref=hola]enlace[/ref]
Los rbitros se establecer con:
{ hello : ((64, 0, 78, 16), )}
las referencias marcadas con "hello" tiene un cuadro delimitador en (x1, y1, x2,
y2). Estas coordenadas son relativas a la esquina superior izquierda del texto,
con el valor y creciente hacia abajo. Puede definir varios rbitros con el mismo
nombre: Cada ocurrencia se agregarn como otro (x1, y1, x2, y2) tupla a esta lista
.
La etiqueta actual implementacin utiliza estas referencias si stas existen en el m
arcado de texto automticamente, haciendo de la colisin con el tacto y el envo de un
sobre_REF_evento de prensa.
Puede enlazar un evento como este ref:
def print_(ejemplo, valor):
print( user , haga clic en valor) widget = etiqueta(text= Hola [ref=mundo]Mundo[
/ref] , la marca=True) widget.en_REF_press(print_it)
515

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.

Acorte_from_str andsplit controlan la direccin desde la cual thetext est dividida,


as como el lugar en que estamos autorizados a thetext split.
acortar es aBooleanProperty y su valor por defecto es false.
Acorte_desde el lado desde el que se debe acortar el texto puede ser izquierda,
derecha o centro.
Por ejemplo, si la izquierda, aparecer el botn hacia la izquierda y nos mostrar com
o mucho texto empezando desde la derecha como sea posible. Toshorten similar, es
ta opcin slo se aplica al text_size [0] no es ninguno, en este caso, la cadena se
ha acortado para caber dentro de la anchura especificada.
Nuevo en la versin 1.9.0.
Acorte_from es aOptionProperty y predeterminados a centro.
split_str la cadena utilizada para dividir, mientras que el acortamiento de la c
adena thetext whenshorten es True.
Por ejemplo, si se trata de un espacio, la cadena se romper en palabras y tantas
palabras completas que pueden caber en una sola lnea se mostrar. Ifshorten_from es
la cadena vaca, , nos separamos en cada racor de carcter tanto texto como sea p
osible en la lnea.
Nuevo en la versin 1.9.0.
split_str es aStringProperty y predeterminados a
(la cadena vaca). El
tachado se agrega una lnea de tachado en el texto.
Nota: Esta caracterstica requiere SDL2 proveedor de texto.
Nuevo en la versin 1.9.2.
Se aBooleanProperty tachado y el valor predeterminado es False.
Si tira los espacios iniciales y finales y saltos de lnea debera ser despojado de
cada lnea que aparece. Si el valor es True, cada lnea comenzar en el borde derecho
o izquierdo, dependiendo onhalign. Es Ifhalign justificar es implcitamente cierto
.
Nuevo en la versin 1.9.0.
tira es aBooleanProperty y su valor por defecto es false.
Texto de la etiqueta.
Creacin de un simple hola mundo:
widget = etiqueta(text= Hola mundo )
si desea crear el widget con una cadena unicode, utilizar el

widget: 516 = etiqueta(text=u My cadena unicode") el


texto se aStringProperty y predeterminados a .
text_size por defecto, la etiqueta no est limitado a ningn cuadro delimitador. Pue
de definir el tamao de la etiqueta de restriccin con esta propiedad. El texto se a
juste automtico en las limitaciones. As, aunque el tamao de la fuente no se reducir,
el texto ser organizada para encajar en el cuadro de la mejor manera posible, co
n cualquier texto todava fuera de la caja recortada.
Esto establece y clipstexture_size a text_size si no ninguno.
Nuevo en la versin 1.0.4.
Por ejemplo, cualquiera que sea su actual tamao del widget es, si desea que la et
iqueta se cre en una caja con width=200 y altura ilimitada:
Etiqueta(text= muy grande y de lnea", text_size=(200, Ninguno))
Nota: Esta propiedad text_size es el mismo como propiedad theusersize theLabel e
n clase. (Se denomina tamao= en el constructor.)
TEXT_size es aListProperty y defaults (Ninguno, Ninguno), con lo que ninguna res
triccin de tamao por defecto.
Textura objeto del texto. El texto se presenta automticamente cuando una propieda
d cambia.
El OpenGL textura creada en esta operacin se almacena en esta propiedad. Puede ut
ilizar esta textura para cualquier elementos grficos.
En funcin de la textura de la creacin, el valor ser aTexture orTextureRegion objeto
.

Advertencia: La textura update est prevista para el siguiente fotograma. Si usted


necesita el tex- tura inmediatamente despus de un cambio de propiedad, usted tie
ne que llamar thetexture_update() mtodo antes accessingtexture:
l = etiqueta(text= Hola mundo ) # l.textura es buena l.font_size = 50sp # l.te
xtura no est actualizado todava l.textura_update() # l.textura es buena ahora. La
textura es anObjectProperty y predeterminados a Ninguno.
textura_size tamao de la textura del texto. El tamao se determina por el tamao de l
a fuente y el texto. Iftext_size es [Ninguno, Ninguno], la textura ser el tamao ne
cesario para que quepa el texto y, en caso contrario, se recortan para que quepa
n text_size.
Whentext_size es [Ninguno, Ninguno], uno puede enlazar con textura_size y ajusta
r su escala proporcin- aliado para adaptar el tamao de la etiqueta, a fin de ajust
ar el texto al mximo en la etiqueta.
Advertencia: La textura_size se establece despus de la textura de la propiedad. S
i escuchar los cambios en la textura, textura_size no estarn actualizados en la d
evolucin de llamada. A Bind_size en vez de textura.
517 La

textura_update( largs) fuerza la textura recreacin con la etiqueta actual Propiedad


es.
Despus de esta llamada de funcin, thetexture andtexture_size se actualizar en este
orden.
subrayado agrega un subrayado al texto.
Nota: Esta caracterstica requiere SDL2 proveedor de texto.
Nuevo en la versin 1.9.2. El
subrayado aBooleanProperty y su valor por defecto es false.
unicode_errors cmo manejar los errores de decodificacin de unicode. Puede ser str
ict , replace o Omitir .
Nuevo en la versin 1.9.0.
unicode_errors est anOptionProperty y predeterminados a replace .
valign alineacin vertical del texto.
valign es anOptionProperty y predeterminados a inferior . Las opciones disponib
les son : inferior , central (o Centro ) y top .
Ha cambiado en la versin 1.9.2: "El centro" se ha aadido la opcin como un alias de
central .
Advertencia: Esto no cambia la posicin del texto de la etiqueta de textura (centr
ado), slo la posicin del texto dentro de la textura. Probablemente desee enlazar e
l tamao de la etiqueta para thetexture_size o establecer atext_size para cambiar
este comportamiento.
36,24 Presentacin de
diseos se utilizan para calcular y asignar posiciones de widget.
TheLayout clase en s no puede ser utilizado directamente. Debe utilizar uno de lo
s siguientes tipos:
Diseo: diseo de anclaje.anchorlayout kivy.uix.AnchorLayout
Diseo de cuadro: kivy.uix.boxlayout.BoxLayout Diseo de flotacin: kivy.uix.floatlayo
ut.FloatLayout diseo de cuadrcula: kivy.uix.GridLayout gridlayout. Diseo de pgina: ki
vy.uix.pagelayout.PageLayout diseo relativa: kivy.uix.relativelayout.RelativeLayo
ut Diseo de dispersin: kivy.uix.scatterlayout.ScatterLayout Diseo de pila: kivy.uix
.stacklayout.
36.24.1 StackLayout comprender el tamao_HINT Propiedad en widget
_HINT Thesize es una tupla de valores utilizados por diseos para gestionar el tam
ao de sus hijos. Indica el tamao en relacin con el tamao del diseo en lugar de un tam
ao absoluto (en pxeles o puntos/cm/etc). El formato es:
518

widget.size_HINT = (anchura, altura_PERCENT_por ciento)


El porcentaje se especifica como un nmero de punto flotante en el rango de 0-1. P
or ejemplo, 0.5 es de 50%, 1 es 100%.
Si quieres un ancho del widget para que sea la mitad de los padres del ancho y l
a altura que sea idntica a la altura del padre, lo hara:
widget.tamao_HINT = (0.5, 1.0)
si no desea utilizar un tamao_hint para la anchura o la altura, establezca el val
or a Ninguno. Por ejemplo, para hacer un widget que es 250px de ancho y 30% de l
a altura del padre, :
widget.tamao_HINT = (Ninguno, 0.3) widget.width = 250
BeingKivy propiedades, estos tambin se puede configurar a travs de los argumentos
del constructor:
widget widget =(size_HINT=(Ninguno, 0,3), width=250)
ha cambiado en la versin 1.4.1: la reposicin_child mtodo interno (hecha pblica por e
rror) se ha re- movido.
classkivy.uix.layout.layout( kwargs) Bases: kivy.uix.widget.Widget
Layout clase de interfaz utilizado para implementar cada diseo. Consulte la docum
entacin del mdulo para obtener ms informacin.
do_layout( largs) Esta funcin se llama cuando un diseo es necesaria por un desencade
nador. Si est escribiendo una nueva subclase de diseo, no se llama a esta funcin di
rectamente, pero use_trigger_layout() en su lugar. ..:: - Se ha aadido la versin 1
.0.8
36.25 Ver lista de
nuevo en la versin 1.5.
Nota: ListView est planeado para ser desestimado onceRecycleView se vuelve establ
e.
Advertencia: Este cdigo es todava experimental y su API est sujeta a cambios en ver
siones futuras.
El ListView implementa un AbstractView como vertical,pannable lista desplazable,
encajado en el cuadro delimitador del scrollview contiene el elemento de la lis
ta y ver las instancias.
La AbstractView tiene una propiedad: el adaptador. El adaptador puede ser uno de
los siguientes: una, un ListAdapter SimpleListAdapter o DictAdapter. El adaptad
or puede hacer uso de args_convertidores para preparar los datos para pasar al c
onstructor para cada elemento ver instan- tiation.
Para obtener una visin general de cmo encajan todos estos componentes, consulte mdu
lo theadapters documen- tacin.
519

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

de kivy.uix.boxlayout BoxLayout importacin de kivy.lang importar Builder de kivy.


base importar runTouchApp
Builder.load_string(""" <MyListView>:
: ListView
item_strings: [str(index) para el ndice en Range(100)] """)
clase MyListView(BoxLayout):
pass
si __name__ == "__main__ :
runTouchApp(MyListView())
36.25.3 usando un adaptador de
detrs de las escenas, el ejemplo anterior utiliza theSimpleListAdapter bsica. Cuan
do el constructor para el control Listview que slo ve una lista de cadenas se da
como argumento (denominado item_strings), crea aSimpleListAdapter utilizando la
lista de cadenas.
"Simple" en SimpleListAdapter significa sin apoyo de seleccin. Es una lista despl
azable de elementos que no responden a eventos tctiles.
Utilizar aSimpleListAdaper explcitamente al crear una instancia de ListView, hace
r:
Simple_list_adapter = SimpleListAdapter( datos=["Item #{0}".Format(i) for i in r
ange(100)], Cls=Label)
lista_view =(adaptador ListView=simple_list_adapter)
la instancia ofSimpleListAdapter tiene un argumento de datos necesarios que cont
iene elementos de datos utilizar para instantiatingLabel vistas para la vista de
lista (nota el Cls=argumento label). Los elementos de datos son cadenas.
Cada elemento est definido por theSimpleListAdapter cadena como argumento de text
o para cada etiqueta instanciacin.
Puede declarar un ListView con un adaptador en un archivo kv con especial atencin
a la forma en que python ya los bloques son: sangra
de kivy.uix.boxlayout BoxLayout importacin de kivy.base de importacin de kivy runT
ouchApp.lang importar Builder
# Tenga en cuenta la naturaleza especial de la indentacin en el adaptador de decl
aracin, donde # el adaptador: est en una lnea, el valor debe ser dado a un # Nivel
de sangra.
Builder.load_string(""" #:etiqueta de importacin kivy.uix.label #:importar SLA ki

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

Consulte theadapters documentacin para ms detalles.


ADictAdapter tiene los mismos argumentos y requisitos como aListAdapter excepto
por dos cosas:
1. Hay un argumento adicional, ordenados_keys, que deben cumplir con los requisi
tos normales de python las claves de diccionario.
2. El argumento datos, como era de esperar, un dict. Claves en la dict debe incl
uir las claves en la SORTED_argumento keys, pero pueden formar un superconjunto
de las teclas ordenadas_keys. Los valores pueden ser cadenas, las instancias de

clase, dicts, etc. (el parmetro args_converter utiliza en consecuencia).


36.25.5 utilizando un convertidor Args
AListView permite el uso de elemento de lista integrada asListItemButton vistas,
por ejemplo, tu propio tema personalizado ver clase o una plantilla personaliza
da de kv. Cualquiera que sea el tipo de elemento de lista Vista se utiliza una f
uncin del convertidor_args es necesaria para preparar, por cada elemento de datos
, lista para el cls kwargs o ctx para la plantilla.
Nota: Slo los ListItemLabel, ListItemButton o clases personalizadas como ellos (y
no la simple etiqueta Botn o clases) se van a utilizar en el sistema de listview
.
Advertencia: ListItemButton hereda el fondo y fondo_NORMAL_down propiedades desd
e el widget de botn, por lo que selecciona y deselecciona_color_color no son repr
esentadas fielmente por defecto.
Aqu es un convertidor_args para utilizar con el built-in ListItemButton especific
ado como una funcin normal de Python:
def_args convertidor(row_index, un_obj):
volver { text : un_obj.text, tamao_HINT_y : Ninguno, la altura : 25}
y como una expresin lambda:
523

_args convertidor = lambda row_index, un_obj: { text : un_obj.text, tamao_HINT_y


: Ninguno, la altura : 25}
en el convertidor args ejemplo anterior, el elemento de datos se supone que es u
na instancia de la clase (objeto), de ah la referencia un_obj.text.
Aqu est un ejemplo de un convertidor args que trabaja con los datos de la lista de
elementos que se dicts:
args_Convertidor = fila lambda_index, obj: { texto : obj[ text ], tamao_y_HINT :
Ninguno, la altura : 25}
As, es responsabilidad del desarrollador el convertidor de cdigo_args segn los dato
s en la mano. El argumento index_fila pueden ser tiles en algunos casos, como cua
ndo las etiquetas personalizadas son necesarios.
Un ejemplo 36.25.6 controles ListView
, para algunos el cdigo de ejemplo:
de kivy.adaptadores.listadapter ListAdapter importacin de kivy.uix.listview impor
tar ListItemButton, ListView
datos = [{ texto : Str(i), es_selected : False} for i in range(100)]
args_Convertidor = fila lambda_index, rec: { texto : rec[ text ], tamao_y_HINT :
Ninguno, la altura : 25}
lista_adapter = ListAdapter(data=datos, args_converter=args_converter, Cls=ListI
temButton, seleccin_mode= single , allow_empty_selection=false)
lista_view =(adaptador ListView=lista_adapter)
Este control listview mostrar 100 botones con texto de 0 a 100. El parmetro args_
funcin del convertidor convierte los elementos dict en los datos y crea vistas Li
stItemButton pasando estas los elementos convertidos en el constructor. El listv
iew slo permitir seleccin nica y el primer tema ser ya seleccio- nados como allow_emp
ty_seleccin es falso. Para una explicacin completa de estos argumentos, consulte t
heListAdapter documentacin.
TheListItemLabel funciona de la misma forma como theListItemButton.
36.25.7 utilizando un elemento personalizado ver
la clase de datos que se utilizan en un adaptador puede ser cualquiera de los ti
pos de Python normal o clases personalizadas, como se muestra a continuacin.
Es hasta el programador para garantizar que los args_convertidor realiza las con
versiones apropiadas.
Aqu haremos una simple clase DataItem que tiene el texto necesario y es_propiedad
es seleccionadas:
de kivy.uix.listview ListItemButton importacin de kivy.adaptadores.listadapter im
portar ListAdapter

DataItem clase(object):
524

def __init__(self, text= , se_selected=false):


Auto.Text = texto self.es_ES_seleccionada =
datos seleccionados_items = [DataItem(text= cat ), DataItem(text= dog ),(DataIte
m text= rana )]
lista_item_args_Convertidor = fila lambda_index, obj: { texto : obj.text, tamao_
HINT_y : Ninguno, la altura : 25}
lista_adapter = ListAdapter(data=data_items, args_converter=list_item_args_conve
rter, propagar_selection_para_data=True, Cls=ListItemButton)
lista_view =(adaptador ListView=lista_adapter)
Los datos se pasan a theListAdapter junto con una funcin del convertidor_args. La
propagacin significa que el es_propiedad seleccionada para cada elemento de dato
s se establece y mantiene sincronizada con el elemento de la lista Vistas. Este
ajuste debe ser true si desea inicializar la vista con el tema opiniones ya sele
ccionado.
Tambin puede utilizar el providedSelectableDataItem mixin para hacer una clase pe
rsonalizada. En lugar de la "manualmente" construidos encima de la clase DataIte
m, podramos hacer:
desde kivy.adaptadores.importar modelos SelectableDataItem
clase(DataItem SelectableDataItem):
# Aadir propiedades aqu.
pasar
SelectableDataItem es una simple clase que tenga un mixin es_propiedad seleccion
ada.
36.25.8 Uso de un elemento de la plantilla de vista
simple mixin SelectableView es otra clase que tiene propiedades requeridas para
un elemento de lista: texto y es_selected. Para hacer su propia plantilla, mezcl
a de la siguiente manera:
desde kivy.lang importar Builder
Builder.load_string(""" [CustomListItem@SelectableView+BoxLayout]:
size_HINT: ctx_y_hint.size_y altura: ctx.height ListItemButton:
texto: ctx_es.texto seleccionado: ctx.is_seleccionado """)
una clase denominada CustomListItem puede entonces ser instanciados para cada el
emento de la lista. Nota que las subclases un BoxLayout y es por lo tanto un tip
o oflayout. Contiene aListItemButton instancia.
Utilizando el poder del lenguaje Kivy (kv), puede crear fcilmente los elementos d
e lista: compuesto adems de ListItemButton, usted podra tener un ListItemLabel o u
na clase personalizada que ha definido y registrado a travs de theFactory.

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

teriormente en el constructor.load_string() llamada kv se configura como la plan


tilla para el elemento de lista opiniones. La lista_item_args_converter funcin la
mbda tomar cada dict en enteros_dict y devolver un dict args, listo para pasar por
el contexto (ctx) para la plantilla.
36.25.9 utilizando
el classCompositeListItem CompositeListItem es otra opcin para la construccin de c
ompuestos avanzados elementos de lista. El kv enfoque del lenguaje tiene sus ven
tajas, pero aqu podemos construir una lista compuesta vista utilizando una llanur
a Python:
args_Convertidor = fila lambda_index, rec: \ { texto : rec[ text ], tamao_y_HINT
: Ninguno, la altura : 25, cls_dicts : [{ cls: ListItemButton , kwargs : { t
exto : rec[ texto ]}}, { cls: ListItemLabel , kwargs : { texto : "Oriente-{0}".
Format(rec[ texto ]), es_REPRESENTING_Cls : True}}, { cls: ListItemButton , kw
args : { texto : rec[ texto ]}}]}
elemento_strings = ["{0}".Format(index) para el ndice en Range(100)]
enteros_dict = \ {str(i): { texto : Str(i), es_selected : False} for i in range
(100)}
dict_adapter = DictAdapter(SORTED_KEYS=item_data=cadenas, enteros, args_dict_con
verter=args_converter, selection_mode= single , allow_empty_selection=False, Cls
=CompositeListItem)
lista_view =(adaptador ListView=dict_Adapter
_args) el convertidor es un poco complicado, as que debemos ir a travs de los deta
lles. Observar en la instanciacin DictAdapter thatCompositeListItem instancia est
establecido como el cls para ser instanciados para cada elemento de la lista. El
parmetro args_converter har args dicts para este cls. En el convertidor_args,
526

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

el segundo controla los elementos que aparecen en el tercero. Si allow_empty_Se


leccin se establece en False para estos listviews, un sistema dinmico de seleccin "
en cascada" de una lista a la siguiente, tendra como resultado.
Hay muchas maneras en que los enlaces de Kivy listviews y funcionalidad puede se
r utilizada, que slo hemos araado la superficie aqu. Para ejemplos en disco, consul
te:
kivy/examples/widgets/lists/list_ .py
varios ejemplos muestran la "cascada" el comportamiento descrito anteriormente.
Otros demuestran el uso de plantillas de kv y vistas de lista compuesta.
classkivy.uix.listview.SelectableView( kwargs) Bases: builtins.object TheSelectable
View mixin se usa con los elementos de la lista y otras clases que van a ser ins
tanciados en una vista de lista o de otras clases que utilizan una seleccin habil
itada como adaptador ListAdapter. select() y deseleccione() puede anularse con m
ostrar cdigo para marcar los elementos como seleccionada o no, si lo desea.
Desmarque( args) el elemento de la lista es el responsable de actualizar la pantal
la cuando est desactivada, si lo desea.
select(*args) el elemento de la lista es el responsable de actualizar la pantall
a cuando est seleccionado, si lo desea.
classkivy.uix.listview.ListItemButton( kwargs) Bases:kivy.uix.listview.ListItemRepr
Mixin,kivy.uix.selectableview.SelectableView, kivy.uix.button.Button
SelectableView ListItemButton mezclas con botn para producir un botn adecuado para
uso inListView.
527

deseleccionado_color_color es aListProperty deseleccionados y predeterminados a


[0., 1., 0., 1].
selected_color_color seleccionado es aListProperty y predeterminados a [1, 0, 0,
1].
classkivy.uix.listview.ListItemLabel( kwargs) Bases:kivy.uix.listview.ListItemReprM
ixin,kivy.uix.selectableview.SelectableView, kivy.uix.label.Label
ListItemLabel SelectableView mezclas con etiqueta para producir una etiqueta ade
cuada para uso en ListView.
Bases classkivy.uix.listview.CompositeListItem( kwargs):kivy.uix.selectableview.Sel
ectableView,kivy.uix.boxlayout BoxLayout
CompositeListItem SelectableView.mezclas con BoxLayout para un contenedor genrico
-estilo, el elemento de la lista para utilizarse inListView.
background_color ListItem sublasses botn, que tiene antecedentes_color, pero de u
n compuesto de los elementos de la lista, debemos agregar esta propiedad.
background_color es aListProperty y predeterminados a [1, 1, 1, 1].
deseleccionado_color_color es aListProperty deseleccionados y predeterminados a
[.33, .33, .33, 1].
representando_Cls Que clase de vista de componente, si lo hubiere, debe represen
tar para el elemento de lista compuesta en __repr__()?
Representando_cls es anObjectProperty y predeterminados a Ninguno.
selected_color_color seleccionado es aListProperty y predeterminados a [1, 0, 0,
1].
classkivy.uix.listview.ListView( kwargs) Bases: kivy.uix.abstractview.AbstractView,
kivy.event.EventDispatcher, ListView es un widget de alto nivel primario, el man
ejo de la tarea comn de presentacin de los elementos en una lista desplegable. La
flexibilidad est dada por la utilizacin de una variedad de adaptadores de interfaz
con los datos.
El adaptador viene a travs de la propiedad de la clase inAbstractView mixtos.
Tambin subclassesEventDispatcher ListView para desplazarse. El evento on_scroll_c
ompleto es utilizado para actualizar la vista principal.
Para obtener una lista de elementos de cadena, sin seleccin, useSimpleListAdapter
. Para mostrar los elementos que responden a la seleccin, que van desde simples e
lementos para materiales compuestos avanzados, useListAdapter. Para una alternat

iva potente adaptador, useDictAdapter, redondeando la eleccin para disear listas a


ltamente interactivo.
Eventos en_scroll_completo: (booleano, )dispararon al desplazarse complete.
contenedor el contenedor es un widget GridLayout celebrada dentro de un widget S
crollView. (Vase la sociated KV en bloque el generador.load_string() setup). Tema
ver instancias administrados y prestados por el adaptador se agregan a este con
tenedor. El contenedor est desactivada con una llamada a clear_widgets() cuando l
a lista es reconstruida por el llenar() mtodo. Un ejemplo de Widget padding se aad
e tambin, segn sea necesario, dependiendo de la altura de fila clculos.
contenedor es anObjectProperty y predeterminados a Ninguno.
divider [Todo] no utilizados.
528

_divisor de altura [Todo] no utilizados.


item_strings si item_strings es proporcionada, crear una instancia de SimpleList
Adapter con esta lista de cadenas, y utilizarlo para gestionar una lista de sele
ccin.
item_strings es aListProperty y predeterminados a [].
row_row_altura la propiedad height se calcula sobre la base de la altura del con
tenedor y el recuento de elementos.
row_height es aNumericProperty y predeterminados a Ninguno.
Si el desplazamiento scroll_to() mtodo es llamado mientras las operaciones de des
plazamiento estn ocurriendo, una llamada recursividad error puede ocurrir. scroll
_to() comprueba que el desplazamiento es falso antes de llamar a poblar().
scroll_to() enva un desplazamiento_evento complete, que establece desplazarse hac
ia atrs a False.
desplazamiento est aBooleanProperty y su valor por defecto es false.
classkivy.uix.listview.ListItemReprMixin( kwargs) Bases: kivy.uix.label.Label TheLi
stItemReprMixin proporciona aLabel como compatible con Python 2/3 Representacin d
e cadena (__repr__). Est pensado para uso interno.
36.26 ModalView
nuevo en la versin 1.4.0.
El widget ModalView se utiliza para crear vistas modal. De forma predeterminada,
la vista se cubren la totalidad de la ventana "padre".
Recuerde que el tamao predeterminado del tamao de un widget_HINT=(1, 1). Si no des
ea que su vista 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.
36.26.1 Ejemplos
Ejemplo de un simple 400x400 Hello world view:
ver = ModalView(size_HINT=(Ninguno, Ninguno), size=(400, 400) Vista.add_widget(L
abel(text= Hola mundo ))
por defecto, cualquier haga clic fuera de la vista se lo desestime. Si usted no
quiere, puede establecer ModalView.auto_DISMISS False:
ver = ModalView(AUTO_DISMISS=false) view.add_widget(Label(text= Hola mundo ) Vis
ta.open()
manualmente para despedir o cerrar la vista, utilice theModalView.Cerrar(), mtodo
de la ModalView en- postura:
view.CERRAR()
529

Ambos ModalView.open() y ModalView.Cerrar() son bindable. Esto significa que se


puede enlazar directamente la funcin de una accin, por ejemplo, para un botn de on_
pulse

# crear contenido y agregarla al ver contenido = Botn(text= cerca de m!") ver = Mo


dalView(AUTO_DISMISS=false) view.add_widget(contenido)
# enlazar el evento on_pulse el botn para la funcin Descartar contenido.bind(on_pu
lse=view.descartar)
# abrir la vista Vista.open()
36.26.2 ModalView eventos
hay dos eventos disponibles: on_open que se provoca cuando la vista est abriendo
y ON_descartar que se provoca cuando se cierra la vista. Para el_DISMISS, puede
evitar que la vista desde el cierre por explcitas devolviendo True desde su devol
ucin.
def mi_callback(ejemplo):
print( ModalView , instancia "est siendo despedido, pero est impedido!") devolver T
rue View = ModalView() view.add_widget(Label(text= Hola mundo ) Vista.bind(sobre
_DISMISS=mi_callback) view.open()
ha cambiado en la versin 1.5.0: El ModalView puede cerrarse pulsando la tecla esc
en el teclado si theModalView.auto_DISMISS propiedad es True (el valor predeter
minado).
classkivy.uix.modalview.ModalView( kwargs) Bases: kivy.uix.anchorlayout.AnchorLayou
t
ModalView clase. Consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_open:ModalView dispararon cuando se abre.
En_DISMISS:ModalView dispararon cuando est cerrado. Si la devolucin de llamada dev
uelve True, el descartar ser cancelado.
attach_a si un widget est establecido en attach_a, la vista se atribuyen a la ven
tana principal ms cercano del widget. Si no se encuentra ninguno, se le adjuntar a
la ventana principal/global.
attach_a es anObjectProperty y predeterminados a Ninguno.
auto_desestimar esta propiedad determina si la vista se descarta automticamente c
uando el usuario hace clic fuera de ella.
AUTO_DISMISS es aBooleanProperty y su valor predeterminado es True.
Antecedentes La imagen de fondo de la vista usada para el fondo de la vista.
fondo aStringProperty y predeterminados a "Atlas://data/images/defaulttheme/moda
lview- background .
_color de fondo color de fondo en el formato (r, g, b, a).
530

_color de fondo es aListProperty y predeterminados a [0, 0, 0, .7].


fronterizos utilizados para grficos BorderImage instruccin. Utilizado para el fond
o_NORMAL_down thebackground y propiedades. Puede ser usado cuando se utilizan fo
ndos personalizados.
Debe ser una lista de cuatro valores: (arriba, derecha, abajo, izquierda). Lea l
as instrucciones BorderImage para obtener ms informacin sobre cmo usarlo.
frontera es aListProperty y predeterminados a (16, 16, 16, 16).
descartar( largs, kwargs) cerrar la vista si est abierto. Si realmente desea cerrar l
a vista, sea cual sea el evento_DISMISS devuelve, puede utilizar el argumento fo
rce:
ver = ModalView() view.descartar(force=true)
cuando la vista es desestimada, ser extrado antes de ser retirados de los padres.
Si no desea que la animacin, utilice:
view.descartar(animacin=false)
open( largs) muestran la ventana Vista desde el attach_al widget. Si se establece,
se le adjuntar a la ventana ms cercana. Si el widget no est conectado a ninguna ve
ntana, la vista se atribuyen a la ventana global.
36.27 PageLayout
ThePageLayout clase se utiliza para crear un sencillo diseo multi-pgina, en una fo
rma que permite que pase de una pgina a otra utilizando las fronteras.
Actualmente no honorsize PageLayout_hint orpos_hint propiedades.

Nuevo en la versin 1.8.0.


Ejemplo:
PageLayout:
Botn:
texto: "Page1":
texto: Pgina 2 :
texto: "Page3"
pasa de una pgina a la siguiente se realizan deslizando el dedo desde las zonas f
ronterizas de la derecha o de la izquierda. Si desea visualizar varios widgets e
n una pgina, le sugerimos que utilice un diseo que contiene.
Idealmente, cada pgina debe consistir de un widget singlelayout que contiene el r
esto de los widgets en la pgina.
classkivy.uix.pagelayout.PageLayout( kwargs) Bases: kivy.uix.layout.Layout
clase PageLayout. Consulte la documentacin del mdulo para obtener ms informacin.
531

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

Por defecto, haga clic fuera de la ventana emergente se Cerrar/Cerrar. Si usted


no quiere, puede establecer AUTO_DISMISS False:
popup = Popup(title= prueba emergente, contenido=Label(text= Hola mundo ), AUTO
_DISMISS=false) popup.open()
manualmente para cerrar/cerrar el popup, usedismiss:
popup.Cerrar()
()( anddismiss Bothopen) son bindable. Esto significa que se puede enlazar direc
tamente la funcin de una accin, por ejemplo, para un botn de on_pulse:
# crear contenido y aadir el contenido del elemento emergente = Botn(text= cerca d
e m!") = popup Popup(content=contenido, AUTO_DISMISS=false)
# enlazar el evento on_pulse el botn para la funcin Descartar contenido.bind(on_pu
lse=popup.descartar)
# abrir el popup popup.open()

36.28.2 eventos emergente


hay dos eventos disponibles: on_open que se desencadena cuando se abre la ventan
a emergente, y ON_descartar que se desencadena cuando el popup est cerrado. Para
el_DISMISS, puede impedir que la ventana emergente de cierre por explcitas devolv
iendo True desde su devolucin de llamada:
def mi_callback(ejemplo):
print( popup , instancia "est siendo desestimada pero es impedido!") devolver True
= popup Popup(content=Label(text= Hola mundo ) popup.bind(sobre_DISMISS=mi_call
back) popup.open()
classkivy.uix.popup.Popup( kwargs) Bases: kivy.uix.modalview.ModalView
clase emergente. Consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_open:dispararon cuando se abre la ventana emergente.
en_DISMISS:dispararon cuando se cierra la ventana emergente. Si la devolucin de l
lamada devuelve True, el descartar ser cancelado.
Contenido de la ventana emergente que aparece justo debajo del ttulo. El
contenido es anObjectProperty y predeterminados a Ninguno.
Separador_color color usado por el separador entre el ttulo y el contenido.
Nuevo en la versin 1.1.0.
_color del separador es un ListProperty y predeterminados a [47 / 255 / 255., 16
7., 212 / 255, 1.]
533

Separador_height Altura del separador.


Nuevo en la versin 1.1.0.
_height es aNumericProperty separador y predeterminados a 2DP.
Ttulo Valor de tipo String que representa el ttulo del popup.
ttulo es aStringProperty y predeterminados a "Sin ttulo".
title_align alineacin horizontal del ttulo.
Nuevo en la versin 1.9.0.
title_align es aOptionProperty y predeterminados a izquierda . Las opciones dis
ponibles son Izquierda, cen- ter, a la derecha y Justificar.
title_color el color usado por el ttulo.
Nuevo en la versin 1.8.0.
title_color es aListProperty y predeterminados a [1, 1, 1, 1].
title_font fuente utilizada para representar el texto del ttulo.
Nuevo en la versin 1.9.0.
title_font es aStringProperty y predeterminados a Roboto .
title_size representa el tamao de fuente del ttulo emergente.
Nuevo en la versin 1.6.0.
title_size es aNumericProperty y predeterminados a 14sp .
exceptionkivy.uix.popup.PopupException Bases: Excepcin
excepcin emergente, dispararon cuando varios widgets de contenido se agregan a la
ventana emergente.
Nuevo en la versin 1.4.0.
36,29 Barra de progreso
nuevo en la versin 1.0.8.
Widget TheProgressBar es utilizado para visualizar el progreso de una tarea. Slo
el modo horizontal se admite actualmente: el modo vertical no est disponible toda
va.
La barra de progreso no tiene elementos interactivos y es un widget de slo lectur
a.
Para utilizarlo, simplemente asigne un valor para indicar el progreso actual:
534

de importacin kivy.uix.progressbar ProgressBar ProgressBar PB =(max=1000)


# Esto actualizar automticamente los grficos (75% terminado) pb.Value = 750
classkivy.uix.progressbar.ProgressBar( kwargs) Bases: kivy.uix.widget.Widget
clase para crear un widget de barra de progreso.
Consulte la documentacin del mdulo para obtener ms detalles. El
mximo valor mximo permitido forvalue.
max es aNumericProperty y predeterminados a 100.
valor valor actual utilizado por el deslizador.
valor es anAliasProperty que devuelve el valor de la barra de progreso. Si el va
lor es &lt; 0 o &gt;max, se normalizar a esos lmites.
Ha cambiado en la versin 1.6.0: El valor se limita ahora a entre 0 andmax.
valor_normalizado valor normalizado dentro del rango de 0-1:
&gt;&gt;&gt; Pb = ProgressBar(valor=50, max=100) &gt;&gt;&gt; pb.valor 50 &gt;&g
t;&gt; slider.value_0.5
_valor normalizado es anAliasProperty normalizado.
36.30 RecycleBoxLayout
Advertencia: este mdulo es altamente experimental, su API puede cambiar en el fut
uro, y la documentacin no est completa en este momento.
36.31 RecycleGridLayout
Advertencia: este mdulo es altamente experimental, su API puede cambiar en el fut
uro, y la documentacin no est completa en este momento.
36.32 RecycleLayout
Advertencia: este mdulo es altamente experimental, su API puede cambiar en el fut
uro, y la documentacin no est completa en este momento.
535

36.33 Distribucin relativa de


nuevo en la versin 1.4.0.
Este diseo permite establecer coordenadas relativas a los nios. Si desea utilizar
el posicionamiento absoluto, FloatLayout.
Clase TheRelativeLayout se comporta como el regularFloatLayout salvo que su nio w
idgets estn posicionados con respecto al diseo.
Cuando un widget con posicin = (0,0) se aade a un RelativeLayout, el nio widget tam
bin se mover cuando la posicin del RelativeLayout es cambiado. El nio widgets perman
ecen las coordenadas (0,0) que estn siempre en relacin con el diseo principal.
36.33.1 Sistemas de coordenadas
coordenadas de ventana
por defecto, slo hay un sistema de coordenadas que definen la posicin de los widge
ts y toque eventos enviados a ellos: el sistema de coordenadas de la ventana, qu
e lugares (0, 0) en la esquina inferior izquierda de la ventana. Aunque hay otro
s sistemas de coordenadas definidos, por ejemplo, coordenadas y locales, estos s
istemas de coordenadas son idnticos a los del sistema de coordenadas de la ventan
a mientras una disposicin relativa tipo widget no est en la pila principal del wid
get. Cuando widget.pos es leer o un toque es recibida, los valores de coordenada
s estn en las coordenadas principales, pero como se mencion, estas son idnticas a l
as coordenadas de la ventana, incluso en complejas pilas de widget.
Por ejemplo:
BoxLayout:
Etiqueta:
texto: Izquierda :
texto: central en_TOUCH_down: print( central: {} .Format(args[1].pos) BoxLayou
t:
on_TOUCH_down: print( Box: {} .Format(args[1].pos) Botn:
texto: Right on_TOUCH_down: print( Derecha: {} .Format(args[1].pos)
cuando se hace clic en el botn del medio y el toque se propaga a travs de los dife
rentes sistemas de coordenadas principal, imprime el siguiente:
&gt;&gt;&gt; Cuadro: (430.0, 282.0) &gt;&gt;&gt; derecha: (430.0, 282.0) &gt;&gt

;&gt; Oriente: (430.0, 282.0)


como se afirma, el touch tiene coordenadas idnticas a las coordenadas de la venta
na de cada sistema de coordenadas.
Chocan_point(), por ejemplo, toma el punto en las coordenadas de la ventana.
Las coordenadas principales de
otros widgets tipo RelativeLayout areScatter, ScatterLayout y ScrollView. Si tal
un widget especial est en la pila principal, slo entonces el padre y el sistema l
ocal de coordenadas divergen de la ventana Sistema de coordenadas. Para cada uno
de esos widget en la pila, con un sistema de coordenadas (0, 0) del sistema de
coordenadas est en la esquina inferior izquierda del widget se crea. Las coordena
das de posicin y toque recibido y ledo por un widget estn en el sistema de coordena
das de la ms reciente
536

widget en su pila principal (no incluido) o en las coordenadas de la ventana si


no hay ninguno (como en el primer ejemplo). Llamamos a estas coordenadas las coo
rdenadas principales.
Por ejemplo:
BoxLayout:
Etiqueta:
texto: Izquierda :
texto: central en_TOUCH_down: print( central: {} .Format(args[1].pos) Relative
Layout:
on_TOUCH_down: print( relativo: {} .Format(args[1].pos) Botn:
texto: Right on_TOUCH_down: print( Derecha: {} .Format(args[1].pos)
haciendo clic en el botn del medio impresiones:
&gt;&gt;&gt; Relativa: (396.0, 298.0) &gt;&gt;&gt; derecha: (-137.33, 298.0) &gt
;&gt;&gt; Oriente: (396.0, 298.0)
como el toque se propaga a travs de los widgets, para cada widget, el tacto es re
cibido en su coordi- padre coordenadas. Porque tanto la relativa y oriente los w
idgets no tienen estos widgets especiales con sus padres en la pila, el tacto es
la misma que la ventana de coordenadas. Slo el derecho widget, que tiene un Rela
tiveLayout en su pila principal, recibe el toque en coordenadas relativas a dich
o RelativeLayout que es diferente a las coordenadas de la ventana.
Las coordenadas locales y Widget
cuando se expresa en coordenadas, la posicin se expresa en las coordenadas de la
ms reciente widget en su matriz pila, no incluida. Cuando se expresa en coordenad
as locales o widget Widgets, las mismas estn tambin incluidos.
Cambiando el ejemplo anterior para transformar las coordenadas en coordenadas lo
cales:
BoxLayout:
Etiqueta:
texto: Izquierda :
texto: central en_TOUCH_down: print( central: {} .Format(self.a_local( args[1].p
os))) RelativeLayout:
on_TOUCH_down: print( relativo: {} .Format(self.a_local( args[1].pos))) Botn:
texto: Right on_TOUCH_down: print( Derecha: {} .Format(self.a_local( args[1].pos
)))
Ahora, haga clic en el botn del medio impresiones:
&gt;&gt;&gt; Relativa: (-135.33, 301,0) &gt;&gt;&gt; derecha: (-135.33, 301,0) &
gt;&gt;&gt; Oriente: (398.0, 301,0)
Esto es porque ahora la relativa widget tambin expresa las coordenadas con respec
to a s misma.
537

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

Fig. 36.2: resultado real


size_HINT: Ninguno, Ninguno Tamao: 200, 200 pos: 200, 200
canvas:
Color:
rgba: 1, 0, 0, 0,5 Rectngulo:
pos: self.pos # tamao incorrecto: self.tamao
que usted podra esperar que este para representar un nico rectngulo rosa; sin embar
go, el contenido de theRelativeLayout ya se ha transformado, por lo que el uso d
e pos: self.pos duplicar esa transformacin. En este caso, el uso de pos:
0, 0 u omitiendo completamente pos proporcionar el resultado esperado.
Esto tambin se aplica a la posicin de sub-widgets. En lugar de posicionar aWidget
basado en el diseo de su propia posicin:
RelativeLayout:
Widget:
pos: self.parent.pos Widget:
Centro: self.parent.centro
...utilice thepos_hint propiedad:
RelativeLayout:
Widget:
pos_HINT: { x : 0, y : 0} Widget:
pos_HINT: { centro_x : 0.5, "centro_y : 0.5}
ha cambiado en la versin 1.7.0: antes de la versin 1.7.0, el RelativeLayout fue im
plementado como un FloatLayout dentro de un smbolo de distribucin. Este comportami
ento/widget ha sido renombrado a ScatterLayout. La RelativeLayout ahora slo admit
e posiciones relativas (y no se puede rotar, escalar o traducido en un sistema m

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

puede hacer referencia a otros documentos con la funcin:doc:. Por ejemplo, en el n


dice del documento.rst puede escribir:
Vaya a mi siguiente documento: :doc: moreinfo.rst"
generar un enlace que, al hacer clic, se abre themoreinfo.rst documento.
classkivy.uix.rst.RstDocument( kwargs) Bases: kivy.uix.scrollview.ScrollView
widget base utilizada para almacenar un documento RST. Consulte la documentacin d
el mdulo para obtener ms informacin.
background_background_color especifica el color que se utilizar para el RstDocume
nt.
Nuevo en la versin 1.8.0.
ANTECEDENTES_color para colores anAliasProperty[ background ].
base_font_size tamao de fuente para el ttulo ms grande, 31 por defecto. El resto de
los tamaos de fuente se deriva de esto.
Nuevo en la versin 1.8.0.
Los colores Diccionario de todos los colores utilizados en la RST renderizado.
Advertencia: Este diccionario se necesita un tratamiento especial. Usted tambin n
ecesita llamar RstDocument.Render() si puedes cambiarlos despus de la carga.
los colores es aDictProperty.
document_root root path donde :doc: buscar documentos rst. Si no hay ninguna ruta
dado, se utilizar el directorio del primer archivo de cdigo fuente cargado.
DOCUMENT_ROOT es aStringProperty y predeterminados a Ninguno.
goto(ref, largs) Desplcese a la referencia. Si no la encuentra, no se puede hacer
nada.
Para este texto:
.. _myref:
Esto es algo que siempre he querido.
Usted puede hacer:

desde kivy.reloj reloj de importacin functools importar parcial


doc = RstDocument(...) Clock.Schedule_una vez (parcial(doc.goto, myref ), 0.1)
Nota: Es preferible aplazar la llamada del goto si acaba de cargar el documento
porque el diseo podra no estar terminado o el tamao de la RstDocument an no ha sido
determinada.
En cualquier caso, el clculo del desplazamiento sera errneo.
Sin embargo, puede hacer una llamada directa si el documento ya est cargado.
541

Nuevo en la versin 1.3.0.


(filename, precarga encoding="utf-8", errors= strict ) de precarga un archivo rs
t para conseguir su toctree y su ttulo.
El resultado ser almacenado con thefilename intoctrees como clave.
render() Fuerza de representacin de documentos.
resolver_path(Filename) obtenga la ruta para este nombre. Si el archivo no exist
e, se devuelve el nombre de archivo + DOCUMENT_ROOT.
show_errores indican si RST parsers errores debe ser mostrado en la pantalla o n
o
show_errors est aBooleanProperty y su valor por defecto es false.
Nombre de archivo de origen de la RST documento.
Fuente es aStringProperty y predeterminados a Ninguno.
fuente_encoding codificacin que se utilizar para el archivo thesource.
source_encoding aStringProperty y por defecto UTF-8.
Nota: Es su responsabilidad asegurarse de que el valor proporcionado es un cdec vl
ido apoyado por python.
source_Error error de manipulacin para ser utilizado mientras que la codificacin d
el archivo thesource.
source_error es un OptionProperty y predeterminados a estricta. Puede ser una de
strict , ig- nore , replace , xmlcharrefreplace o backslashreplac .
Texto marcado RST de texto del documento. El
texto se aStringProperty y predeterminados a Ninguno.
Ttulo Ttulo del documento actual. El
ttulo es aStringProperty y predeterminados a . Es de slo lectura.
toctrees Toctree de todos los documentos cargados o precargado. Este diccionario
est llena cuando un documento rst se carga explcitamente o wherepreload() ha sido
llamado.
Si el documento no tiene ningn nombre de archivo; por ejemplo, cuando el document
o se carga desde un archivo de texto, la clave ser .
toctrees es aDictProperty y predeterminados a {}.
subrayado_color color de subrayado de los ttulos, expresado en notacin de colores
html
_color es aStringProperty subrayado y predeterminados a 204a9699 .
542

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:

dispersin dispersin =(do_rotation=False, do_scale=false)


slo permiten la traduccin en el eje x:
dispersin dispersin =(do_rotation=False, do_scale=False, do_Translation_y=false)
36.36.3 Automtico
Si theScatter Traer al frente.auto_traer_para_front propiedad es True, el widget
de dispersin se eliminarn y re- aadido a los padres cuando es tocada (trados al fre
nte, por encima de todos los otros widgets en el primario). Esto es til cuando se
manipulan varios widgets de dispersin y no desea que el activo est parcialmente o
culto.
544

escala 36.36.4 Limitacin


estamos usando una matriz de 32 bits en la doble representacin. Eso significa que
tenemos un lmite para escalar. Usted no puede hacer escala infinita hacia arriba
/ abajo con nuestra aplicacin. Generalmente, usted no golpea la escala mnima (por
que no se ve en la pantalla), pero el mximo de la escala es 9.99506983235e+19 (2^
66).
Tambin puede limitar la escala mnima y mxima permitida:
dispersin dispersin =(scale_min=.5, escala_max=3.)
36.36.5 comportamiento
ha cambiado en la versin 1.1.0: si no controlar las interacciones estn habilitados
, entonces el controlador tctil nunca devolver True.
classkivy.uix.dispersin.Dispersin( kwargs) Bases: kivy.uix.widget.Widget
clase de dispersin. Consulte la documentacin del mdulo para obtener ms informacin.
Eventos en_transform_con_touch:dispararon cuando la dispersin ha sido transformad
a por el usuario touch o multitouch, tales como la aplicacin del zoom o la panormi
ca.
on_traer_para_front:dispararon cuando la dispersin es llevado al frente.
Ha cambiado en la versin 1.9.0: evento on_traer_para_front aadido.
Ha cambiado en la versin 1.8.0: evento on_transform_con_toque aadido.
Aplicar_transform(trans, post_multiply=False, el anclaje=(0, 0) transforma la di
spersin aplicando la matriz de transformacin "trans" (en la parte superior de su a
ctual estado de transformacin). La matriz resultante puede ser encontrada en thet
ransform propiedad.
Parmetros: trans matix Matrix.la transformacin que se aplica a la dispersin widget.
Anclaje: tupla, por omisin (0, 0).El punto de utilizar como el origen de la trans
- formacin (utiliza widget local espacio).
post_multiply: bool, cambia a Falso.Si el valor es True, la matriz de transforma
cin es post multiplicado (como si se aplica antes de la actual transformacin).
Ejemplo de uso:
desde kivy.graphics.importacin de transformacin Mat Matriz = Matrix().escala(3, 3,
3) scatter_instance.apply_transform(mat)
auto_traer_para_front Si es True, el widget se insertan automticamente en la part
e superior del widget principal lista para dibujo.
auto_traer_para_front es aBooleanProperty y su valor predeterminado es True.
bbox cuadro delimitador del widget en el espacio primario:
((x, y), w, h)) # = x, y en la esquina inferior izquierda
bbox es anAliasProperty.
do_colisionan_after_children Si es True, la deteccin de colisin para limitar el co
ntacto dentro de los smbolos de distribucin se har despus de dispaching el toque a l
os nios. Usted puede colocar a los nios fuera del cuadro delimitador de la dispers
in y todava ser capaz de tocarlos.
545

Nuevo en la versin 1.3.0.


Hacer_rotation permiten la rotacin.
do_rotation es aBooleanProperty y su valor predeterminado es True.
NO_SCALE Permitir escalado.
do_escala es aBooleanProperty y su valor predeterminado es True.
No_translation traduccin posible sobre el eje X o Y.
_translation es un AliasProperty (do_Translation_x + do_Translation_y) hacer_Tran
slation_x permiten la traduccin en el eje x.
NO_TRANSLATION_x es aBooleanProperty y su valor predeterminado es True.
_Translation_y permitir la traduccin en el eje Y.
_Translation_y es aBooleanProperty y su valor predeterminado es True.
on_traer_para_front(touch) se llama cuando un toque evento provoca la dispersin p
ara ponerse al frente de los padres (slo si el auto_traer_para_front es True) Par
ameterstouch: el objeto tctil que trajo la dispersin hacia delante.
Nuevo en la versin 1.9.0.
sobre_transform_con_Touch (tctil) se llama cuando un evento tctil ha transformado
el widget de dispersin. Por defecto, esto no hace nada, pero pueden ser superados
por las clases derivadas que necesitan para reaccionar a las transformaciones c
ausadas por la entrada del usuario.
Parameterstouch: el toque el objeto que genera la transformacin.
Nuevo en la versin 1.8.0.
Valor de rotacin rotacin de la dispersin.
Rotacin es anAliasProperty y predeterminados a 0.0.
escala de valor de escala de la dispersin.
Escala es anAliasProperty y predeterminados a 1.0.
scale_factor de escala mximo permitido.
scale_max es aNumericProperty y predeterminados a 1e20
_min. escala de factor de escala mnima permitida.
scale_min es aNumericProperty y predeterminados a 0,01.
Transformar la matriz de transformacin.
transformacin es anObjectProperty y predeterminados a la matriz de identidad.
546

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,

como el tamao_HINT, tamao_HINT_x, tamao_HINT_y_pos y sugerencia.


Nota: se implementa como aFloatLayout TheScatterLayout aScatter interior.
Advertencia: Dado que el verdadero ScatterLayout es una dispersin, su_add y remov
e_widget widget funciones son redefinidos para agregar hijos a la embeddedFloatL
ayout (accesible como la propiedad content ofScatter) automticamente. Por lo tant
o, si usted desea acceder el agregado de elementos secundarios, necesita self.co
ntent.Los nios en lugar de auto.los nios.
Advertencia: TheScatterLayout fue introducido en 1.7.0 y fue calledRelativeLayou
t en versiones anteriores. La RelativeLayout es ahora una implementacin optimizad
a que slo utiliza una transformacin posicionales para evitar que algunos de los clc
ulos ms pesados involucrados.
classkivy forScatter.uix.scatterlayout.ScatterLayout( kw) Bases: kivy.uix.dispersin.
dispersin
ScatterLayout clase, consulte la documentacin del mdulo para obtener ms informacin.
547

.scatterlayout classkivy.uix.ScatterPlaneLayout( kwargs) Bases: kivy.uix.dispersin.S


catterPlane
ScatterPlaneLayout clase, consulte la documentacin del mdulo para obtener ms inform
acin.
A ScatterLayout similar, pero basado en ScatterPlane - de modo que la entrada no
est limitada.
Nuevo en la versin 1.9.0.
36,38 Pantalla de gestor de
nuevo en la versin 1.4.0.
La pantalla manager es un widget dedicado a la gestin de varias pantallas para su
aplicacin. El oneScreen defaultScreenManager muestra slo en un momento y utiliza
aTransitionBase para pasar de una pantalla a otra.
Las mltiples transiciones son compatibles en funcin de la evolucin de las coordenad
as de la pantalla / escala o incluso realizar fancy animacin utilizando shaders p
ersonalizados.
36.38.1 Uso bsico
vamos a construir un gestor de pantalla con 4 denominado pantallas. Cuando se cr
ea una pantalla,es absolutamente necesario dar un nombre:
de kivy.uix.screenmanager importar ScreenManager, pantalla
# crear el administrador sm = ScreenManager()
# Aadir algunas pantallas for i in Range(4):
i) sm.add_widget(Pantalla) % = pantalla Screen(name= ttulo %d
# Por defecto, la primera pantalla aadida en el ScreenManager ser # muestra. A con
tinuacin, puede cambiar a otra pantalla.
# vamos a mostrar la pantalla llamada "Ttulo 2" # Una transicin se utilizar automtic
amente.
sm.Corriente = Ttulo 2
por defecto ScreenManager.transicin es una SlideTransition con opciones de direcc
in y duracin.
Tenga en cuenta que por defecto muestra aScreen nada: es solo aRelativeLayout. N
ecesita utilizar esa clase como una raz widget para su propia pantalla, la mejor
manera de subclase.
Advertencia: es AsScreen aRelativeLayout, es importante comprender los riesgos c
omunes.
Aqu est un ejemplo de una pantalla de Men y Settings : Pantalla
de kivy.app App importacin de kivy.lang importar Builder de kivy.uix.screenmanage
r importar ScreenManager, pantalla
548

# Crear ambas pantallas. Por favor, tenga en cuenta la raz.Manager.CURRENT: ste es


cmo # puede controlar el ScreenManager de kv. Cada pantalla tiene por defecto un
a propiedad # manager que le da el ejemplo de la ScreenManager utilizado.
Builder.load_string(""" <MenuScreen>:
BoxLayout:
Botn:
texto: Goto en la configuracin_press: root.Manager.Corriente = Settings :
texto: Salir
<SettingsScreen>:
BoxLayout:
Botn:
texto: Mi configuracin Botn Botn:
texto: Back to Menu en_press: root.Manager.Corriente = Menu """)
# declarar la clase MenuScreen ambas pantallas (pantalla):
pase la
clase SettingsScreen(Pantalla):
pass
# crear la pantalla administrador sm = ScreenManager() sm.add_widget(MenuScreen(
name= menu ) sm.add_widget(SettingsScreen(name= Settings ))
clase TestApp(App):
def construir(self):
retorno sm
si __name__ == "__main__ :
TestApp().run()
36.38.2 cambiando de direccin de
un caso de uso comn para ScreenManager implica el uso de un SlideTransition que s
e desliza a la derecha hasta la siguiente pantalla y se desliza a la izquierda d
e la pantalla anterior. Basndose en el ejemplo anterior, esto puede realizarse de
la siguiente manera:
Builder.load_string(""" <MenuScreen>:
BoxLayout:
Botn:
texto: Goto en la configuracin_press:
root.Manager.transition.direccin = izquierda root.Manager.Corriente = Settings
:
texto: "Quit"
549

<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:

NoTransition - interruptores pantallas instantneamente con ninguna animacin SlideT


ransition - Deslice la pantalla in/out, desde cualquier direccin SwapTransition aplicacin de la iOS transicin FadeTransition swap - sombreado para la pantalla FA
DE IN/OUT WipeTransition - sombreado para limpiar las pantallas de derecha a izq
uierda FallOutTransition - shader donde la vieja pantalla cae y se vuelve tran
sparente, revelando el nuevo uno detrs de l.
RiseInTransition - shader donde la nueva pantalla se eleva desde el centro de la
pantalla, mientras que la decoloracin de transparente a opaco.
Usted puede fcilmente cambiar las transiciones por cambio de propiedad: transicin
theScreenManager.
sm = ScreenManager(transicin=FadeTransition())
Nota: En la actualidad, ninguno de Shader basado en el uso de anti-aliasing de t
ransiciones. Esto es porque utilizan el FBO que no tiene ninguna lgica para manej
ar el supermuestreo. Este es un problema conocido y estamos trabajando en una ap
licacin transparente que dar los mismos resultados que si se hubiera quedado en la
pantalla.
Para ser ms concretos, si ve texto con bordes afilados durante la animacin, es nor
mal.
550

classkivy.uix.screenmanager.Pantalla( kw) Bases: kivy.uix.relativelayout.RelativeLa


yout
pantalla es un elemento destinado a ser utilizado con aScreenManager. Mdulo de co
ntrol de la documentacin para ms informacin.
Eventos en_pre_intro: ()evento disparado cuando la pantalla est a punto de ser ut
ilizado: la entrada se inicia la animacin.
on_intro: ()evento disparado cuando aparece la pantalla: la introduccin de animac
in es completa.
on_pre_dejar: ()evento disparado cuando la pantalla est a punto de ser eliminado:
el salir de animacin se inicia.
on_dejar: ()evento disparado cuando la pantalla est retirado: la animacin termina
dejando.
Ha cambiado en la versin 1.6.0: Eventos on_pre_on_enter, enter, en_pre_on_salir y
dejar fueron agregadas.
manager ScreenManager objeto, establecer cuando la pantalla se agrega a un gesto
r.
manager es anObjectProperty y predeterminados a Ninguno, Slo lectura.
nombre Nombre de la pantalla que debe ser nico dentro de aScreenManager. Este es
el nombre usado forScreenManager.actual.
nombre es aStringProperty y predeterminados a .
transicin_Valor de progreso que representa la culminacin de la transicin actual, si
alguno se produce.
Si una transicin en curso, cualquiera que sea el modo, el valor cambiar de 0 a 1.
Si desea saber si es una animacin entrando o saliendo, verificar thetransition_st
ate.
transicin_progress es aNumericProperty y predeterminados a 0.
Transicin_state valor que representa el estado de la transicin:
en si la transicin va a mostrar su pantalla out si la transicin va a ocultar la
pantalla despus de que la transicin se complete, el estado retendr el ltimo valor (d
entro o fuera).
Transicin_state es anOptionProperty y predeterminados a out .
classkivy.uix.screenmanager.ScreenManager( kwargs) Bases: kivy.uix.floatlayout.Floa
tLayout
gestor de pantalla. Esta es la clase principal que controlar yourScreen pila y me
moria.
De forma predeterminada, el administrador slo mostrar una pantalla a la vez.
El nombre actual de la pantalla que se muestra, o la pantalla para mostrar.

De kivy.uix.screenmanager importar ScreenManager, pantalla


sm = ScreenManager() sm.add_widget(Screen(name= primero ) sm.add_widget(Screen(n
ame= Segundo ))
# Por defecto, la primera pantalla aadida ser mostrado. Si desea mostrar # otro, e
stablezca la propiedad actual .
sm.Corriente = segundo
es actual aStringProperty y predeterminados a Ninguno.
551

current_pantalla contiene la pantalla visualizada actualmente. Usted no debe cam


biar esta propiedad manualmente, utilice en su lugar actual.
CURRENT_pantalla es anObjectProperty y predeterminados a Ninguno, Slo lectura.
get_screen(nombre) volver la pantalla widget asociado al nombre o elevar aScreen
ManagerException si no encontrado.
Tiene_screen(name) devuelve True si aparece una pantalla con el nombre se ha enc
ontrado.
Nuevo en la versin 1.6.0.
next() devuelve el nombre de la pantalla siguiente de la lista de la pantalla
anterior.() devuelve el nombre de la pantalla anterior de la pantalla.
Pantalla de lista_nombres de la lista de nombres de todos lapantalla widgets aadi
do. La lista es de slo lectura.
screens_nombres es un miembro AliasProperty y es de slo lectura. Se actualiza si
la pantalla Lista de cambios o el nombre de un cambio de pantalla.
pantallas Lista de todas la pantalla widgets aadido. No debera cambiar esta lista
manualmente. Utilice el mtodo add_widget.
pantallas aListProperty y predeterminados a [], es de slo lectura.
Switch_A(pantalla,
opciones) Aadir una nueva pantalla para el ScreenManager y cambi
ar a ella. La pantalla anterior ser re- movido desde la infancia. Las opciones so
n thetransition opciones que ser cambiado antes de la animacin ocurre.
Si no estn disponibles las pantallas anteriores, la pantalla se utiliza como el p
rincipal:
sm = ScreenManager() sm.Switch_A(Screen1) # posteriormente sm.Switch_A (Pantalla
2, direccin= left ) # posteriormente sm.Switch_A (Pantalla3, direccin= Right , dur
acin=1.)
Si cualquier animacin est en progreso, ser detenido y reemplazado por este: usted d
ebe evitar esto porque la animacin mire raro. Utilice eitherswitch orcurrent_to()
, pero no ambos.
El nombre de la pantalla se cambiar si hay algn conflicto con la pantalla actual.
transicin transicin objeto para utilizarlo para animar la transicin desde la pantal
la actual a la siguiente que se muestra.
Por ejemplo, si desea utilizar aWipeTransition entre diapositivas:
desde kivy.uix.screenmanager importar ScreenManager, pantalla WipeTransition
sm = ScreenManager(transicin=WipeTransition()) sm.add_widget(Screen(name= primero
))
552

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

Excepcin para theScreenManager.


classkivy.uix.screenmanager.TransitionBase Bases: kivy.event.
TransitionBase EventDispatcher se usa para animar 2 pantallas dentro de theScree
nManager. Esta clase acta como una base para otras implementaciones como theSlide
Transition andSwapTransition.
Eventos en_progress: objeto de transicin, progresin floatFired durante la animacin
de la transicin.
on_complete: transicin objectFired cuando la transicin es terminado.
add_screen(pantalla) (interno) se utiliza para agregar una pantalla para theScre
enManager.
Duracin La duracin en segundos de la transicin. La
duracin es aNumericProperty y predeterminados a .4 (= 400ms).
Ha cambiado en la versin 1.8.0: Se ha cambiado la duracin predeterminada de 700 ms
a 400 ms.
is_active indica si la transicin est activo o no
es activo es aBooleanProperty_y su valor por defecto es false, slo lectura.
manager ScreenManager objeto, establecer cuando la pantalla se agrega a un gesto
r.
manager es anObjectProperty y predeterminados a Ninguno, Slo lectura.
remove_screen(pantalla) (interna) que se utiliza para quitar una pantalla de the
ScreenManager.
screen_en propiedad que contiene la pantalla para mostrar. Establece automticamen
te por theScreenManager.
screen_en es anObjectProperty y predeterminados a Ninguno.
screen_fuera propiedad que contiene la pantalla para ocultar. Establece automtica
mente por theScreenManager.
screen_out es anObjectProperty y predeterminados a Ninguno.
PRINCIPIO(manager) (interno) inicia la transicin. Esto se llama automticamente por
theScreenManager.
stop() (interno) Detiene la transicin. Esto se llama automticamente por theScreenM
anager.
classkivy.uix.screenmanager.ShaderTransition Bases: kivy.uix.screenmanager.Trans
itionBase
553

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.

direccin la direccin de la transicin. La


direccin es anOptionProperty y predeterminados a izquierda . Puede ser una de i
zquierda , Right , arriba o abajo .
classkivy.uix.screenmanager.SwapTransition Bases: kivy.uix.screenmanager.Transit
ionBase
transicin Swap que parece iOS transicin cuando aparece en la pantalla una nueva ve
ntana.
classkivy.uix.screenmanager.FadeTransition Bases: kivy.uix.screenmanager.ShaderT
ransition
transicin de fundido, basada en un fragmento Shader.
classkivy.uix.screenmanager.WipeTransition Bases: kivy.uix.screenmanager.ShaderT
ransition
transicin Barrido, basado en un fragmento Shader.
554

classkivy.uix.screenmanager.FallOutTransition Bases: kivy.uix.screenmanager.Shad


erTransition
transicin donde la nueva pantalla cae en el centro de la pantalla, cada vez ms p
equeos y ms trans- padre hasta que desaparezca, y revelando la nueva pantalla detrs
de l. Imita el popular estndar de Android/transicin.
Nuevo en la versin 1.8.0.
Duracin La duracin en segundos de la transicin, reemplazando el valor predeterminad
o
es aNumericProperty ofTransitionBase. Duracin y predeterminados a 0,15 euros (= 1
50ms).
classkivy.uix.screenmanager.RiseInTransition Bases: kivy.uix.screenmanager.Shade
rTransition
transicin donde la nueva pantalla se eleva desde el centro de la pantalla, cada v
ez ms grandes y cambiar de transparente a opaco hasta que ocupe toda la pantalla.
Imita el popular estndar de Android/transicin.
Nuevo en la versin 1.8.0.
Duracin La duracin en segundos de la transicin, reemplazando el valor predeterminad
o
es aNumericProperty ofTransitionBase. Duracin y predeterminados a .2 (= 200ms).
classkivy.uix.screenmanager.NoTransition Bases: kivy.uix.screenmanager.Transitio
nBase
sin transicin, se pasa a la siguiente pantalla con ningn retraso o animacin.
Nuevo en la versin 1.8.0.
36.39 vista de desplazamiento
Nuevo en la versin 1.0.4.
El widget proporciona un ScrollView/viewport pannable desplazable que est encajad
o en el scrollview del cuadro delimitador.
36.39.1
el comportamiento de desplazamiento slo acepta un nio ScrollView y aplica un viewp
ort/Ventana para ella segn el ScrollView.scroll_x y ScrollView.scroll_y propiedad
es. Toques se analizaron para deter- minar si el usuario quiere desplazarse o co
ntrolar al nio de alguna otra manera - usted puede hacer ambas cosas al mismo tie
mpo. Para determinar si la interaccin es un gesto de desplazamiento, estas propie
dades se utilizan para:
ScrollView.scroll_distancia: la distancia mnima para viajar, el valor predetermin
ado es 20 pxeles.
ScrollView.scroll_timeout: el perodo de tiempo mximo, cambia a 250 milisegundos.
Si un toque travelsscroll_distancia_timeout thescroll pxeles dentro de plazo, se
reconoce como un gesto de desplazamiento y traduccin (desplazamiento/pan) empezar.
Si se excede el tiempo de espera, el toque evento se distribuye a los nios en su
lugar (sin traduccin).
El valor predeterminado para los ajustes se pueden modificar en el archivo de co

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

36.39.2 limitando al eje X o Y,


por defecto, el ScrollView permite desplazarse tanto en los ejes X e Y. Usted pu
ede deshabilitar explcitamente el desplazamiento sobre un eje por settingScrollVi
ew.do_scroll_x orScrollView.do_scroll_y falso.
36.39.3 Administrar el contenido Tamao y posicin
ScrollView gestiona la posicin de sus hijos de forma similar a un RelativeLayout
(seerelativelayout) pero no el tamao. Usted debe especificar el tamao_pista de su
contenido para obtener el desplazamiento deseado/pan efecto.
Por defecto, el tamao_hint es (1, 1), de modo que el contenido se ajuste a su tam
ao ScrollView exactamente (usted no tendr nada para desplazarse). Debe desactivar
al menos uno del tamao_hint instrucciones (x o y) del nio para habilitar el despla
zamiento.
Para desplazarse aGridLayout sobre eje/verticalmente, establezca el ancho del nio
idntico al del ScrollView (tamao_HINT_x=1, por defecto), y establezca el tamao_HIN
T_y propiedad a ninguno:
layout = GridLayout(cols=1=10, espaciado, tamao_y_HINT=None) # Asegrese de que la
altura es tal que hay algo para desplazarse.
Diseo.bind(MINIMUM_height=layout.setter( altura ) for i in range(30):
btn = Botn(text=str(i), tamao_y_HINT=none, height=40) layout.add_widget(btn) raz =
ScrollView(size_HINT=(Ninguno, Ninguno), size=(400, 400) root.add_widget(layout)
36.39.4 Efectos Overscroll
nuevo en la versin 1.7.0.
Cuando el desplazamiento superara los lmites de theScrollView, utiliza para maneja
r la overscroll aScrollEffect. Estos efectos pueden realizar acciones como rebot
e, cambiar la opacidad, o simplemente evitar el desplazamiento ms all de los lmites
normales. Tenga en cuenta que efectos complejos pueden realizar muchos clculos,
los cuales pueden ser lentas en hardware ms dbil.
Puede cambiar qu efecto est siendo utilizado por settingScrollView.efecto_Cls para
cualquier clase de efecto.
Las opciones actuales incluyen:
ScrollEffect: No permitir desplazarse ms all de fronteras theScrollView.
DampedScrollEffect: La predeterminada actual. Permite al usuario desplazarse ms a
ll de la normal y obligado- Aries, pero tiene el contenido retroceda cuando el to
uch/clic es liberado.
OpacityScrollEffect: Similar a theDampedScrollEffect, sino que tambin reduce la o
pacidad du- rante overscroll.
Tambin puedes crear tu propio efecto de desplazamiento mediante subclases de uno
de estos, a continuacin, pasarla como theeffect_cls en la misma forma.
Alternativamente, puede setScrollView.efecto_x y/orScrollView.efecto_y a una ins
tancia del efecto que desea utilizar. Esto anular el efecto predeterminado establ
ecido inScrollView.efecto_Cls.
Todos los efectos estn ubicadas en thekivy.efectos.
classkivy.uix.scrollview.ScrollView( kwargs) Bases: kivy.uix
ScrollView StencilView.stencilview.class. Consulte la documentacin del mdulo para
obtener ms informacin.
556 eventos

on_scroll_startGeneric evento disparado cuando comienza el desplazamiento de tac


to.
on_scroll_moveGeneric evento disparado al desplazarse desplazarse de tacto.
on_scroll_stopGeneric evento disparado cuando se detiene el desplazamiento de ta
cto.
Ha cambiado en la versin 1.9.0: on_scroll_start_scroll_, mover y sobre_scroll_Sto
p Eventos ahora estn dis- parcheado al desplazarse para manejar ScrollViews anida
dos.
Ha cambiado en la versin 1.7.0: auto_scroll, scroll_friccin, scroll_scroll_mueve,
tiempo de parada" ha quedado obsoleta, usar :attr: efecto_Cls.
bar_color el color de la barra de desplazamiento horizontal / vertical, en forma
to RGBA.
Nuevo en la versin 1.2.0.
bar_color es aListProperty y predeterminados a [.7, .7, .7, .9].
bar_inactive_color el color de la barra de desplazamiento horizontal / vertical
(en formato RGBA), cuando no hay ningn desplazamiento est sucediendo.
Nuevo en la versin 1.9.0.
_barra_color es aListProperty inactivos y predeterminados a [.7, .7, .7, .2].
bar_margen entre la parte inferior/derecha del dibujo cuando scrollview la barra
de desplazamiento horizontal / vertical.
Nuevo en la versin 1.2.0.
barra_margin es aNumericProperty, predeterminado a 0 bar_pos en qu lado de la vis
ta de desplazamiento para colocar cada una de las barras de
bar_pos es de aReferenceListProperty (bar_pos_x,bar_pos_y) bar_pos_x qu lado de l
a barra de desplazamiento horizontal ScrollView debera pasar. Los valores posible
s son: arriba y abajo .
Nuevo en la versin 1.8.0.
bar_pos_x es anOptionProperty, cambia a inferior .
bar_pos_y en qu lado de la barra de desplazamiento vertical ScrollView debera pasa
r. Los valores posibles son "izquierda" y "derecha".
Nuevo en la versin 1.8.0.
barra_pos_y es anOptionProperty y predeterminados a Right .
bar_Ancho Ancho de la barra de desplazamiento horizontal / vertical. El ancho se
interpreta como la altura de la barra horizontal.
Nuevo en la versin 1.2.0.
_width es aNumericProperty bar y predeterminados a 2.
distancia_convert_to_scroll(dx, dy) convierte una distancia en pxeles a una dista
ncia de desplazamiento, dependiendo del tamao del contenido y el scrol- lview tam
ao.
El resultado ser una tupla de distancia de desplazamiento que pueden agregarse an
dscroll toscroll_x_y
557

do_scroll permiten desplazarse sobre el eje X o Y.


_scroll es de aAliasProperty (do_scroll_x +do_scroll_y) do_scroll_x permiten desp
lazarse en el eje x.
do_scroll_x es aBooleanProperty y su valor predeterminado es True.
No_scroll_y permiten desplazarse en el eje Y.
_scroll_y es aBooleanProperty y su valor predeterminado es True.
efecto_Cls instanciate efecto de clase A para los ejes x e y.
Nuevo en la versin 1.7.0.
Efecto_cls es toDampedScrollEffect 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.
efecto_x efecto a aplicar para el eje x. Si no se establece ninguna, una instanc
ia ofeffect_Cls ser creado.
Nuevo en la versin 1.7.0.

Efecto_x es anObjectProperty y predeterminados a Ninguno.


efecto_y efecto a aplicar para el eje Y. Si no se establece ninguna, una instanc
ia ofeffect_Cls ser creado.
Nuevo en la versin 1.7.0.
Efecto_y es anObjectProperty y predeterminados a Ninguno, Slo lectura.
hbar devolver una tupla de (posicin, tamao) de la barra de desplazamiento horizont
al.
Nuevo en la versin 1.2.0.
La posicin y el tamao son normalizados entre 0-1, y representan un porcentaje de l
a altura scrollview actual. Esta propiedad se utiliza internamente para dibujar
la pequea barra horizontal cuando est desplazndose.
vbar es aAliasProperty, readonly.
scroll_distancia distancia para mover antes de desplazarse theScrollView, en pxel
es. Tan pronto como la distancia que ha recorrido, theScrollView comenzar a despl
azarse, y ningn evento tctil ir a los nios.
Es aconsejable que la base de este valor en el dpi de la pantalla del dispositiv
o de destino.
scroll_distance es un NumericProperty y predeterminados a 20 (pxeles), segn el val
or predeterminado en la configuracin del usuario.
scroll_timeout timeout permite activar el scroll_distancia, en milisegundos. Si
el usuario no ha movedscroll_distancia dentro del tiempo de espera, el desplazam
iento ser desactivado y el evento tctil ir a los nios.
scroll_timeout es un NumericProperty y predeterminados a 55 (milisegundos) de ac
uerdo con el valor predeterminado en la configuracin del usuario.
Ha cambiado en la versin 1.5.0: cambia el valor por defecto de 250 a 55.
558

scroll_a(widget, relleno=10, animar=True) desplaza el visor para garantizar que


el widget est visible, opcionalmente con acolchado y animacin. Si animar es true (
el valor predeterminado), los parmetros de animacin predeterminada ser utilizado. D
e lo contrario, debera ser un diccionario que contiene argumentos para pasar toAn
imation construc- tor.
Nuevo en la versin 1.9.1.
scroll_type define el tipo de desplazamiento que va a utilizar para el contenido
de la scrollview. Las opciones disponibles son:
[ contenido ], [ bar ], [ bar , contenido ].
Nuevo en la versin 1.8.0.
scroll_type es aOptionProperty, por omisin [ contenido ].
scroll_wheel_distancia distancia para mover al desplazarse con la rueda del ratn.
Es aconsejable que la base de este valor en el dpi de la pantalla del dispositi
vo de destino.
Nuevo en la versin 1.8.0.
scroll_wheel_distancia es aNumericProperty , el valor predeterminado es 20 pxeles
.
scroll_x x valor de desplazamiento, entre 0 y 1. Si es 0, el contenido del lado
izquierdo va a tocar el lado izquierdo de la ScrollView. Si 1, el contenido de l
a derecha va a tocar el lado derecho.
Esta propiedad est controlada slo byScrollView ifdo_scroll_x es verdadero.
scroll_x es aNumericProperty y predeterminados a 0.
scroll_y y el valor de desplazamiento, entre 0 y 1. Si es 0, el contenido de la
parte inferior toque el lado inferior de la ScrollView. Si 1, la parte superior
del contenido toque el lado superior.
Esta propiedad est controlada slo byScrollView ifdo_scroll_y es cierto.
scroll_y es aNumericProperty y predeterminados a 1.
update_de_scroll( largs) fuerza la posicin del contenido, segn el valor actual andsc
roll ofscroll_x_y.
Este mtodo se llama automticamente cuando uno de thescroll_x_y desplazamiento, pos

orsize propiedades cambian, o si el tamao del contenido cambia.


vbar devolver una tupla de (posicin, tamao) de la barra de desplazamiento vertical
.
Nuevo en la versin 1.2.0.
La posicin y el tamao son normalizados entre 0-1, y representan un porcentaje de l
a altura scrollview actual. Esta propiedad se utiliza internamente para dibujar
la pequea barra vertical cuando est desplazndose.
vbar es aAliasProperty, readonly.
viewport_size (interno) el tamao del visor interno. Este es el tamao de su nico hij
o en el scrollview.
Configuracin 36.40
Nuevo en la versin 1.0.7.
559

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

las secciones/560 claves en el archivo JSON!


El archivo JSON contiene informacin estructurada para describir la configuracin di
sponible. Aqu est un ejemplo:
[ { "tipo": "ttulo", "ttulo": "Windows" }, { "tipo": "bool", "ttulo": "Pantalla com
pleta", "Desc": "Poner la ventana en la ventana o en pantalla completa", "seccin"
: "grficos", "clave": "pantalla completa", "true": "auto" } ]
Cada elemento de la lista raz representa una configuracin que el usuario puede con
figurar. Slo el "tipo" es obligatorio clave: una instancia de la clase asociada s
er creado y utilizado para el ajuste - otras teclas estn asignadas a propiedades c
orrespondientes de esa clase.
Escriba el ttulo de la clase asociada SettingTitle bool SettingBoolean SettingNum
eric opciones numricas SettingOptions cadena ruta SettingString SettingPath
nuevo en la versin 1.1.0: AddedSettingPath
JSON escriba en el ejemplo anterior, el primer elemento es de tipo "ttulo". Se cr
ear una nueva instancia de SettingTitle y aplicar el resto de los pares clave-val

or a las propiedades de esa clase, es decir, "ttulo":


"Windows" establece thetitle propiedad del grupo "Windows".
Para cargar el ejemplo JSON a instancia, utilice theSettings aSettings.add_JSON_
panel() mtodo.
Realizar automticamente una instancia aSettingsPanel y agregarla toSettings:
desde importar ConfigParser kivy.config
config = ConfigParser() config.read( Myconfig.ini )
s = Configuracin s().add_JSON_panel( Mi panel personalizado , Settings config_cu
stom.json") s.add_JSON_panel( otro panel, config , Settings_test2.json )
# y despus utilizar el s como un widget...
36.40.2 diferentes diseos de panel
un kivyApp puede crear automticamente y mostrar aSettings instancia. Ver_Cls thes
ettings documentacin para obtener detalles sobre cmo elegir qu clase de configuracin
de pantalla.
Varios ajustes pre-construido de widgets disponibles. Todas incluyen exceptSetti
ngsWithNoMenu cerca pero- toneladas desencadenar el evento on_close.
Ajustes: Muestra los ajustes con una barra lateral de la izquierda para cambiar
entre paneles de JSON.
561

SettingsWithSidebar: una subclase ofSettings trivial.


SettingsWithSpinner: Muestra los ajustes con un spinner en la parte superior, qu
e puede utilizarse para cambiar entre paneles de JSON. Como theinterface UsesInt
erfaceWithSpinner_Cls. Este es el comportamiento predeterminado de Kivy 1.8.0.
SettingsWithTabbedPanel: muestra paneles de JSON como fichas individuales en aTa
bbedPanel. Utiliza como theinterface InterfaceWithTabbedPanel_Cls.
SettingsWithNoMenu: muestra un nico panel json, con ninguna forma de cambiar a ot
ros paneles y ningn botn cerrar. Esto hace que sea imposible para el usuario salga
unlessclose_settings() se invalida con otro disparo cerca! Como theinterface Us
esInterfaceWithNoMenu_Cls.
Usted puede construir su propia configuracin de paneles con cualquier diseo que us
ted elija estableciendo Settings.interface_cls. Esto debera ser un widget que mue
stra un panel de ajustes con JSON en cierto modo para cambiar entre paneles. Una
instancia se crear automticamente bySettings.
Widgets de interfaz puede ser cualquier cosa que usted quiera, pero debe tener u
n mtodo add_Panel que recibe recin creado los paneles de configuracin de JSON para
la interfaz de pantalla. Consulte la documentacin de InterfaceWithSidebar para ms
informacin. Opcionalmente pueden enviar un evento CLOSE_en, por ejemplo, si se ha
ce clic en un botn Cerrar. Este evento es utilizado por la configuracin para activ
ar su propio evento on_close.
Para un ejemplo completo y funcional, por favor seekivy/examples/Configuracin/mai
n.py.
classkivy.uix.Settings.settings( args,
kargs) Bases: kivy.uix.boxlayout BoxLayout
Ajustes.UI. Mdulo de control de la documentacin para obtener ms informacin sobre cmo
utilizar esta clase.
Eventos en_config_change: ConfigParser instancia, seccin, clave valueFired cuando
la seccin del par clave-valor de un ConfigParser cambios.
on_closeFired por defecto en el panel cuando se pulsa el botn Cerrar.
interfaz_add() (Interno) crea una instancia de Settings.interface_cls, y lo esta
blece en la interfaz.
Cuando se crean grupos de json, se aadirn a esta interfaz que mostrar al usuario.
add_JSON_panel(title, config, filename=none, data=None) Crear y agregar un newSe
ttingsPanel usando la configuracin config con la defi- nicin archivo JSON.
Active la casilla Crear un panel de JSON en la seccin de documentacin para obtener
ms informacin acerca de formato JSON y el uso de esta funcin.
add_kivy_panel() agrega un panel para configurar Kivy. Este panel kivy acta direc
tamente sobre la configuracin. Sintase libre para incluir o excluir en su configur

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

interface_Cls el widget de clase que se utilizar para mostrar la interfaz grfica p


ara el panel de ajustes.
De forma predeterminada, se muestra un panel de ajustes una vez con una barra la
teral para cambiar entre ellos.
interface_cls es toInterfaceWithSidebar anObjectProperty y valores predeterminad
os.
Ha cambiado en la versin 1.8.0: Si se establece un valor de tipo string, theFacto
ry ser utilizada para resolver la clase.
register_type(Tp, cls) Registrar un nuevo tipo que pueden ser utilizados en la d
efinicin.
classkivy JSON.uix.settings.SettingsPanel( kwargs) Bases: kivy.uix.GridLayout gridl
ayout.
Esta clase se utiliza para establecer los ajustes del panel, para uso con aSetti
ngs instancia o subclase.
config.Config.ConfigParser Akivy instancia. Consulte la documentacin del mdulo par
a obtener ms infor- macin.
get_value(seccin, clave) devuelve el valor de la seccin/clave en theconfig ConfigP
arser instancia. Esta funcin se utiliza bySettingItem para obtener el valor de un
a determinada seccin/clave.
Si no desea utilizar una instancia ConfigParser, quizs desee reemplazar esta func
in.
ajustes ASettings instancia que ser utilizada para disparar el evento change_conf
ig_.
Ttulo Ttulo del panel. El ttulo podr ser reutilizado por theSettings en la barra lat
eral.
classkivy.uix.settings.SettingItem( kwargs) Bases: kivy.uix.floatlayout.FloatLayout
clase base para ajustes individuales (dentro de un panel). Esta clase no puede u
sarse directamente; se utiliza para la aplicacin de las otras clases de configura
cin. Construye una fila con un ttulo/descripcin (izquierda) y un ajuste de control
(derecha).
Buscar atSettingBoolean,SettingNumeric andSettingOptions para ver ejemplos de ut
ilizacin.
Eventos en_releaseFired cuando el tema es tocado y luego liberado. El
contenido (interno) Referencia al widget que contiene el valor real. Tan pronto
como el objeto de contenido est establecido, cualquier otra llamada a add_widget
llamar al contenido.add_widget. Esto se establece automticamente el
contenido est anObjectProperty y predeterminados a Ninguno.
desc Descripcin del ajuste, prestados en la lnea debajo del ttulo.
desc se aStringProperty y predeterminados a Ninguno.
desactivado Indica si esta opcin est deshabilitada. Si el valor es True, todos los
detalles sobre el elemento de ajuste se descartar.
desactivado es aBooleanProperty y su valor por defecto es false.
Tecla de smbolo dentro de laseccin de instancia theConfigParser.
clave es aStringProperty y predeterminados a Ninguno.
panel (interno) Referencia a la SettingsPanel para esta configuracin. No es neces

ario utilizarlo.
563

panel es anObjectProperty y predeterminados a Ninguno.


La seccin de la instancia de token dentro theConfigParser.
Seccin es aStringProperty y predeterminados a Ninguno.
seleccionados_alpha (interno) valor flotante de 0 a 1, que se utiliza para anima
r el fondo cuando el usuario toca el elemento
seleccionado_alpha es aNumericProperty y predeterminados a 0.
Ttulo Ttulo de la configuracin, por defecto
<No title set> . El
ttulo es aStringProperty y predeterminados a <No title set> .
valor valor del token segn theConfigParser instancia. Cualquier cambio a este val
or desencadenar aSettings.en_config_change() evento.
valor es anObjectProperty y predeterminados a Ninguno.
classkivy.uix.settings.SettingString( kwargs) Bases: kivy.uix.settings.SettingItem
Aplicacin de una cadena en la parte superior de aSettingItem. Se visualiza con aL
abel como widget que, cuando se hace clic en l, se abrir con aTextinput aPopup as e
l usuario puede introducir un valor personalizado.
popup (interna) que se utiliza para almacenar el emergente actual cuando se mues
tra.
popup es anObjectProperty y predeterminados a Ninguno.
textinput (interna) que se utiliza para almacenar el textinput actual desde la v
entana emergente y para escuchar los cambios.
Es anObjectProperty textinput y predeterminados a Ninguno.
classkivy.uix.settings.SettingPath( kwargs) Bases: kivy.uix.settings.SettingItem
Ejecucin de una ruta de acceso en la parte superior de aSettingItem. Se visualiza
con aLabel como widget que, cuando se hace clic en l, se abrir una ventana emerge
nte con un FileChooserListView as el usuario puede introducir un valor personaliz
ado.
Nuevo en la versin 1.1.0.
popup (interna) que se utiliza para almacenar el emergente actual cuando se mues
tre.
emergente est anObjectProperty y predeterminados a Ninguno.
textinput (interna) que se utiliza para almacenar el textinput actual desde la v
entana emergente y para escuchar los cambios.
Es anObjectProperty textinput y predeterminados a Ninguno.
classkivy.uix.settings.SettingBoolean( kwargs) Bases: kivy.uix.settings.SettingItem
Ejecucin de un valor booleano en la cima de una SettingItem. Se visualiza con un
interruptor de widget. Por defecto, 0 y 1 se utilizan para valores: puede cambia
rlos por settingvalues.
Valores Los valores utilizados para representar el estado de la configuracin. Si
desea utilizar el "s" y "no" en su instancia ConfigParser:
564

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

Aplicacin de una lista de opciones en la parte superior de aSettingItem. Se visua


liza con aLabel como widget que, cuando se hace clic en l, se abrir aPopup con una
lista de opciones entre las que puede elegir el usuario.
Las opciones Lista de todas las opciones disponibles. Esta debe ser una lista de
elementos de la "cadena". De lo contrario, se bloquear. :)
opciones es aListProperty y predeterminados a [].
popup (interna) que se utiliza para almacenar el emergente actual cuando se mues
tre.
emergente est anObjectProperty y predeterminados a Ninguno.
classkivy.uix.settings.SettingTitle( kwargs) Bases: kivy.uix.label.Label
una simple etiqueta de ttulo, que se utiliza para organizar los ajustes en las se
cciones.
classkivy.uix.settings.SettingsWithSidebar( args,
kargs) Bases: kivy.uix.settings.Se
ttings
Configuracin de un widget que muestra la configuracin de paneles con una barra lat
eral para cambiar entre ellos. Este es el comportamiento predeterminado ofSettin
gs y este widget es una subclase.
classkivy trivial wrapper.uix.settings.SettingsWithSpinner( args,
kwargs) Bases: kiv
y.uix.settings.Settings
Configuracin de un widget que muestra un panel de ajustes una vez con un giro en
la parte superior para cambiar entre ellos.
classkivy.uix.settings.SettingsWithTabbedPanel( args,
kwargs) Bases: kivy.uix.settin
gs.Settings
Configuracin de un widget que muestra paneles de ajustes como pginas aTabbedPanel.
classkivy.uix.settings.SettingsWithNoMenu( args,
kwargs) Bases: kivy.uix.settings.Se
ttings
Configuracin de un widget que muestra un nico panel de ajustes con ningn botn Cerrar
. No aceptar ms de un panel de ajustes. Est diseado para su uso en programas con poc
os ajustes que un conmutador del panel completo no es til.
Advertencia: este panel de configuracin no proporciona un botn Cerrar y, por lo ta
nto, es imposible salir de la pantalla de configuracin, a menos que tambin aadir ot
ras conductas o overridedisplay_settings_settings andclose()().
565

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.

Men (interno) una referencia a la sidebar menu widget.


Men es anObjectProperty y predeterminados a Ninguno.
classkivy.uix.settings.ContentPanel( kwargs) Bases: kivy.uix.scrollview.ScrollView
una clase para mostrar los paneles de configuracin. Se muestra un panel de config
uracin nica en un momento, retomando el tamao y la forma del ContentPanel. Es utili
zada por InterfaceWithSidebar y InterfaceWithSpinner para configuracin de pantall
a.
add_PANEL (panel, nombre uid) Este mtodo es utilizado por los ajustes para aadir n
uevos paneles de visualizacin posible. Cualquier sustitucin de ContentPanel debe i
mplementar este mtodo.
Parmetros panel - Un SettingsPanel. Debe almacenarse y aparece cuando se solicite.
Nombre: El nombre del grupo como una cadena. Puede ser utilizado para representar
el grupo.
- Un nico uid int identificando el grupo. Debe ser almacenado y utilizado para ide
ntificar los paneles al
contenedor de conmutacin (interno) una referencia a la GridLayout que contiene el
panel de ajustes.
contenedor es anObjectProperty y predeterminados a Ninguno.
current_PANEL (interno) una referencia al panel Configuracin actual.
CURRENT_panel es anObjectProperty y predeterminados a Ninguno.
current_uid (interno) una referencia a la UID de la configuracin actual del panel
.
566

current_uid es aNumericProperty y predeterminados a 0.


on_current_uid( args) el uid del panel mostrada actualmente. Cambiar esto cambiar a
utomticamente el dis- desempe el panel.
- Un panel Parametersuid uid. Debe ser utilizado para recuperar y mostrar un pan
el de ajustes que se ha agregado previamente withadd_panel().
Paneles (interno) almacena un diccionario los paneles de configuracin de asignacin
a sus uids.
Paneles es aDictProperty y predeterminados a {}.
36.41
El slider Slider Widget parece un scrollbar. Es compatible con la orientacin hori
zontal y vertical, los valores mn/mx y un valor predeterminado.
Para crear un control deslizante desde -100 a 100 a partir del 25:
de kivy.uix import.slider Slider Slider s =(min=-100, max=100, valor=25)
Para crear un control deslizante vertical:
de kivy.uix import.slider Slider Slider(orientacin s ==vertical )
.classkivy.uix.Slider slider( kwargs) Bases: kivy.uix.widget.Widget
clase para crear un Slider Widget.
Mdulo de control de la documentacin para ms detalles. El
mximo valor mximo permitido forvalue.
max es aNumericProperty y predeterminados a 100. El
mnimo valor mnimo permitido forvalue.
min es aNumericProperty y predeterminados a 0.
Orientacin Orientation del deslizador.
Orientacin es un OptionProperty y predeterminados a horizontal . Puede tomar un
valor vertical o horizontal .
567

Relleno Relleno de la barra deslizante. El relleno se utiliza para la representa


cin grfica y la interaccin. Evita que el cursor vaya fuera de los lmites del cuadro
delimitador deslizante.

en la pantalla. Permite dibujar el cursor predeterminado de 32sp ancho sin tener


el cursor sale del widget. 2 Por defecto, el relleno es de 16sp. El rango del de
slizador se redujo de relleno
relleno es aNumericProperty y predeterminados a 16sp.
Variedad de la corredera en el formato (valor mnimo, valor mximo):
&gt;&gt;&gt; slider Slider =(min=10, max=80) &gt;&gt;&gt; slider.range [10, 80]
&gt;&gt;&gt; slider.range = (20, 100) &gt;&gt;&gt; slider.min 20 &gt;&gt;&gt; sl
ider.max 100
gama de aReferenceListProperty (min, max) propiedades.
El Step Size del deslizador.
Nuevo en la versin 1.4.0.
Determina el tamao de cada intervalo o paso el deslizador tarda entre mn y mx. Si e
l rango de valores no puede ser divisible por el paso el ltimo paso ser coronada p
or slider.max
paso es aNumericProperty y el valor predeterminado es 1.
valor valor actual utilizado por el deslizador.
valor es aNumericProperty y el valor predeterminado es 0.
Valor_valor normalizado dentro therange normalizado (mn./mx.) a 0-1 rango:
&gt;&gt;&gt; slider Slider =(valor=50, Min=0, max=100) &gt;&gt;&gt; slider.valor
50 &gt;&gt;&gt; slider.value_normalizado 0.5 &gt;&gt;&gt; slider.Value = 0 &gt;
&gt;&gt; slider.value_normalizado 0 &gt;&gt;&gt; slider.Value = 100 &gt;&gt;&gt;
slider.valor normalizado_1
tambin se puede utilizar para establecer el valor real sin saber el mnimo y mximo:
&gt;&gt;&gt; slider Slider =(min=0, max=200) &gt;&gt;&gt; slider.value_normaliza
do = 0.5 &gt;&gt;&gt; slider.valor 100 &gt;&gt;&gt; slider.value_normalizado = 1
.
&gt;&gt;&gt; slider.valor 200
568

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

Spinner clase, consulte la documentacin del mdulo para obtener ms informacin.


dropdown_Cls clase utilizada para mostrar la lista desplegable cuando se presion

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

El divisor es un widget que te ayuda a re-tamao es nio/widget layout permitindole r


edimensionar arrastrando a travs de la frontera o doble toque en la frontera. Est
e widget es similar a theScrollView en que permite un solo hijo widget.
Uso:
Splitter Divisor =(sizable_from = Right ) el divisor.add_widget(layout_o_widget
_instance) divisor.min_size = 100 splitter.max_size = 250
para cambiar el tamao de la tira/frontera utilizada para cambiar el tamao: el
divisor.strip_size = 10pt
para cambiar su apariencia: el
divisor.strip_Cls = tu_custom_class
tambin puede cambiar la apariencia de la strip_Cls, que defaults toSplitterStrip,
reemplazando el kv regla en su aplicacin:
<SplitterStrip>:
horizontal: True si auto.parent y self.parent.sizable_from[0] ( t , b ) de lo c
ontrario, False background_normal: Ruta de imagen horizontal normal si el auto
.horizontal ms Ruta de imagen normal vertical background_down: pulsa Ruta de i
magen horizontal si self.Otro horizontal a vertical pulsa ruta imagen
classkivy.uix.Splitter Divisor.( kwargs) Bases: kivy.uix.boxlayout BoxLayout.

Consulte el mdulo documentacin.


Eventos en_press:dispararon cuando el divisor es presionado.
on_release:dispararon cuando el divisor es liberado.
Ha cambiado en la versin 1.6.0: aadido el_PRESS_release y eventos.
fronterizos utilizados para grficos theBorderImage instruccin.
Esta debe ser una lista de cuatro valores: (arriba, derecha, abajo, izquierda).
Leer el BorderImage instrucciones para obtener ms informacin sobre cmo usarlo.
frontera es aListProperty y predeterminados a (4, 4, 4, 4).
571

KEEP_en_parent Si es True, se limitar el divisor para permanecer dentro de su mat


riz widget.
Keep_en_parent es aBooleanProperty y el valor predeterminado es False.
Nuevo en la versin 1.9.0.
max_size especifica el tamao mximo ms all del cual el widget no es redimensionable.
max_size es aNumericProperty y predeterminados a 500PT.
min_size especifica el tamao mnimo ms all del cual el widget no es redimensionable.
min_size es aNumericProperty y predeterminados a 100PT.
rescale_con_parent Si es True, se cambian de tamao automticamente para ocupar la m
isma proporcin de los padres wid- obtener cuando se redimensiona, mantenindose den
tro de min y max_size_size. Mientras estos atributos pueden estar satisfechos, e
sto detiene theSplitter exceda el tamao de la matriz durante el reescalamiento.
rescale_con_parent es aBooleanProperty y el valor predeterminado es False.
Nuevo en la versin 1.9.0.
_considerable desde especifica si el widget es redimensionable. Las opciones son
: izquierda, derecha, superior o inferior de es_considerable anOptionProperty y
predeterminados a izquierda.
strip_Cls Especifica la clase de tamao de tira.
strip_cls es un SplitterStrip kivy.properties.ObjectProperty y por omisin, que es
de typeButton.
Ha cambiado en la versin 1.8.0: Si se establece un valor de tipo string, theFacto
ry ser utilizada para resolver la clase.
strip_size especifica el tamao de la tira de tamao
strp_size es aNumericProperty predeterminados a 10pt
572

36.44 Diseo de pila


nueva en la versin 1.0.5.
TheStackLayout organiza los nios verticalmente u horizontalmente, tantos como el
diseo puede montar. El tamao de los widgets secundarios no tienen que ser uniforme
s.
Por ejemplo, para mostrar los widgets que consiguen progresivamente mayor en anc
hura:
root = StackLayout() for i in range(25):
5, tamao_HINT=(Ninguno, 0.15) root.add_widget(btn)
btn = Botn(text=str(i), width=4
0 + i
.stacklayout classkivy.uix.StackLayout( kwargs) Bases: kivy.uix.layout.Diseo

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

StencilView limita el dibujo de nio widgets a la StencilView del cuadro delimitad


or. Cualquier dibujo fuera del cuadro delimitador se recortar (eliminado).
La StencilView utiliza la galera instrucciones grficas bajo el cap. Proporciona una
forma eficaz para recortar el rea de dibujo de los nios.
Nota: Como con la galera instrucciones grficas, no se pueden apilar ms de 128 galera
-consciente de los widgets.
Nota: StencilView no es un diseo. Por lo tanto, usted tiene que administrar el ta
mao y la posicin de sus hijos directamente. Puede combinar (subclase tanto) un Ste
ncilView y un diseo a fin de lograr un comportamiento del diseo. Por ejemplo:
clase BoxStencil(BoxLayout, StencilView):
pase
classkivy.uix.stencilview.StencilView( kwargs) Bases: kivy.uix.widget.Widget
StencilView clase. Consulte la documentacin del mdulo para obtener ms informacin.
36.46 El interruptor
nuevo en la versin 1.0.7.
El interruptor widget est activo o inactivo, como un interruptor de la luz de mecn
ica. El usuario puede pasar a la izquierda/derecha para activarlo/desactivarlo:
interruptor = Interruptor(activo=True)
para adjuntar una devolucin de llamada que escucha el estado de activacin:

def callback(ejemplo, valor):


print( el interruptor", ejemplo, es , valor)
interruptor = Interruptor() interruptor.bind(activo=callback)
De forma predeterminada, la representacin del widget es esttico. El tamao mnimo requ
erido es de 83x32 pxeles (definido por la imagen de fondo). La imagen est centrada
en el widget.
Todo el widget est activo, no slo la parte grfica. Mientras se desliza sobre el wid
get del cuadro delimitador, funcionar.
575

Nota: Si desea controlar el estado con un solo toque, en lugar de deslizar el de


do, utilice en su lugar.
classkivy theToggleButton.uix.interruptor.Interruptor( kwargs) Bases: kivy.uix.widg
et.Widget
clase Switch. Consulte la documentacin del mdulo para obtener ms informacin.
active indica si el interruptor es activo o inactivo.
activo es aBooleanProperty y su valor por defecto es false.
active_NORMAL_pos (interno) contiene el ndice normalizado de posicin del elemento
mvil dentro del interruptor, en el rango de 0-1.
active_NORMAL_pos es aNumericProperty y predeterminados a 0.
Toque_control (interno) contiene el toque que actualmente interacta con el interr
uptor.
Toque_control es anObjectProperty y predeterminados a Ninguno.
Toque_distance (interno) contiene la distancia entre la posicin inicial del conta
cto y la posicin actual para determinar si el dedo est a la izquierda o a la derec
ha.
Toque_distance es aNumericProperty y por defecto es 0.
36,47 TabbedPanel
nuevo en la versin 1.3.0.
El widget TabbedPanel gestiona diferentes widgets en pestaas, con un rea de encabe
zado de la ficha real botones y un rea de contenido para mostrar el contenido de
la ficha actual.
TheTabbedPanel proporciona una ficha predeterminada.
576

36.47.1 ejemplo sencillo


TabbedPanel
===============
prueba TabbedPanel del widget.
de kivy.app App de importacin.tabbedpanel kivy.uix TabbedPanel importacin de kivy.
lang importar Builder
Builder.load_string("""
<Test>:
tamao_HINT: .5, .5 pos_HINT: { centro_x : .5, center_y : .5} _default_tab: Falso
TabbedPanelItem:
texto: "Primera ficha etiqueta:
texto: "Primer tab content area TabbedPanelItem:
texto: "tab2" BoxLayout:
Etiqueta:
texto: Segundo tab content area Botn:
texto: "Botn que no hace nada" TabbedPanelItem:
texto: "tab3" RstDocument:
texto:
\\n .join(("Hello World", "-----------", "Ests en la tercera ficha."))

""")
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

36.47.2 Personalizar el panel de fichas


puede elegir la posicin en la que se muestran las fichas:
ficha_pos = top_mid
una ficha individual se denomina TabbedPanelHeader. Es un botn especial que conti
ene una propiedad de contenido.
Agregue el primer TabbedPanelHeader y establezca la propiedad itscontent por sep
arado:
TP = TabbedPanel()(texto TabbedPanelHeader th == Tab2 ) tp_widget.add(th)
una ficha individual, representada por un TabbedPanelHeader, necesita que sus co
ntenidos. Este contenido puede ser cualquier widget. Podra ser un diseo con una je
rarqua profunda de widgets, o podra ser un individuo widget, como una etiqueta o u
n botn:
th.content = tu_content_instance
hay un "shared" rea principal de contenido activo en un momento dado, de todas la
s fichas. Su aplicacin es responsable de aadir el contenido de fichas individuales
y para administrarlos, pero no es responsable de los contenidos de la conmutacin
. El panel con fichas gestiona el cambio del contenido principal objeto como por
la accin del usuario.
Existe una ficha predeterminada agregado cuando el panel con fichas es instancia
do. Fichas que agregar individualmente, como anteriormente, se aaden adems de la p
estaa predeterminada. As, dependiendo de sus necesidades y el diseo, tendrs que pers
onalizar la ficha predeterminada:
tp.default_tab_text = "algo especfico para su uso
la ficha predeterminada maquinaria requiere consideracin especial y gestin. En con
secuencia, una ficha_default_EVENT se proporciona para asociar una devolucin de l
lamada:
tp.bind(DEFAULT_tab = mi_default_tab_callback)
Es importante tener en cuenta que por defecto, default_tab_cls es de tipo Tabbed
PanelHeader y por lo tanto tiene las mismas propiedades que las otras fichas.
Desde 1.5.0, ahora es posible deshabilitar la creacin de lapantalla predeterminad
a por settingdo_tab_default_tab en False.
Las fichas y el contenido puede ser eliminado de varias maneras:
tp.remove_widget(widget/pestaas_PANEL_header) o tp.clear_widgets() # Para borrar
todos los widgets en el rea de contenido o tp_tabs.clear() para extraer el Tabbed
PanelHeaders #
para acceder a los nios de la pestaa Panel, utilice contenido.Nios:
tp.content.Los nios
para acceder a la lista de fichas:
tp.tab_list
para cambiar la apariencia del panel con fichas principal Contenido:
578

background_color = (1, 0, 0, .5) #50% borde rojo translcido = [0, 0, 0, 0] fondo_


image = ruta/a/fondo/imagen
para cambiar el fondo de una ficha individual, utilice estas dos propiedades:
ficha_header_instance.background_normal = ruta/a/tab_head/img tab_header_insta
ncia.background_abajo = ruta/a/ficha_head/img_presionado
un TabbedPanelStrip contiene la ficha encabezados. Para cambiar la apariencia de
esta ficha de Gaza, anular el lienzo de TabbedPanelStrip. Por ejemplo, en el kv
idioma:
<TabbedPanelStrip>Canvas:
Color:
rgba: (0, 1, 0, 1) # rectngulo verde:
Tamao: self.tamao pos: self.pos
por defecto el panel con fichas de Gaza toma su imagen de fondo y el color de la
s pestaas del panel back- ground_image y background_color.
.tabbedpanel classkivy.uix.StripLayout( kwargs) Bases: kivy.uix.GridLayout gridlayo
ut.
El diseo principal que se utiliza para albergar toda la tira tabbedpanel incluyen
do las reas en blanco en el caso de las fichas no cubren toda la anchura/altura.
Nuevo en la versin 1.8.0.
ANTECEDENTES_image imagen de fondo que se utilizar para el diseo de la franja Tabb
edPanel.
background_imagen es aStringProperty anddefaults a una imagen transparente.
propiedad de borde para thebackground_image.
frontera es aListProperty y predeterminados a [4, 4, 4, 4]
.tabbedpanel classkivy.uix.TabbedPanel( kwargs) Bases: kivy.uix.gridlayout GridLayo
ut
TabbedPanel.La clase. Consulte la documentacin del mdulo para obtener ms informacin.
background_color, color de fondo, en el formato (r, g, b, a).
background_color es aListProperty y predeterminados a [1, 1, 1, 1].
background_disabled_image imagen de fondo de los principales objetos de contenid
o compartido cuando est desactivado.
Nuevo en la versin 1.8.0.
ANTECEDENTES_disabled_imagen es un StringProperty y predeterminados a A- la lig
a://data/images/defaulttheme/tab .
background_image imagen de fondo de los principales objetos de contenido compart
ido.
background_imagen es un StringProperty y predeterminados a A- la liga://data/im
ages/defaulttheme/ficha".
579

fronterizos utilizados para grficos BorderImage instruccin, utilizado para backgro


und_image.
Puede cambiarse por un fondo personalizado.
Debe ser una lista de cuatro valores: (arriba, derecha, abajo, izquierda). Leer
el BorderImage instrucciones para ms informacin.
es la frontera aListProperty y predeterminados a (16, 16, 16, 16) contenido Este
es el objeto holding (current_ficha de contenido se agrega a este), el contenid
o de la ficha actual. Para escuchar los cambios en el contenido de la ficha actu
al, debe enlazar a cur- alquiler_tabs contenido. El
contenido es propiedad anObjectProperty y predeterminados a None .
current_tab Enlaces a la ficha activa o seleccionada actualmente.
Nuevo en la versin 1.4.0.
_tab anAliasProperty actual es de slo lectura.
default_tab contiene la ficha predeterminada.
Nota: Para mayor comodidad, la ficha predeterminada proporcionada automticamente
se elimina cuando usted cambie default_tab a otra cosa. A partir de 1.5.0, este

comportamiento se ha extendido a todas las de- fallo_tab para mantener la consis


tencia y no slo la proporciona automticamente.
default_tab es anAliasProperty.
default_tab_Cls Especifica la clase que se va a utilizar para el diseo de la pest
aa predeterminada.
Nuevo en la versin 1.4.0.
Advertencia: default_tab_Cls debe ser una subclase de TabbedPanelHeader
default_tab_cls es anObjectProperty y predeterminados a TabbedPanelHeader. Si es
tablece un valor de tipo string, theFactory ser utilizada para resolver la clase.
Ha cambiado en la versin 1.8.0: TheFactory resolver la clase si una cadena est esta
blecido.
default_tab_content mantiene el contenido de la ficha predeterminada.
Default_tab_content es anAliasProperty.
default_tab_text especifica el texto que se muestra en la cabecera de la pestaa p
redeterminada.
Default_tab_texto es aStringProperty y predeterminados a default .
tab_default_ficha especifica si un default_tab cabeza es proporcionada.
Nuevo en la versin 1.5.0.
Hacer_default_tab es aBooleanProperty y predeterminados a True .
strip_fronterizos para ser utilizado onstrip_image.
Nuevo en la versin 1.8.0.
580

strip_frontera es aListProperty y predeterminados a [4, 4, 4, 4].


strip_imagen de fondo de la imagen de la tira de pestaas.
Nuevo en la versin 1.8.0.
strip_imagen es aStringProperty y predeterminados a una imagen vaca.
Switch_A(cabecera) el interruptor del cabezal a un panel especfico.
tab_height especifica la altura de la cabecera de pestaa.
tab_height es aNumericProperty y predeterminados a 40.
tab_List Lista de todas la ficha encabezados.
tab_list es anAliasProperty y es de slo lectura.
tab_pos especifica la posicin de las fichas en relacin con el contenido. Puede ser
uno de los siguientes: left_Top, Left_media_Izquierda, Abajo, Arriba, Izquierda
,_top_top_mid, Derecha, Derecha, Derecha_top_mid_Derecha, Abajo, Abajo, Izquierd
a_Bot- tom_mid, inferior derecha._
tab_pos es anOptionProperty y predeterminados a izquierda . top_
tab_width especifica el ancho de la cabecera de pestaa.
tab_width es aNumericProperty y predeterminados a 100.
.tabbedpanel classkivy.uix.TabbedPanelContent( kwargs) Bases: kivy.uix.floatlayout.
FloatLayout
la clase.
classkivy TabbedPanelContent.uix.tabbedpanel.TabbedPanelHeader( kwargs) Bases: kivy
.uix.ToggleButton togglebutton.
una base para la ejecucin de un jefe de panel con fichas. Un botn destinado a ser
utilizado como una partida/Ficha de un TabbedPanel widget.
Puede utilizar este widget TabbedPanelHeader para agregar una nueva pestaa para u
n TabbedPanel.
Contenido Contenido a ser cargado cuando esta ficha se selecciona encabezado. El
contenido es anObjectProperty y predeterminados a Ninguno.
classkivy.uix.tabbedpanel.TabbedPanelItem( kwargs) Bases: kivy.uix TabbedPanelHeade
r.tabbedpanel.
Esta es una clase de conveniencia que proporciona una cabecera de tipo TabbedPan
elHeader y lo vincula con el contenido automticamente. Facilitando as que simpleme
nte hacer lo siguiente en kv idioma:
<TabbedPanel>:
...Otros ajustes

TabbedPanelItem:
BoxLayout:
Etiqueta:
texto: Segundo tab content area Botn:
texto: "Botn que no hace nada"
581

Nuevo en la versin 1.5.0.


classkivy.uix.tabbedpanel.TabbedPanelStrip( kwargs) Bases: kivy.uix.GridLayout grid
layout.
Una tira destinados a ser utilizados como base para la partida/ficha. Esto no cu
bre las reas en blanco en el caso de las fichas no cubren toda la anchura/altura
del TabbedPanel(utilizar StripLayout).
_panel con fichas Vincular al grupo que la ficha de Gaza es parte.
_panel con fichas es anObjectProperty y predeterminados a Ninguno .
.tabbedpanel exceptionkivy.uix.TabbedPanelException Bases: Excepcin
la clase TabbedPanelException.
36.48 La entrada de texto
nuevo en la versin 1.0.4.
TheTextInput widget proporciona un cuadro de texto editable.
Unicode, multiline, navegacin por cursor, la seleccin y el portapapeles caractersti
cas son compatibles.
TheTextInput utiliza dos diferentes:
Sistemas de coordenadas (x, y) - Las coordenadas en pxeles, que se utiliza princi
palmente para la representacin en pantalla.
(fila, columna) - ndice de cursor en caracteres / tuberas, utilizados para la sele
ccin y el movimiento del cursor.
Ejemplo de uso de 36.48.1
para crear un multilineTextInput (la tecla Intro se aade una lnea nueva):
De kivy.uix.textinput TextInput importacin textinput(texto TextInput == Hola mund
o )
para crear un singlelineTextInput, establezca la propiedad multiline.TextInput e
n Falso (la tecla Intro se desenfoque de la TextInput y emiten un on_text_val
idate" evento):
582

def on_enter(ejemplo, valor):


print( user pulsado INTRO ), instancia
textinput(texto TextInput == Hola mundo , multiline=false).bind textinput(on_tex
t_validate=on_enter)
El texto del componente textinput se almacena en itsTextInput.propiedad text. Pa
ra ejecutar una devolucin de llamada cuando el texto cambia:
def on_text(ejemplo, valor):
print( el widget , instancia: , tienen valor)
textinput TextInput =().bind textinput(text=on_texto)
Puede establecer thefocus a un Textinput, lo que significa que el cuadro de entr
ada ser resaltado y el foco del teclado ser solicitada:
textinput TextInput =(focus=True)
La textinput est desenfocado si la tecla "escape" es presionado, o si otro widget
pide al teclado.
Puede enlazar una llamada para el enfoque propiedad para obtener notificaciones
de los cambios de foco:
def en_foco(ejemplo, valor):
si el valor:

print( centrados en el usuario , instancia) else:


print( user de desenfoque, instancia)
textinput TextInput =().bind textinput(focus=en_foco)
, desde el cual theTextInput SeeFocusBehavior hereda, para ms detalles.
36.48.2 Seleccin
La seleccin se actualiza automticamente cuando cambia la posicin del cursor. Usted
puede obtener el texto seleccionado actualmente desde theTextInput.selection_pro
piedad text.
36.48.3 El filtrado
puede controlar que el texto puede ser aadido a la TextInput sobrescribiendo Text
Input.insert_text(). Cada cadena que est escrito, pegado o por cualquier otro med
io insertado en theTextInput pasa a travs de esta funcin. Sobrescribindolo puede re
chazar o cambiar los caracteres no deseados.
Por ejemplo, escribir slo caracteres en maysculas:
clase CapitalInput(TextInput):
def insert_text(self, substring, desde_undo=false):
s = subcadena.UPPER() devuelven super(CapitalInput, auto).insert_text(s, desde_u
ndo=de_undo)
o para slo permitir flotantes (0 - 9 y un solo perodo):
583

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

ADVERTENCIA: Cuando se cambia una propiedad TextInput que requiere re-dibujar, p


or ejemplo, modificando el texto, las actualizaciones ocurren en el siguiente ci
clo de reloj y no al instante. Esto podra causar cambios en la TextInput que ocur
ren entre la modificacin y el siguiente ciclo se ig- nored, o utilizar los valore
s anteriores. Por ejemplo, despus de una actualizacin a thetext, cambiando el curs
or en el mismo marco del reloj se mover con el texto anterior y lo ms probable es
que terminen en una posicin correcta. La solucin es programar las actualizaciones
que se producen en el siguiente ciclo de reloj utilizando Schedule_once().
Nota: La seleccin se cancelar cuando se centra TextInput. Si necesita mostrar sele
ccin cuando est enfocada, TextInput debe retrasar (utiliza el reloj.schedule) la l
lamada a las funciones para seleccionar texto (select_all, seleccione_text).
Ha cambiado en la versin 1.9.2: Antecedentes_disabled_active ha sido eliminado.
Ha cambiado en la versin 1.9.0: ahora TextInput hereda de FocusBehavior. keyboard
_mode, show_keyboard(),ocultar_keyboard(),focus(), eintroduzca_type se han elimi
nado ya que ahora se hereda fromFocusBehavior.
Ha cambiado en la versin 1.7.0: on_doble_Tap, sobre_triple_toca y ON_quad_touch e
ventos agregados.
allow_copy si decide permitir copiar el texto.
Nuevo en la versin 1.8.0.
allow_copy es aBooleanProperty y su valor predeterminado es True.
auto_automticamente sangra sangra de texto multilnea.
Nuevo en la versin 1.7.0.
auto_guin se aBooleanProperty y su valor por defecto es false.
background_active la imagen de fondo de la TextInput cuando est en foco.
Nuevo en la versin 1.4.1.
ANTECEDENTES_active es un StringProperty y predeterminados a A- la liga://data/
images/defaulttheme/textinput_active .
background_color color actual del fondo, en (r, g, b, a) formato.
Nuevo en la versin 1.2.0.
ANTECEDENTES_color es aListProperty y predeterminados a [1, 1, 1, 1] (blanco).
background_disabled_normal la imagen de fondo de la TextInput cuando est desactiv
ado.
Nuevo en la versin 1.8.0.
ANTECEDENTES_disabled_normal es un StringProperty y predeterminados a A- la lig
a://data/images/defaulttheme/textinput_disabled .
background_normal la imagen de fondo de la TextInput cuando no est en el foco.
Nuevo en la versin 1.4.1.
ANTECEDENTES_normal es un StringProperty y predeterminados a A- la liga://data/
images/defaulttheme/textinput .
585

fronterizos utilizados forBorderImage instrucciones grficas. Utiliza withbackgrou


nd_NORMAL_background y activo. Puede utilizarse para un fondo personalizado.
Nuevo en la versin 1.4.1.
Debe ser una lista de cuatro valores: (arriba, derecha, abajo, izquierda). Lea l
a instruccin BorderImage para obtener ms informacin sobre cmo usarlo.
frontera es aListProperty y predeterminados a (4, 4, 4, 4).
cancel_selection() Cancelar la seleccin actual (si la hubiera).
copia(datos= ) Copie el valor proporcionado en el argumento actual de los datos
en el portapapeles. Si no hay datos de tipo string se convertir en una cadena. S
i no se proporcionan los datos luego de la seleccin actual si est presente es copi
ado.
Nuevo en la versin 1.8.0.
cursor de tupla (fila, columna), los valores que indica la posicin actual del cur
sor. Puede establecer una nueva (fila, columna) si desea mover el cursor. El rea

de desplazamiento se actualizar automticamente para garantizar que el cursor es vi


sible dentro del viewport.
Cursor
cursor_parpadeen anAliasProperty. Esta propiedad se utiliza para hacer parpadear
el cursor grfico. El valor delcursor_parpadeo es Automation- camente calculado.
Si se establece un valor en l no tendr ningn impacto.
cursor_parpadeo es aBooleanProperty y su valor por defecto es false.
cursor_col columna actual del cursor
cursor_col es anAliasProperty a cursor[0], slo lectura.
cursor_color color actual del cursor, en (r, g, b, a) formato.
Nuevo en la versin 1.9.0.
cursor_color es aListProperty y predeterminados a [1, 0, 0, 1].
cursor_INDEX(cursor=None) Volver al ndice del cursor en el texto/valor.
cursor_OFFSET() obtiene el desplazamiento x del cursor en la lnea actual.
cursor_Pos La posicin actual del cursor, en (x, y).
cursor_pos es anAliasProperty, slo lectura.
cursor_fila fila actual del cursor
cursor_fila es anAliasProperty a cursor[1], es de slo lectura.
Corte() copia la seleccin actual al portapapeles luego eliminarlo de TextInput.
Nuevo en la versin 1.8.0.
586

_delete(seleccin de_undo=false) Eliminar la seleccin de texto actual (si la hubier


a).
disabled_color_primer plano actual del color de primer plano cuando est desactiva
do, en (r, g, b, a) formato.
Nuevo en la versin 1.8.0.
_disabled_color de primer plano es aListProperty y predeterminados a [0, 0, 0, 5
] (50% trans- padre negro).
do_retroceso(from_undo=False, mode= bkspc ) Hacer retroceder la operacin desde la
posicin actual del cursor. Esta accin puede hacer varias cosas:
Eliminar la seleccin actual si est disponible.
retirar la anterior char y mueve el cursor hacia atrs.
No hacer nada, si estamos al principio.
do_cursor_movimiento(action=False, control, alt=false) Mueva el cursor con relac
in a su posicin actual. La accin puede ser uno de:
_cursor izquierda: mover el cursor a la izquierda _cursor derecha: mover el cursor
a la derecha cursor_up: mueva el cursor sobre la lnea anterior _cursor abajo: muev
e el cursor a la lnea siguiente cursor_home: mover el cursor al principio de la lne
a actual cursor_final: mover el cursor al final de la lnea actual cursor_pgup: move
r una "pgina" antes de cursor_pgdown: mover una "pgina" despus adems, el comportamien
to de determinadas acciones pueden ser modificados:
control + cursor_izquierda: mover el cursor una palabra a la izquierda control +
cursor_derecha: mover el cursor una palabra a la derecha control + cursor_up: de
splazarse una lnea hacia arriba control + cursor_down: desplcese hacia abajo una lne
a control + cursor_home: ir al inicio de la control de texto + cursor_end: ir al f
inal del texto alt + cursor_up: desplazamiento en lnea(s) alt + cursor_down: la(s)
lnea(s) de cambio hacia abajo ha cambiado en la versin 1.9.1.
Hacer_redo() hacen rehacer la operacin.
Nuevo en la versin 1.3.0.
Esta accin re-hace cualquier comando que se ha hecho de la ONU por hacer_undo/ctr
l+z. Esta funcin se llama automticamente cuando ctrl+r se pulsan teclas.
_undo() deshacer la operacin.
Nuevo en la versin 1.3.0.
Esta accin de la ONU hace las ediciones que se han realizado desde la ltima llamad
a a reset_undo(). Esta funcin se llama automticamente cuando ctrl+z se pulsan tecl
as.

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().
587

Advertencia: Dependiendo de su proveedor de texto, el archivo de fuente puede se


r ignorado. 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
, utilice una fuente como freesans.ttf que tiene el glifo.
nombre_font es aStringProperty y predeterminados a Roboto .
font_size tamao de fuente del texto en pxeles.
font_size es aNumericProperty y predeterminados a 10.
_color de primer plano actual del color de primer plano, en (r, g, b, a) formato
.
Nuevo en la versin 1.2.0.
_color de primer plano es aListProperty y predeterminados a [0, 0, 0, 1] (negro)
.
get_cursor_de_index (ndice) devolver el (fila, columna) del cursor de texto ndice.
get_cursor_de_xy(x, y) devolver el (fila, columna) del cursor de una (x, y) posi
cin.
handle_image_Imagen izquierda se utiliza para mostrar la palanca izquierda de la
TextInput para la seleccin.
Nuevo en la versin 1.8.0.
handle_image_izquierda es una StringProperty y predeterminados a A- la liga://d
ata/images/defaulttheme/selector_left .
handle_image_imagen central utilizado para mostrar el controlador central de la
TextInput para posicionar el cursor.
Nuevo en la versin 1.8.0.
handle_image_Oriente es un StringProperty y predeterminados a A- la liga://data
/images/defaulttheme/selector_Oriente".
handle_image_imagen derecha se utiliza para mostrar la palanca derecha de la Tex
tInput para la seleccin.
Nuevo en la versin 1.8.0.
handle_image_derecha es un StringProperty y predeterminados a A- la liga://data
/images/defaulttheme/selector_right .
Sugerencia_text el texto de sugerencia del widget.
Indica si el texto es
y el enfoque es falsa.
Nuevo en la versin 1.6.0.
Ha cambiado en la versin 1.9.2.
Sugerencia_text aAliasProperty y predeterminados a .
Sugerencia_text_color color actual de la pista_text text, en (r, g, b, a) format
o.
Nuevo en la versin 1.6.0.
588

sugerencia_text_color es aListProperty y predeterminados a [0.5, 0.5, 0.5, 1.0]


(gris).
input_filter filtra la entrada en funcin del modo especificado, si no ninguno. Si
ninguno, no se aplica ningn filtro.
Nuevo en la versin 1.9.0.
input_filter es una ObjectProperty y predeterminados a Ninguno. Puede ser una de
ninguno, int (cadena), o flotar (string) o un ejecutable. Si es int , slo s

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

es para seleccionar la palabra alrededor de la posicin actual del cursor. Anular


esta para proporcionar un comportamiento diferente. Como alternativa, puede enla
zar a este evento para proporcionar funcionalidad adicional.
on_quad_touch() Este evento se distribuye cuando cuatro dedos estn tocando dentro
del componente TextInput. El valor predeterminado sea- havior es seleccionar to
do el texto. Anular esta para proporcionar un comportamiento diferente. Como alt
ernativa, puede enlazar a este evento para proporcionar funcionalidad adicional.
on_triple_toca() Este evento se distribuye cuando un triple punteo ocurre dentro
del componente TextInput. El comportamiento predeterminado es seleccionar la lne
a alrededor de la posicin actual del cursor. Anular esta para proporcionar un com
portamiento diferente.
Como alternativa, puede enlazar a este evento para proporcionar funcionalidad ad
icional. El
relleno el relleno del texto: [el relleno, el relleno_Left_top_right, el relleno
, el relleno_Bottom].
padding tambin acepta un argumento dos [formulario relleno, el relleno_HORIZONTAL
_vertical] y un argumento forma [relleno].
Ha cambiado en la versin 1.7.0: Cambio de AliasProperty con VariableListProperty.
padding es aVariableListProperty y predeterminados a [6, 6, 6, 6].
x_relleno relleno horizontal del texto: [_left, Relleno Relleno
Relleno_right]._x tambin acepta un argumento [formulario relleno_horizontal].
padding_x es un VariableListProperty y predeterminados a [0, 0]. Esto puede ser

cambiado por el tema actual.


Obsoleto desde la versin 1.7.0: Usepadding.
padding_y relleno vertical del texto: [el relleno, el relleno_top_Bottom].
padding_y tambin acepta un argumento [formulario_padding
padding vertical]._y es un VariableListProperty y predeterminados a [0, 0]. Esto
puede ser cambiado por el tema actual.
Obsoleto desde la versin 1.7.0: Usepadding.
contrasea Si es True, el widget mostrar sus personajes como el conjunto de caracte
res inpassword_mask.
Nuevo en la versin 1.2.0. La
contrasea es aBooleanProperty y su valor por defecto es false.
password_mask establece el carcter que se usa para enmascarar el texto whenpasswo
rd es True.
Nuevo en la versin 1.9.2.
password_mask es aStringProperty y predeterminados a " ".
Paste() Insertar texto desde systemClipboard en theTextInput en la posicin actual
del cursor.
Nuevo en la versin 1.8.0.
Si readonly True, el usuario no podr modificar el contenido de un componente text
input.
Nuevo en la versin 1.3.0.
readonly se aBooleanProperty y el valor predeterminado es False.
590

replace_crlf automticamente sustituir CRLF en LF.


Nuevo en la versin 1.9.1.
replace_crlf es aBooleanProperty y su valor predeterminado es True.
reset_undo() restablecer las listas de deshacer y rehacer de la memoria.
Nuevo en la versin 1.3.0.
scroll_x x el valor de desplazamiento de la vista. El desplazamiento se actualiz
a automticamente cuando se mueve el cursor o el texto cambiado. Si no hay ninguna
entrada del usuario, el desplazamiento_x y desplazamiento_y propiedades pueden
cambiarse.
scroll_x es aNumericProperty y predeterminados a 0.
scroll_y y el valor de desplazamiento de la vista. Seescroll_x para obtener ms in
formacin.
scroll_y es aNumericProperty y predeterminados a 0.
select_all() Seleccione todo el texto que se muestra en este componente TextInpu
t.
Nuevo en la versin 1.4.0.
Seleccionar_text(Start, End) Seleccione una porcin de texto que se muestran en es
te componente TextInput.
Nuevo en la versin 1.4.0.
Parmetros startIndex de textinput.text desde donde iniciar la seleccin endIndex.te
xto de textinput hasta que la seleccin debe mostrarse
selection_color color actual de la seleccin, en (r, g, b, a) formato.
Advertencia: El color debe tener siempre un componente de "alfa" inferior a 1, y
a que la seleccin se dibuja despus del texto.
selection_color es aListProperty y predeterminados a [0.1843, 0.6549, 0.8313, .5
].
selection_si la seleccin est en curso o completa, esta propiedad representa el cur
sor ndice donde comenz la seleccin.
Ha cambiado en la versin 1.4.0: seleccin de es_anAliasProperty y predeterminados a
Ninguno, readonly.
texto_Seleccin seleccin de contenido actual.
selection_texto es aStringProperty y predeterminados a , readonly.
selection_a si la seleccin est en curso o completa, esta propiedad representa el c

ursor ndice donde comenz la seleccin.


Ha cambiado en la versin 1.4.0: seleccin_a es un miembro AliasProperty y predeterm
inados a Ninguno, readonly.
591

sugerencia_texto muestra una sugerencia de texto al final de la lnea actual. Esta


caracterstica es til para el texto del autocom- pletion, y no aplicar validacin (a
ceptar el texto propuesto sobre entrar...).
Esto tambin puede ser utilizado por el IME para configurar la palabra actual que
est siendo editado.
Nuevo en la versin 1.9.0.
Sugerencia_text es aStringProperty y predeterminados a .
tab_width Por defecto, cada pestaa ser sustituido por cuatro espacios en el widget
de texto de entrada. Puede establecer un valor inferior o superior.
tab_width es aNumericProperty y predeterminados a 4.
texto Texto del widget.
Creacin de un simple hola mundo:
widget = TextInput(text= Hola mundo )
si desea crear el widget con una cadena Unicode, utilice:
widget = TextInput(text=u My cadena unicode") el
texto se anAliasProperty.
use_burbuja indica si el cortar/copiar/pegar burbuja es utilizado.
Nuevo en la versin 1.7.0.
use_burbuja es aBooleanProperty y su valor predeterminado es True en mobile OS,
False en el escritorio del sistema operativo.
use_maneja indica si los controladores de seleccin aparecen.
Nuevo en la versin 1.8.0.
use_maneja se aBooleanProperty y su valor predeterminado es True en mobile OS, F
alse en el escritorio- so superior.
write_tab si el tabulador debe desplazarse a la siguiente widget o si se debe in
troducir una ficha en la TextInput. Si el valor es True una ficha ser escrito, de
lo contrario, el foco se desplazar a la siguiente widget.
Nuevo en la versin 1.9.0.
write_tab es aBooleanProperty y su valor predeterminado es True.
149,48 botn de alternar
el widget ToggleButton acta como una casilla de verificacin. Cuando toque/haga cli
c en l, el estado alterna entre normal y DOWN (en contraposicin a unbotn que slo
es down mientras se mantiene pulsada).
Los botones de alternar tambin pueden agruparse para hacer botones de radio - slo
un botn de un grupo puede estar en un estado de down . El nombre de grupo puede
ser una cadena o cualquier otro objeto de Python hashable:
592

Btn1 = ToggleButton(text= MALE , grupo= sex ) Btn2 = ToggleButton(text= hembra",


grupo= sex , state= down ) Btn3 = ToggleButton(text="mixtos", grupo= sex )
slo uno de los botones se pueden down /activadas al mismo tiempo.
Para configurar el control ToggleButton, puede utilizar las mismas propiedades q
ue se pueden utilizar para la clase aButton.
classkivy.uix.ToggleButton togglebutton.( kwargs) Bases: kivy.uix.behaviors.toggleb
utton.ToggleButtonBehavior, kivy.uix.button.Button
Botn de alternar el mdulo de clase, vea la documentacin para ms informacin.
36.50 Vista de rbol
nuevo en la versin 1.0.4.
TreeView es un widget que se usa para representar una estructura de rbol. Actualm

ente es muy bsica, apoyando un conjunto de caractersticas mnimas.


36.50.1 Introduccin
un TreeView se rellena con TreeViewNode instancias, pero no puede usar un TreeVi
ewNode di- rectamente. Debe combinar con otro widget, tales asLabel, botn o inclu
so su propio widget.
El TreeView siempre crea un nodo raz predeterminado, basado onTreeViewLabel.
TreeViewNode es una clase de objeto que contiene propiedades necesarias para ser
vir como un nodo de rbol. Ampliar TreeViewNode para crear tipos de nodo personali
zado para usar con aTreeView.
Para construir su propia subclase, siga el patrn de TreeViewLabel que combina una
etiqueta y un TreeViewNode, produciendo aTreeViewLabel para uso directo en un T
reeView ejemplo.
Para usar la clase TreeViewLabel, puede crear dos nodos conectados directamente
a la raz:
tv = TreeView() tv.add_node(TreeViewLabel(text= Mi primer elemento") tv.add_node
(TreeViewLabel(text= My segundo tema"),
o bien, crear dos nodos conectados a un primer:
tv = TreeView() N1 = tv.add_node(TreeViewLabel(text= Item 1 ))
593

tv.add_node(TreeViewLabel(text= SubItem 1 ), n1) tv.add_node(TreeViewLabel(text=


SubItem 2 ), n1)
Si tiene una estructura de rbol de gran tamao, quiz tendra una funcin de utilidad par
a rellenar la vista de rbol:
def rellenar_tree_view(tree_view, principal nodo):
si el padre es Ninguno:
tree_node = tree_view.add_node(TreeViewLabel(text=node node_[ id ], is_open=true
)) otra cosa:
tree_node = tree_view.add_node(TreeViewLabel(text=node node_[ id ], is_open=True
), padre)
por nio_nodo en nodo[ nios ]:
Rellenar_tree_view(rbol rbol_view_child_node, nodo de
rbol) = { node_id : 1 , nios : [{ node_id : 1.1 , nios : [{ node_id : 1.1.1 ,
nios : [{ node_id : 1.1.1.1 , nios : []}]}, { node_id : 1.1.2 , nios : []}, {
node_id : 1.1.3 , nios : []}]}, { node_id : 1.2 , nios : []}]}
clase(FloatLayout TreeWidget):
def __init__(self,
kwargs):
super(TreeWidget, auto).__init__( kwargs)
tv = TreeView(root_options=dict(text= tree"), hide_root=False, guin_level=4)
Rellenar_tree_view(tv, Ninguno, rbol)
self.add_widget(TV)
la raz de widget en la vista de rbol est abierta por defecto y tiene texto definido
como root . Si desea cambiar esto, puede utilizar theTreeView.root_propiedad o
ptions. Esto va a pasar opciones al widget de raz:
tv = TreeView(root_options=dict(text= My etiqueta raz")
36.50.2 crear tu propio widget
para el nodo de un tipo de nodo, el botn Combinar aButton y aTreeViewNode como si
gue:
clase TreeViewButton(Botn, TreeViewNode):
pase
usted debe saber que, para un nodo dado, slo thesize_HINT_x ser honrado. El ancho
asignado para el nodo depender del ancho actual del TreeView y el nivel del nodo.
Por ejemplo, si un nodo est en el nivel 4, el ancho asignado ser:
594

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.

Quite_NODE (NODO) quita un nodo del rbol.


Nuevo en la versin 1.0.7.
Nodo parmetros: instancia de aTreeViewNodeNode quitar del rbol. Si el nodo isroot,
no se quita.
root el nodo raz.
De forma predeterminada, el nodo raz es un widget TreeViewLabel con el texto roo
t . Si desea cambiar las opciones predeterminadas pasa a la creacin de widgets, u
tilice la propiedad raz_options:
treeview TreeView =(root_options={ texto : "directorio raz", "font_size : 15})
root_opciones cambiarn las propiedades de instancia theTreeViewLabel. Sin embargo
, no puede cambiar la clase usada para el nodo raz todava.
root es anAliasProperty y predeterminados a Ninguno. Es de slo lectura. Sin embar
go, el contenido del widget puede cambiarse.
root_options opciones de raz predeterminado para pasar a root widget. Propiedad S
eeroot para ms informacin sobre el uso de root_options.
root_options es anObjectProperty y predeterminados a {}.
Seleccione_NODE (NODO) Seleccione un nodo en el rbol.
596

selected_node byTreeView seleccionado.select_node() o al tacto.


seleccionados_node es aAliasProperty y predeterminados a Ninguno. Es de slo lectu
ra.
toggle_NODE (NODO) alternar el estado del nodo (abrir/contrada).
exceptionkivy.uix.treeview.TreeViewException Bases: EXCEPTION
excepcin por errores theTreeView.
classkivy.uix.treeview.TreeViewLabel( kwargs) Bases: kivy.uix.label.Label,kivy.uix.
treeview.TreeViewNode
combina aLabel como para crear aTreeViewLabel aTreeViewNode y que puede ser util
izado como un nodo de texto en el rbol.
Consulte la documentacin del mdulo para obtener ms informacin.
classkivy.uix.treeview.TreeViewNode( kwargs) Bases: builtins.object
TreeViewNode clase, utilizada para crear una clase de nodo para un objeto TreeVi
ew.
color_color de fondo seleccionado del nodo cuando el nodo seleccionado.
color_seleccionada es aListProperty y predeterminados a [.1, .1, .1, 1].
Incluso_color, color de fondo, incluso de nodos cuando el nodo no est seleccionad
a.
bg_color es ans aListProperty predeterminados a [.5, .5, .5, .1].
Es_leaf Boolean para indicar si este nodo es una hoja o no. Se utiliza para ajus
tar la grfica de repre- tation.
is_leaf es aBooleanProperty y su valor predeterminado es True. Se establece auto
mticamente en False cuando el nio es agregado.
Es_loaded Boolean para indicar si este nodo ya est cargado o no. Esta propiedad sl
o se utiliza si utiliza theTreeView carga asincrnica.
is_loaded se aBooleanProperty y su valor por defecto es false.
is_open Boolean para indicar si este nodo est abierto o no, en caso de que exista
n nodos secundarios. Esto se usa para ajustar la representacin grfica.
Advertencia: Esta propiedad se establece automticamente por el TreeView. Puede le
er pero no escribir.
is_open es aBooleanProperty y su valor por defecto es false.
Es_selected Boolean para indicar si este nodo est seleccionado o no. Este ajuste
se utiliza la representacin grfica.
Advertencia: Esta propiedad se establece automticamente por el TreeView. Puede le
er pero no escribir en l.
597

is_seleccionada es aBooleanProperty y su valor por defecto es false.


nivel nivel del nodo.
nivel es aNumericProperty y predeterminados a -1.
No_seleccin usado Boolean para indicar si la seleccin del nodo est permitido ornot.
No_seleccin es aBooleanProperty y su valor por defecto es false.
Los nodos lista de nodos. La lista de nodos es diferente de la lista de los nios.
Nodos Un nodo en la lista representa un nodo en el rbol. Un elemento de la lista
de nios representa el widget asociado al nodo.
Advertencia: Esta propiedad se establece automticamente por el TreeView. Puede le
er pero no escribir.
Los nodos es aListProperty y predeterminados a [].
raro esta propiedad se establece mediante el widget TreeView automticamente y es
de slo lectura.
Tod es aBooleanProperty y su valor por defecto es false.
odd_color de fondo color impar de nodos cuando el nodo no est seleccionada.
odd_color es aListProperty y predeterminados a [1., 1., 1., 0.].
parent_node nodo primario. Este atributo es necesario porque el padre puede ser
ninguno cuando el nodo no se muestra.
Nuevo en la versin 1.0.7.
parent_node es anObjectProperty y predeterminados a Ninguno.
36,51 Video
widget TheVideo se utiliza para visualizar archivos de vdeo y secuencias. Dependi
endo de su proveedor bsico de Video, plataforma y plugins, usted ser capaz de repr
oducir diferentes formatos. Por ejemplo, el proveedor slo admite vdeo pygame MPEG1
en Linux y OSX. GStreamer es ms verstil y puede leer muchos contenedores y codecs
de video como MKV, OGV, AVI, MOV, FLV (si los plugins de gstreamer correctos es
tn instalados). Aplicacin OurVideoBase se utiliza bajo el cap.
La carga de vdeo es asincrnico: muchas propiedades no estn disponibles hasta que se
carga el vdeo (cuando la textura es creado):
def sobre_position_change(ejemplo, valor):
print( la posicin en el video es , valor) en def_DURATION_change(ejemplo, valor):
print( La duracin del vdeo es , vdeo) el vdeo = Video(fuente= PandaSneezes.avi ) vid
eo.bind(position=en_position_change, duracin=on_DURATION_change)
classkivy.uix.video.video( kwargs) Bases: kivy.uix imagen.image.
598

Video Class. Consulte la documentacin del mdulo para obtener ms informacin.


Duracin La duracin del vdeo. La duracin predeterminada a -1, y se establece una dura
cin real cuando se carga el vdeo. La
duracin es aNumericProperty y predeterminados a -1.
eos Boolean Indica si el vdeo ha terminado de jugar o no (alcanz el final de la se
cuencia).
eos es aBooleanProperty y
cargado el valor predeterminado es False. Boolean Indica si el vdeo est cargado y
listo para la reproduccin o no.
Nuevo en la versin 1.6.0.
cargar es aBooleanProperty y su valor por defecto es false.
Opciones Opciones para pasar a vdeo de creacin de objetos bsicos.
Nuevo en la versin 1.0.4.
Opciones es ankivy.properties.ObjectProperty y predeterminados a {}.
juego obsoleto desde la versin 1.4.0: Usestate en su lugar.
Boolean Indica si se est reproduciendo el vdeo o no. Puede iniciar/detener el vdeo
mediante el establecimiento de esta propiedad:
# comience a reproducir el vdeo a vdeo de creacin = Video(source= Movie .mkv, jugar
=True)

# crear el vdeo, e iniciar despus el vdeo = Video(source= Movie ) #.mkv y posterior


mente.Play video
play es aBooleanProperty = True y el valor predeterminado es False.
Obsoleto desde la versin 1.4.0: Usestate. La
posicin del vdeo entre 0 y duracin. La posicin predeterminada a -1 y se establece un
a verdadera posicin cuando se carga el vdeo.
posicin es aNumericProperty y predeterminados a -1.
Buscar(Porcentaje) Cambiar la posicin de un porcentaje de la duracin. El porcentaj
e debe ser un valor entre 0-1.
Advertencia: Llamar seek() antes de que el vdeo se ha cargado no tiene ningn impac
to.
Nuevo en la versin 1.2.0.
Estado de cadena, indica si se va a reproducir, pausar o detener el vdeo:
599

# comience a reproducir el vdeo a vdeo de creacin = Video(source= Movie .mkv, estad


o= play )
# crear el vdeo, e iniciar despus el vdeo = Video(source= Movie .mkv) # y luego vid
eo.state = Play de
estado es anOptionProperty y predeterminados a Stop .
descargar() Descargar el vdeo. La reproduccin se detendr.
Nuevo en la versin 1.8.0.
volumen Volumen del vdeo, en el rango de 0-1. 1 significa volumen completo, 0 sig
nifica silencio.
Volumen est aNumericProperty y predeterminados a 1.
36.52 reproductor de vdeo
nuevo en la versin 1.2.0.
El reproductor de vdeo widget puede utilizarse para reproducir vdeo y permiten al
usuario controlar la reproduccin/pausa, volumen y posicin. El widget no se puede p
ersonalizar mucho debido al complejo conjunto de numerosos widgets de base.
600

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

player = VideoPlayer(source= myvideo.avi , el estado= Jugar , Opciones={ allow_s


tretch : True})
36.52.3 final-de-stream comportamiento
puede especificar qu sucede cuando se termina la reproduccin del video pasando un
eos (final de stream) directiva para la clase underlyingVideoBase. eos puede ser
uno de Stop , Pausa o Loop y Stop a los valores predeterminados. Por eje
mplo, para hacer un bucle con el vdeo:
player = VideoPlayer(source= myvideo.avi , el estado= Jugar , Opciones={ eos :
Loop })
Nota: la propiedad EOS de la clase VideoBase es una cadena que especifica el fin
al de la secuencia de comportamiento. Esta propiedad difiere de la eos propiedad
es de theVideoPlayer andVideo clases, cuya propiedad eos es simplemente un valor
booleano que indica que se ha llegado al final del archivo.
classkivy.uix.videoplayer.VideoPlayer( kwargs) Bases: kivy.uix..GridLayout gridlayo
ut
clase VideoPlayer. Consulte la documentacin del mdulo para obtener ms informacin.
allow_fullscreen de forma predeterminada, puede hacer doble toque en el vdeo para
que sea completa. Establezca esta propiedad a False para evitar este comportami
ento.
allow_fullscreen aBooleanProperty es el valor predeterminado es True.
anotaciones si se establece, ser utilizado para la lectura de verificacin. anotaci
ones
anotaciones es aStringProperty y predeterminados a .
Duracin La duracin del vdeo. La duracin predeterminada a -1 y se ajusta a la duracin
real cuando se carga el vdeo. La
duracin es aNumericProperty y predeterminados a -1.
fullscreen Cambiar a vista de pantalla completa. Esto debe ser usada con cuidado
. Cuando se activa, el widget se elimina de su padre, retirar a todos los nios de
la ventana y lo agregar a ella.
Cuando se aplica unset fullscreen, todos los hijos anteriores son restauradas y
el widget se restaura a su padre anterior.
Advertencia: la re-agregar operacin no importa la posicin del ndice de los nios dent
ro de los padres.
fullscreen es aBooleanProperty y su valor por defecto es false.
image_cargando imagen filename se utiliza cuando el vdeo se est cargando.
image_cargando aStringProperty y predeterminados a data/images/image-loading.gi
f .
image_overlay_play nombre del archivo de imagen utilizado para mostrar una super
posicin "play" cuando el vdeo an no ha comenzado.

Imagen 602_overlay_play es un StringProperty y predeterminados a "Atlas://data/i


mages/defaulttheme/player-play-overlay .
image_pause nombre del archivo de imagen utilizado para el botn "Pause".
image_pause es un StringProperty y predeterminados a "Atlas://data/images/defaul
ttheme/media-pausa de reproduccin .
image_play nombre del archivo de imagen utilizado para el botn "Play".
image_play es aStringProperty y predeterminados a "Atlas://data/images/defaultth
eme/reproduccin multimedia--start".
image_stop nombre del archivo de imagen utilizado para el botn "Stop".
image_stop es aStringProperty y predeterminados a "Atlas://data/images/defaultth
eme/reproduccin multimedia--stop .
image_volumehigh nombre del archivo de imagen utilizado para el icono de volumen
cuando el volumen es alto.

image_volumehigh es un StringProperty y predeterminados a "Atlas://data/images/d


efaulttheme/audio-volume-alta .
image_volumelow nombre del archivo de imagen utilizado para el icono de volumen
cuando el volumen es bajo.
image_volumelow es un StringProperty y predeterminados a "Atlas://data/images/de
faulttheme/audio-volume-bajo .
image_volumemedium nombre del archivo de imagen utilizado para el icono de volum
en cuando el volumen es medio.
image_volumemedium es un StringProperty y predeterminados a "Atlas://data/images
/defaulttheme/audio-volume-media .
image_volumemuted Nombre del archivo de imagen utilizado para el icono de volume
n cuando el volumen se silencia.
image_volumemuted es un StringProperty y predeterminados a "Atlas://data/images/
defaulttheme/audio-volume-silenciado".
opciones parmetros opcionales pueden ser pasados a la aVideo instancia con esta p
ropiedad.
Las opciones aDictProperty y predeterminados a {}.
juego obsoleto desde la versin 1.4.0: Usestate en su lugar.
Boolean Indica si se est reproduciendo el vdeo o no. Puede iniciar/detener el vdeo
mediante el establecimiento de esta propiedad:
# iniciar la reproduccin del vdeo en la creacin video = VideoPlayer(source= Movie .
mkv, jugar=True)
# crear el vdeo, y comenzar despus vdeo = VideoPlayer(source= Movie ) #.mkv y poste
riormente.Play video
play es aBooleanProperty = True y el valor predeterminado es False.
603 La

posicin del vdeo entre 0 andduration. La posicin predeterminada a -1 y se establece


en la posicin real cuando se carga el vdeo.
posicin es aNumericProperty y predeterminados a -1.
Buscar(Porcentaje) Cambiar la posicin de un porcentaje de la duracin. El porcentaj
e debe ser un valor entre 0-1.
Advertencia: Llamar seek() antes de que el vdeo est cargado no tiene ningn efecto.
El
origen de la fuente de vdeo para leer.
Fuente es aStringProperty y predeterminados a .
Ha cambiado en la versin 1.4.0.
Estado de cadena, indica si se va a reproducir, pausar o detener el vdeo:
# iniciar la reproduccin del vdeo en la creacin video = VideoPlayer(source= Movie .
mkv, estado= play )
# crear el vdeo, y comenzar despus vdeo = VideoPlayer(source= Movie .mkv) # y luego
video.state = Play de
estado es anOptionProperty y predeterminados a Stop .
THUMBNAIL Thumbnail del video para mostrar. Si ninguno, VideoPlayer intentar enco
ntrar la miniatura desde thesource + ".png".
miniatura aStringProperty y predeterminados a .
Ha cambiado en la versin 1.4.0.
volumen Volumen del vdeo en el rango de 0-1. 1 significa el volumen completo y 0
significa silencio.
Volumen est aNumericProperty y predeterminados a 1.
classkivy.uix.videoplayer.VideoPlayerAnnotation( kwargs) Bases: kivy.uix.label.Etiq
ueta
anotacin clase usada para crear etiquetas.
Teclas adicionales estn disponibles:
bgcolor: [r, g, b, a] - el color de fondo del cuadro de texto bgsource: filename
- imagen de fondo utilizado para el fondo del cuadro de texto de la frontera: (n
, e, s, w) - frontera utilizada para la imagen de fondo Duracin La duracin de la a

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

la instanciacin de teclado El teclado virtual es controlado por la configuracin. C


ontrolar el teclado y teclado_mode_layout en el objeto de configuracin.
Si usted tiene la intencin de crear un widget que requiere un teclado, no utilice
el teclado virtual directamente, pero prefieren usar el mejor mtodo disponible e
n la plataforma. Verificar therequest_keyboard(), mtodo de la ventana.
Si desea un diseo especfico cuando solicite el teclado, usted debe escribir algo c
omo esto (desde 1.8.0, el valor numrico.json puede estar en el mismo directorio q
ue su principal.py):
teclado = window.request_keyboard( auto._keyboard_Close, Auto) si keyboard.widge
t:
vkeyboard = auto._keyboard.widget.layout vkeyboard = numrico .json
.vkeyboard classkivy.uix.VKeyboard( kwargs) Bases: kivy.uix.dispersin.dispersin
VKeyboard es un teclado en pantalla con soporte multitouch. Su diseo es totalment
e personalizable y puede cambiar entre distribuciones disponibles mediante un bo
tn en la parte inferior derecha del widget.
Eventos en_key_down: keycode, internas modifiersFired cuando el teclado recibi un
evento Key down (tecla).
606

on_key_up: keycode, internas modifiersFired cuando el teclado recibi un evento cl


ave (Key release).
_layouts disponibles Diccionario de todos los diseos disponibles. Las claves son
la Id. de diseo, y el valor es el JSON (trans- lacionadas en un objeto de Python)
.
disponible_layouts es aDictProperty y predeterminados a {}.
Antecedentes El nombre de archivo de la imagen de fondo.
antecedentes y valores predeterminados aStringProperty toatlas://data/images/def
aulttheme/vkeyboard_fondo.
background_frontera frontera de la imagen de fondo. Utilizado para controlar the
border propiedad del fondo.
background_frontera es aListProperty y predeterminados a [16, 16, 16, 16] fondo_
color, color de fondo, en el formato (r, g, b, a). Si se establece un fondo, el
color ser combinado con la textura de fondo.
background_color es aListProperty y predeterminados a [1, 1, 1, 1].
background_disabled Nombre de archivo de la imagen de fondo cuando vkeyboard est
desactivada.
Nuevo en la versin 1.8.0.
ANTECEDENTES_disabled es un StringProperty y predeterminados a atlas://data/imag
es/defaulttheme/vkeyboard__disabled_background.
callback Callback puede ajustarse a una funcin que se llamar si el VKeyboard es ce
rrada por el usuario.
objetivo es instancia anObjectProperty y predeterminados a Ninguno.
Chocan_margin(x, y) hacer un ensayo de colisin y devolver True si el (x, y) est de
ntro del margen de vkeyboard.
acoplado indican si el VKeyboard est acoplado en la pantalla o no. Si se cambia,
usted debe manualmente callsetup_mode() o de lo contrario no tendr ningn impacto.
Si el VKeyboard es creado por la ventana, el modo acoplado se ajusta automticamen
te a la configuracin utilizando el teclado_mode token en la [seccin] kivy.
acoplado es aBooleanProperty y su valor por defecto es false.
key_background_clave de color, el color de fondo en el formato (r, g, b, a). Si
se establece una clave de fondo, el color ser combinado con la textura de fondo c
lave.
key_color_fondo aListProperty y predeterminados a [1, 1, 1, 1].
key_background_filename abajo de la llave de la imagen de fondo para usar cuando
un toque est activo en el widget.
key_background_StringProperty abajo y predeterminados a atlas://data/images/defa
ulttheme/vkeyboard_key_down.

key_background_filename normal de la tecla imagen de fondo para utilizar cuando


no toca estn activos en el widget.
key_background_normal una StringProperty y predeterminados a atlas://data/images
/defaulttheme/vkeyboard_key_normal.
607

key_borde borde de imagen clave. Utilizado para controlar theborder propiedad de


la clave.
key_frontera es aListProperty y predeterminados a [16, 16, 16, 16] key_disabled_
background_filename normal de la tecla imagen de fondo para utilizar cuando no t
oca estn activas en el widget y vkeyboard est desactivada.
Nuevo en la versin 1.8.0.
key_disabled_background_normal una StringProperty y predeterminados a atlas://da
ta/images/defaulttheme/vkeyboard_disabled_key_normal.
key_margen margen clave, utilizados para crear espacio entre las teclas. El marg
en est compuesto de cuatro valores en pxeles:
key_margin = [Arriba, derecha, abajo, izquierda]
key_margen es aListProperty y predeterminados a [2, 2, 2, 2] Diseo Diseo para util
izar en el VKeyboard. Por defecto, ser la disposicin establecida en la configuracin
, de acuerdo con el teclado_layout en la [seccin] kivy.
Ha cambiado en la versin 1.8.0: Si el diseo es un nombre de archivo .json, se carg
an y se aaden al disponer_layouts.
Diseo es aStringProperty y predeterminados a Ninguno. El
layout_path La ruta desde los que se leen los diseos.
Diseo y predeterminados a aStringProperty <kivy_data_dir>/teclados/ Margen Margen
_hint hint, utilizado como separacin entre teclas de teclado de fondo y contenido
. El margen est compuesto de cuatro valores, entre 0 y 1:
Margen_HINT = [Arriba, derecha, abajo, izquierda]
El margen consejos ser multiplicada por la anchura y la altura, de acuerdo a su p
osicin.
Margen_hint es aListProperty y predeterminados a [.05, .06, .05, .06] actualizar
(force=false) (interno) recrear todo el widget y grficos segn el diseo seleccionado
.
setup_mode( largs) Llamar a este mtodo cuando se desea reajustar el teclado segn opc
iones:acoplado o no, con attachedtarget o no:
Ifdocked es True, se callsetup_mode_dock() Ifdocked es falsa, que callsetup_mode_f
ree() Sintase libre para sobrecargar estos mtodos para crear nuevos comportamiento
s de posicionamiento.
setup_mode_dock( largs) Configuracin del teclado en modo acoplado.
Dock restablecer el modo desactivar la rotacin, traslacin, rotacin y escala. Escala
y posicin se ajustar automticamente para conectar el teclado a la parte inferior de
la pantalla.
608

Nota: No se debe llamar a este mtodo directamente, usesetup_mode() en su lugar.


setup_mode_free() Configuracin del teclado en el modo libre.
El modo libre est diseado para permitir al usuario controlar la posicin y la orient
acin del teclado.
El nico verdadero uso es para un entorno multiusuario, pero usted puede encontrar
otras formas de utilizarlo. Si atarget est establecido, se colocar el vkeyboard p
or debajo del objetivo.
Nota: No se debe llamar a este mtodo directamente, usesetup_mode() en su lugar.
Meta widget asociado al VKeyboard. Si se establece, ser utilizada para enviar los
eventos del teclado.

Si el modo de VKeyboard es "gratis", tambin se utiliza para ajustar la posicin ini


cial.
objetivo es instancia anObjectProperty y predeterminados a Ninguno.
Widget
TheWidget 36.54 clase clase es la clase base necesarios para la creacin de Widget
s. Este widget clase fue diseado con un par de principios en mente:
Orientado a eventos
Widget interaccin est construida en la cima de los eventos que se producen. Si una
propiedad cambia, el widget puede responder a los cambios en el _ <propname>
la devolucin de llamada. Si no cambia nada, no se puede hacer nada.
Ese es el objetivo principal de la clase theProperty.
La separacin de preocupaciones (el widget y su representacin grfica)
Widgets no tienen un mtodo draw(). Esto es hecho a propsito: La idea es que le per
miten crear su propia representacin grfica fuera del widget clase. Obviamente, ust
ed puede todava utilizar todas las propiedades disponibles para hacer eso, as que
su representacin refleja adecuadamente el estado actual del widget. Cada widget t
iene su ownCanvas que puede usar para dibujar. Esta separacin permite Kivy para e
jecutar su aplicacin en una manera muy eficiente.
Cuadro delimitador / Colisin
a menudo desea saber si un punto determinado est dentro de los lmites de su widget
. Un ejemplo sera un Button Widget donde usted slo desea desencadenar una accin cua
ndo el botn s es realmente tocado. Para ello, puede utilizar thecollide_point(), mt
odo que devolver True si el punto que pase a se encuentra en el interior del ejealineado cuadro delimitador definido por la posicin y tamao del widget. Si un simp
le AABB no es suficiente, puede reemplazar el mtodo para realizar las comprobacio
nes de colisin con formas ms complejas, por ejemplo un polgono. Tambin puede comprob
ar si un widget colisiona con otro widget withcollide_widget().
Tambin tenemos algunos valores predeterminados y los comportamientos que debe ten
er en cuenta:
No es aLayout AWidget: no va a cambiar la posicin o el tamao de sus hijos. Si se d
esea controlar el posicionamiento o el tamao, utilice aLayout.
El tamao predeterminado de un widget es (100, 100). Esto slo se modificar si el pad
re es aLayout. Por ejemplo, si agrega aLabel como inside unbotn, la etiqueta no h
eredarn el tamao o la posicin del botn, ya que el botn no es un diseo: es solo otro wi
dget.
El tamao predeterminado_hint es (1, 1). Si el padre es aLayout, entonces el tamao
del widget ser el tamao del diseo principal.
609

En_TOUCH_down(),_TOUCH_move(),_TOUCH_up() no realiza ningn tipo de colisiones. Si


usted desea saber si el contacto est dentro de tu widget, usecollide_point().
36.54.1 Uso de propiedades
cuando usted lea la documentacin, todas las propiedades se describen en el siguie
nte formato:
<name>Es un <property class>Y predeterminados a <default value>.
Por ejemplo:
texto es aStringProperty y predeterminados a .
Si desea ser notificado cuando el atributo pos cambia, es decir cuando el widget
se mueve, puede enlazar su propia funcin callback como este:
def callback_pos(ejemplo, valor):
print( el widget , instancia "movido", value)
=() Widget wid wid.bind(pos=callback_pos)
Leer ms acerca de las propiedades.
36.54.2
Widgets bsicas de dibujo dibujo admiten una serie de instrucciones que se pueden
usar para personalizar el aspecto de los widgets y layouts. Por ejemplo, para di
bujar una imagen de fondo para tu widget, puede hacer lo siguiente:

def redibujar(self, args):


self.bg_rect.size = self.size self.bg_rect.pos = self.pos
widget widget =() con widget.Canvas:
widget.bg_rect = rectngulo(source="cubierta.jpg", pos=auto.pos, size=self.size) w
idget.bind(pos=redraw, size=redibujar)
para dibujar un fondo kv:
Widget:
canvas:
rectngulo:
Fuente: "cubierta.jpg" tamao: self.tamao pos: self.pos
estos ejemplos slo tocan la superficie. Consulte la documentacin grfica kivy.Para o
btener ms informacin.
Widget de 36.54.3 tocar la propagacin de eventos
cuando se captura eventos tctiles entre varios widgets, a menudo necesita ser con
sciente del orden en el que estos eventos se propagan. En Kivy, eventos afloran
desde el primer nio hacia arriba a travs de los otros nios. Si un widget tiene hijo
s, el evento se transmite a travs de sus nios antes de ser transmitidos a la widge
t despus de l.
610

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:

Reloj.Schedule_once(lambda dt: self.en_TOUCH_down(touch, true)) volver super(Miw


idget, auto).en_TOUCH_down(touch)
611

36.54.4 Uso ofWidget.centro,Widget.derecha, andWidget.arriba


Un error comn cuando se utiliza una de las propiedades calculadas tales asWidget.
derecho es usarlo para hacer un widget siga su padre con un Kv como regla de der
echo: self.parent.derecha. Consideremos, por ejemplo:
FloatLayout:
id: layout width: 100 Widget:
id: wid derecha: layout.derecha
(errnea) de la expectativa es que esta regla asegura que el derecho de la mujer s
er siempre independientemente del derecho de diseo - que es wid.derecha y layout.d
erecho siempre ser el mismo. En realidad, esta regla slo dice que "cuando el derec
ho de diseo cambia, wid es derecho se establece ese valor". La diferencia es que
mientras el layout.La derecha no cambia, WID.derecho puede ser cualquier cosa, i
ncluso un valor que lo hacen diferente.
Concretamente, para el KV cdigo anterior, considere el siguiente ejemplo:
&gt;&gt;&gt; print(layout.derecha, WID.derecho) (100, 100) &gt;&gt;&gt; wid.x =
200 &gt;&gt;&gt; print(layout.derecha, WID.derecho) (100, 300)
Como puede verse, inicialmente estn en sintona, sin embargo, cuando cambiamos wid.
x estn fuera de sincronizacin porque layout.derecho no se modifica y no se activa
la regla.
La manera correcta de hacer el widget siga su derecho del padre es useWidget.pos
_HINT. Si en lugar de la derecha: layout.derecho hicimos pos_HINT: { right : 1},
entonces los widgets a la derecha siempre estar establecido en el derecho de los
padres a cada actualizacin de diseo.
classkivy.uix.widget.Widget( kwargs) Bases: kivy.uix.widget
widget WidgetBase.class. Consulte la documentacin del mdulo para obtener ms informa
cin.
Eventos en_TOUCH_down:dispararon cuando un nuevo toque evento ocurre en_TOUCH_mo
ve:dispararon cuando ya existe un toque se mueve en_TOUCH_up:dispararon cuando y
a existe un toque desaparece
Advertencia: Agregando un __del__ Mtodo de una clase derivada de widget con Pytho
n anteriores a 3.4 deshabilitar la recoleccin de basura automtica para las instanci
as de esa clase. Esto es debido a que el Widget clase crea los ciclos de referen
cia, evitando as la recoleccin de basura.
Ha cambiado en la versin 1.0.9: todo lo relacionado con las propiedades del event
o ha sido trasladado a la EventDispatcher. Propiedades de eventos ahora pueden s
er usados cuando contructing una clase simple con- fuera subclassingWidget.
Ha cambiado en la versin 1.5.0: El constructor acepta ahora en_ argumentos para en
lazar automticamente callbacks a propiedades o eventos, como en el lenguaje Kv.
add_widget(widget, index=0, lona=None) Aadir un nuevo widget como un nio de este w
idget.
Parmetros: WidgetWidget widget para agregar a nuestra lista de nios.
ndice: int, por defecto 0ndice para insertar el widget en la lista.
Observe que el valor por defecto de 0 significa que el widget se inserta al prin
cipio de la lista y por lo tanto se dibuja encima
612

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.

Puede ser un "antes" y "despus" o ninguno predeterminado para el lienzo.


Nuevo en la versin 1.9.0.
&gt;&gt;&gt; de kivy.uix.Button Botn Importar &gt;&gt;&gt; de kivy.uix.slider Sli
der de importacin &gt;&gt;&gt; root = Widget() &gt;&gt;&gt; root.add(Button_widge
t()) &gt;&gt;&gt; slider Slider =() &gt;&gt;&gt; root.add_widget(deslizante)
= ninguno de lienzo lienzo del widget.
El lienzo es un objeto Graphics que contiene todas las instrucciones de dibujo p
ara la representacin grfica del widget.
No hay propiedades generales para el widget de clase, tales como color de fondo,
para que el diseo sea sencillo y pobre. Algunas clases derivadas, tales como bot
ones, aadir esa comodidad propiedades pero generalmente el desarrollador es respo
nsable de la ejecucin de los grficos rep- resentacin para un widget personalizado d
esde el suelo hacia arriba. Ver el widget clases derivadas para los patrones a s
eguir y ampliar.
SeeCanvas para obtener ms informacin acerca del uso.
Centro posicin del widget.
Centro de aReferenceListProperty (centro_x,centro_y) propiedades.
centro_x X posicin central del widget.
centro_x es anAliasProperty de (x +anchura / 2.)
centro_y y la posicin central del widget.
centro_y es anAliasProperty de (y +altura / 2).
Los nios lista de hijos de este widget.
Nios es aListProperty y predeterminados a una lista vaca.
Utilice Aadir_widget() yretire_widget() para manipular la lista de nios. No ma- ni
pulate los nios lista directamente a menos que sepa lo que est haciendo.
clear_widgets(nios=None) Quitar todos (o el especificado)hijos de este widget. Si
el argumento es nios speci- zos, debera ser una lista (o lista filtrada) de los
nios de la actual widget.
Ha cambiado en la versin 1.8.0: Los nios argumento puede utilizarse para especific
ar los hijos que desee quitar.
cls clase del widget, utilizado para el peinado.
Chocan_point(x, y) Comprobar si un punto (x, y) se encuentra dentro del widget e
je alineado del cuadro delimitador.
613

parmetros numericx x: Posicin del punto (en la ventana coordenadas) y: numericy po


sicin del punto (en la ventana coordenadas) ReturnsA bool. True si el punto est de
ntro del cuadro delimitador, FALSE de lo contrario.
&gt;&gt;&gt; Widget(pos=(10, 10), size=(50, 50).colisionan_point(40, 40) Verdade
ro
colisionan_widget(wid) Comprobar si otro widget choca con este widget. Esta func
in realiza un eje alineado interseccin del cuadro delimitador test por defecto.
Parmetros: Widget classWidget wid para chocar con.
Returnsbool. True si el otro widget choca con este widget, FALSE de lo contrario
.
&gt;&gt;&gt; wid = Widget(size=(50, 50) &gt;&gt;&gt; wid2 = Widget(size=(50, 50)
, pos=(25, 25) &gt;&gt;&gt; wid.colisionan_widget(wid2) Verdadero &gt;&gt;&gt; w
id2.pos = (55, 55) &gt;&gt;&gt; wid.colisionan_widget(wid2) falso
desactivado Indica si este widget puede interactuar con la entrada o no.
Nota:
1.Nio Widgets, cuando se aade a un widget de discapacitados, se desactivar automtica
mente.
2.Habilitar/Deshabilitar un padre activa/desactiva todos sus hijos.
Nuevo en la versin 1.8.0.
desactivado es aBooleanProperty y su valor por defecto es false.
export_para_png(filename, args) guarda una imagen del widget y sus hijos en forma
to png en el nombre de archivo especificado. Funciona retirando el widget canvas

desde su matriz, la representacin a anFbo y callingsave().


Nota: La imagen slo incluye este widget y sus hijos. Si desea incluir widgets en
otras partes del rbol, deber callexport_para_png() de su padre comn, o usar screens
hot() para capturar toda la ventana.
Nota: La imagen se guardar en formato png, debe incluir la extensin del nombre de
archivo.
Nuevo en la versin 1.9.0.
get_Parent_window() devuelven la ventana principal.
ReturnsInstance de la ventana principal. Puede ser aWindowBase orWidget.
get_root_window() devuelven la ventana raz.
ReturnsInstance de la ventana raz. Puede ser aWindowBase orWidget.
get_window_matrix(x=0, y=0) calcular la matriz de transformacin para convertir co
ordenadas entre la ventana y el widget.
614

parmetros x: la flotacin, por defecto 0traduce la matriz en el eje x.


y: flotacin, predeterminado a 0traduce la matriz en el eje Y.
altura Height del widget.
altura es aNumericProperty y predeterminados a 100.
Advertencia: Tenga en cuenta que la propiedad Height est sujeto a la lgica de diseo
y que esto no ha ocurrido todava en el momento de el widget __init__ Mtodo.
id identificador nico del widget en el rbol.
id es aStringProperty y predeterminados a Ninguno.
Advertencia: Si theid ya se utiliza en el rbol, se producir una excepcin.
IDS es un diccionario de identificadores definidos en su idioma de kv. Esto slo s
e rellenar si utiliza identificadores en su kv cdigo de idioma.
Nuevo en la versin 1.7.0.
ids es aDictProperty y predeterminados a un dict vaco {}.
Theids estn pobladas por cada nivel raz definicin de widget. Por ejemplo:
# en kv <MyWidget@Widget>:
: mi id_widget Label:
id: etiqueta_widget widget:
id: inner_widget Label:
id: inner_label:
id TextInput: text_input OtherWidget:
id: otros_widget
<OtherWidget@Widget>Id: otros_widget Label:
id: otros_label TextInput:
id: otros_textinput,
entonces, en python:
&gt;&gt;&gt; widget = Miwidget() &gt;&gt;&gt; print(widget.id) { otros_widget :
<weakproxy at 041CFED0 to OtherWidget at 041BEC38>, "inner_widget : <weakproxy a
t 04137EA0 to Widget at 04138228>, "inner_label : <weakproxy at 04143540 to Labe
l at 04138260>, etiqueta_widget : <weakproxy at 04137B70 to Label at 040F97A0>,
text_input : <weakproxy at 041BB5D0 to TextInput at 041BEC00>}
615

&gt;&gt;&gt; print(widget.[ id ] other_widget.id) { other_textinput": <weakproxy


at 041DBB40 to TextInput at 041BEF48>, other_label : <weakproxy at 041DB570 to
Label at 041BEEA0>} &gt;&gt;&gt; print(widget.[ id ] label_widget.id) {}
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. La
opacidad Opacidad del widget y todos sus hijos.
Nuevo en la versin 1.4.1.
La opacidad atributo controla la opacidad del widget y sus hijos. Tenga cuidado,
es un atributo acumulativa: el valor se multiplica por la opacidad global actua
l y el resultado se aplica al contexto actual de color.
0.2 = 0.1.
por ejemplo, si el padre tiene una opacidad de 0,5 y un nio tiene una
opacidad de 0.2, la opacidad real del nio ser 0,5
entonces, la opacidad es aplicado por el sombreado como:
vec4(1.0, 1.0, 1.0, opacidad);
frag_color = color
opacidad es aNumericProperty y predeterminados a 1.0.
Los padres de sus padres de este widget. El padre de un widget se establece cuan
do el widget se agrega a otro widget y unset cuando el widget es eliminado de su
padre
parent es anObjectProperty y predeterminados a Ninguno.
pos Posicin del widget.
pos es aReferenceListProperty de (x,y) propiedades.
pos_SUGERENCIA sugerencia de posicin. Esta propiedad le permite ajustar la posicin
del widget dentro de sus padres, en el por ciento de diseo (similar al tamao_HINT
).
Por ejemplo, si desea establecer la parte superior del widget para estar a la al
tura del 90% de su matriz diseo, puede escribir:
widget widget =(pos_HINT={ TOP : 0,9})
616

las teclas x , Right y centro_x usar el ancho de padres. Las teclas y , to


p y cen- ter_y usar la altura de padres.
Ver diseo de flotacin para futura referencia.
Nota: pos_hint no es utilizada por todos los diseos. Consulte la documentacin de l
a disposicin en cuestin para ver si admite pos_HINT.
pos_hint es anObjectProperty conteniendo un dict.
proxy_ref devolver una referencia proxy al widget, es decir, sin crear una refer
encia al widget. Ver weakref.proxy para ms informacin.
Nuevo en la versin 1.7.2.
remove_widget(widget) quitar un widget de los hijos de este widget.
Parmetros: WidgetWidget widget para quitar de la lista de nuestros hijos.
&gt;&gt;&gt; de kivy.uix.Button Botn Importar &gt;&gt;&gt; root = Widget() &gt;&g
t;&gt; = Botn() &gt;&gt;&gt; root.add_widget(Button) &gt;&gt;&gt; root.remove_wid
get(Button)
derecha la posicin derecha del widget.
derecha es anAliasProperty de (x +anchura). El
tamao del widget.
tamao de aReferenceListProperty (anchura, altura) propiedades.
size tamao_hint hint.
size_hint es un ReferenceListProperty de (tamao_HINT_x, tamao_HINT_y)- cin adecuada
.
Seesize_HINT_x para obtener ms informacin.
tamao_HINT_x x tamao sugerencia. Representa cunto espacio debera utilizar el widget
en la direccin del eje X con relacin a su ancho del padre. Slo las clases andWindow
theLayout hacer uso de la pista.

El tamao_hint es utilizado por los diseos para dos propsitos:


Cuando el diseo considera widgets en su propio en lugar de hacerlo en relacin a su
s otros hijos, el tamao_HINT_x es una proporcin directa del progenitor ancho, norm
almente entre 0,0 y 1,0. Por ejemplo, un widget con tamao_HINT_x=0.5 en verticalBoxLay ocupar la mitad del ancho del BoxLayout o un widget en un FloatLayout con
tamao_HINT_x=0.2 tendr un 20% de la anchura FloatLayout. Si el tamao_hint es mayor
que 1, el widget ser mayor que el primario.
Cuando varios widgets pueden compartir una fila de un diseo, como en un BoxLayout
horizontal, sus anchos ser su tamao_HINT_x como una fraccin de la suma del tamao del
widget_sugerencias. Por ejemplo, si el tamao_HINT_xs (0.5, 1.0, 0.5), el primer
artilugio tendr una anchura del 25% de la anchura de padres.
tamao_HINT_x es aNumericProperty y predeterminados a 1.
617

size_HINT_y tamao y sugerencia.


tamao_HINT_y es aNumericProperty y predeterminados a 1.
Seesize_HINT_x para obtener ms informacin, pero con anchuras y alturas intercambia
dos.
A_local(x, y, en relacin=false) transformar coordenadas locales de padres. Seerel
ativelayout para ms detalles sobre los sistemas de coordenadas.
Parmetros relativos: bool, por omisin FalseChange a true si desea traducir co- ord
enadas a widget relativa coordenadas.
A_parent(x, y, en relacin=false) transformar coordenadas locales a las coordenada
s principales. Seerelativelayout para ms detalles sobre los sistemas de coordenad
as.
Parmetros relativos: bool, por omisin FalseChange a true si desea traducir rel- ad
ores posiciones desde un widget para su matriz de coordenadas.
A_widget(x, y, en relacin=false) convierte la coordenada determinada desde la ven
tana a las coordenadas del widget. Ver relativelayout para ms detalles sobre los
sistemas de coordenadas.
A_window(x, y, inicial=True, en relacin=false) transformar coordenadas locales a
las coordenadas de la ventana. Seerelativelayout para ms detalles sobre los siste
mas de coordenadas
de posicin de la parte superior del widget.
top es anAliasProperty de (y +altura).
andando(restrict=False, el bucle del iterador=false) que recorre el rbol widget c
omenzando con este widget y va reenviar regresando de widgets en el orden en el
que los diseos mostrarlos.
Restringir los parmetros: bool, por omisin FalseIf True, slo una iteracin a travs de
la mujer y sus hijos (o los hijos de sus hijos, etc.). El valor predeterminado e
s False.
loopback: bool, por omisin FalseIf True, cuando el ltimo widget en el rbol es alcan
zado, tendr un bucle a la raz superior y comenzar a caminar hasta que hallemos est
e widget de nuevo. Naturalmente, slo puede restringir al bucle de retorno es Fals
e. El valor predeterminado es False.
Generador ReturnsA que recorre el rbol, regresando de widgets en el orden de pres
entacin de avance.
Por ejemplo, dado un rbol con la siguiente estructura:
GridLayout:
botn BoxLayout:
id: box Widget Widget de botn
caminar este rbol:
&gt;&gt;&gt; # Llamar a caminar en caja con bucle y restringir el Verdadero Fals
o &gt;&gt;&gt; [tipo(widget) para el widget en caja.caminar(loopback=true)]
618

[ <class BoxLayout >, <class Widget >, <class Button >, <class Widget >, <cl
ass GridLayout >, <class Button >] &gt;&gt;&gt; # Ahora con bucle y restringir
el falso falso &gt;&gt;&gt; [tipo(widget) para el widget en caja.walk()] [ <cla
ss BoxLayout >, <class Widget >, <class Button >, <class Widget >] &gt;&gt;&
gt; # Ahora con restringir el verdadero &gt;&gt;&gt; [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:
&gt;&gt;&gt; # Llamar a pie de cuadro con cierto bucle &gt;&gt;&gt; [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 >] &gt;&gt;&gt; # Ahora con falsas loopback &gt;&gt;&gt; [tipo(widget)
para el widget en caja.walk_reverse()] [ <class Button >, <class GridLayout >]
&gt;&gt;&gt; avance = [w w en caja.caminar(loopback=true)] &gt;&gt;&gt; atrs = [
w w en caja.walk_reverse (loopback=true)] &gt;&gt;&gt; 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

x X posicin del widget.


x es aNumericProperty y predeterminados a 0.
s s posicin del widget.
y es aNumericProperty y predeterminados a 0.
exceptionkivy.uix.widget.WidgetException Bases: Excepcin
dispararon cuando el widget obtiene una excepcin.
620

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

mdulo Python ndice


k
kivy, 163 kivy.adaptadores, 249 kivy.adaptadores.adaptador, 250 kivy.adaptadores
.args_convertidores, 252 adaptadores.dictadapter kivy.251.adaptadores.listadapte
r kivy, 253 kivy.adaptadores.Modelos, 255.adaptadores.simplelistadapter kivy, 25
6 kivy.animation.app kivy, 164, 174, 187.atlas kivy kivy.base.cache kivy, 215, 1
90, 192.clock kivy kivy.compat, 197 kivy.config.contexto kivy, 197, 202, 257.cor
e kivy kivy.core.audio, 257 kivy.core.cmara, 259 kivy.core.portapapeles, 260 kivy
.core.gl, 260 kivy.core.imagen, 260 kivy.core.ortografa, 264 kivy.core.text, 265
kivy.core.text.marcado, 270 kivy.core.text.text_layout, 267 kivy.core.video, 271
kivy.core.ventana, 272 kivy.deps", 283, 285.effects kivy kivy.effects.dampedscr
oll, 285 kivy.effects.Kinetic, 286 kivy.effects.opacityscroll, 287 kivy.effects.
scroll, 287 kivy.event, 202 kivy.ext, 289 kivy.factory.jardn kivy, 210, 293, 210.
geometry kivy kivy.gesto, 211 kivy.graphics, 295
327 kivy kivy.graphics.compiler,.graphics.Contexto, 323 kivy.graphics.context_in
strucciones, 319 kivy.graphics.fbo, 324 kivy.graphics.gl_instrucciones, 326 kivy
.graphics.Instrucciones, 315 kivy.graphics.opengl, 328 kivy.graphics.opengl_util
s, 336 kivy.graphics.La Tijera_Instructions, 338 kivy.graphics.shader, 338 kivy.
graphics.stencil_Instructions, 340 kivy.graphics.svg, 342.graphics.tesselator ki
vy, 343 kivy.graphics.textura, 345 kivy.graphics.transformacin, 351 Kivy.graphics
.vertex_instrucciones, 354 kivy, 363 kivy.input.input.factory, 379.input.motione
vent kivy, 375 kivy.input.posprocesamiento, 365 kivy.input.posprocesamiento.Cali
bracin, 365 kivy.input.posprocesamiento.dejitter, 366 kivy.input.posprocesamiento
.doubletap, 366 kivy.input.posprocesamiento.ignorelist, 366 kivy.input.posproces
amiento.retaintouch, 367 kivy.input.posprocesamiento.tripletap kivy.input.provid

er, kivy.input.providers,, 367 380 367 369 368 kivy.input.providers.leapfinger,


kivy.input.providers.hidinput, kivy.input.providers.mactouch, kivy.input.provide
rs.mouse, kivy.input.providers.linuxwacom, 370 370 368 370 367 kivy.input.provid
ers.tuio, kivy.input.providers.mtdev, kivy.input.providers.wm_common, kivy.input
.providers.probesysfs, 371 368 371 371 kivy kivy.input.providers.wm_pen, kivy.in
put.providers.wm_touch,.input.grabador, 373 kivy.input.Shape, 380
625

213 kivy kivy.interactive,.lang, 381 kivy.lang.builder, 396 kivy.lang.parser, 39


8 kivy.lib, 401 kivy.lib.ddsfile, 401 kivy.lib.gstplayer, 401 kivy.lib.mtdev kiv
y, 402, 185.loader.kivy logger, 217 kivy.mtricas, 218 kivy.modules, 403 kivy.modu
les.Console, 404 kivy.modules.inspector, 408 kivy.modules.keybinding kivy, 409.m
odules.monitor, 409 kivy.modules.grabador, 410 kivy.modules.pantalla, 410 kivy.m
odules.touchring, 411 kivy.modules.webdebugger, 411 kivy.multistroke, 220 413 41
3 kivy kivy.network, kivy.network.urlrequest,.parser, 228 229 kivy kivy.properti
es,.resources.almacenamiento kivy, 240, 417.storage.dictstore kivy, 420 kivy.sto
rage.jsonstore, 420 kivy.storage.redisstore, 421 kivy.apoyo, 240 kivy.herramient
as, 423 kivy.tools.Embalaje, 423 kivy.tools.packaging.pyinstaller_ganchos
Kivy.uix.checkbox, 478.codeinput kivy.uix, 480 kivy.uix.colorpicker, 481 kivy.ui
x.dropdown, 483.effectwidget kivy.uix, 485 kivy.uix.filechooser, 489.floatlayout
kivy.uix, 497.gesturesurface kivy.uix, 499 kivy.uix.gridlayout, 502 kivy.uix, 5
05 kivy.image.uix.label, 508 kivy.uix, 518 kivy.layout.uix.listview, 519.uix mod
alview kivy.529.pagelayout kivy.uix, 531 kivy.uix.popup, 532 534 kivy.uix.progre
ssbar,.recycleboxlayout kivy.uix, 535.recyclegridlayout kivy.uix, 535.recyclelay
out kivy.uix, 535.recycleview kivy.uix, 451.recycleview kivy.uix.__init__, 452 k
ivy.uix.recycleview.datamodel, 457.recycleview kivy.uix, 453.layout.recycleview
kivy.uix.opiniones, 454.relativelayout kivy.uix, 536 kivy.uix.rst, 540 kivy.uix.
sandbox, 543 kivy.uix.dispersin, 543.scatterlayout kivy.uix, 547 kivy.uix.screenm
anager, 548 kivy.uix.scrollview, 555.selectableview kivy.uix, 458 , 423, 427 kiv
y.uix.abstractview kivy.uix, 458 kivy.uix.acorden, 458.actionbar kivy.uix, 462.an
chorlayout kivy.uix, 467 kivy.uix.behaviors, 427 kivy.uix.behaviors.button, 432
kivy.uix.behaviors.codenavigation, 434
kivy.uix, 559 kivy.settings.uix.slider, 567 kivy.uix.spinner, 569 kivy.uix.divis
or, 570.stacklayout kivy.uix, 573.stencilview kivy.uix, 574 kivy.uix.interruptor
, 575.tabbedpanel kivy.uix, 576 kivy.uix.textinput, 582
kivy.uix.behaviors.compoundselection kivy.uix.togglebutton, 592 , 434 kivy.uix.b
ehaviors.Arrastre, 439 kivy.uix.behaviors.emacs, 440 kivy.uix.behaviors.focus, 4
41 kivy.uix.behaviors.knspace, 445 kivy.uix.behaviors.togglebutton, 450 kivy.uix
.boxlayout, 468 kivy.uix.burbuja, 470 kivy.uix.button, 473 kivy.uix.cmara, 474 ki
vy.uix.carrusel, 475
626
kivy.uix.treeview, 593 kivy.uix.video, 598 kivy.uix.videoplayer, 600.vkeyboard k
ivy.uix, 605 kivy.uix.widget.utils kivy, 609, 241, 243.vector kivy kivy.weakmeth
od.weakproxy kivy, 247, 247

Você também pode gostar