I do know that this code is hideous, but there it is
import kivy
from kivy.uix.scatter import Scatter
from
kivy.app import App
import os
from kivy.properties import ListProperty
from kivy.uix.image import Image
from kivy.animation import Animation
from kivy.properties import StringProperty
from kivy.clock import Clock
import random
from kivy.uix.widget import Widget
import re
## IMPORTS PARA LOS BOTONES
import RPi.GPIO as GPIO
import atexit
import time
# setup de los gpio
def gpio_init():
GPIO.setmode(GPIO.BCM)
GPIO.setup(17,
GPIO.IN, pull_up_down=GPIO.PUD_UP)
atexit.register(GPIO.cleanup)
class MyScatter(Scatter):
fuente = StringProperty()
class Picture(Image):
source = StringProperty(None)
class BoothApp(App):
lista_fotos = ListProperty()
lista_carpetas_fotos = ListProperty()
foto_actual=0
def build(self):
#self.v=Ventana() #no se si hace falta, para arreglar el size de las fotos
#algunas, por ahora, constantes
self.nombre_foto='test'
self.ultima_foto = 0
self.timeout=5000 #son 5 segundos
self.mostrar_foto_nueva = False
self.s = MyScatter(size=(100, 100), size_hint=(None, None))
#s.top = 500
#self.v.add_widget(self.s)
self.crear_lista()
self.foto1=Picture(source='./fotos_booth/' + self.lista_fotos[self.foto_actual],nocache=True)
self.foto_actual=+1
self.widget_actual=1
self.foto2=Picture(source='./fotos_booth/' + self.lista_fotos[self.foto_actual],nocache=True)
self.s.add_widget(self.foto1)
self.anim=Animation(pos=(100,100),scale=1.5,t='in_out_quart',d=4)
self.anim.start(self.s)
Clock.schedule_once(self.proxima_foto, 5)
#aca le meto la funcion que va a llamar cuando aprete el boton de foto
gpio_init()
GPIO.add_event_detect(17, GPIO.FALLING, callback=self.sacar_foto, bouncetime=300)
return self.s
def crear_lista(self):
self.lista_fotos = os.listdir('./fotos_booth')
#print self.lista_fotos
for archivo in self.lista_fotos:
if not archivo.endswith('.jpg'):
self.lista_fotos.remove(archivo)
self.lista_fotos.sort()
print 'la ultima foto es %s' %self.lista_fotos[ len(self.lista_fotos) -1 ]
self.ultima_foto = re.findall(r'\d+', self.lista_fotos[len(self.lista_fotos)-1])
self.ultima_foto = int(self.ultima_foto[ len(self.ultima_foto) -1 ])
print 'el ultimo numero es %d' % self.ultima_foto
def proxima_foto(self,*largs):
if self.mostrar_foto_nueva:
self.s.remove_widget(self.foto_nueva)
self.mostrar_foto_nueva = False
self.foto_actual=self.foto_actual+1
if self.foto_actual >= len(self.lista_fotos): self.foto_actual = 0
if self.widget_actual == 1:
#self.s.pos=(random.randint(0,300),random.randint(0,300))
try:
self.s.remove_widget(self.foto1)
except:
print 'no pudo remover el widget 1'
self.s.scale=1
self.s.add_widget(self.foto2)
self.s.pos=(random.randint(0,300),random.randint(0,300))
self.widget_actual=2
self.foto1=Picture(source='./fotos_booth/' + self.lista_fotos[self.foto_actual],nocache=True)
elif self.widget_actual == 2:
try:
self.s.remove_widget(self.foto2)
except:
print 'no pudo remover el widget 2'
#self.s.pos=(random.randint(0,300),random.randint(0,300))
self.s.scale=1
self.s.add_widget(self.foto1)
self.s.pos=(random.randint(0,self.s.width),random.randint(0,self.s.height))
self.widget_actual=1
self.foto2=Picture(source='./fotos_booth/' + self.lista_fotos[self.foto_actual],nocache=True)
self.anim.start(self.s)
print self.s.pos
Clock.schedule_once(self.proxima_foto, 5)
def ruidito():
os.system('aplay camera1.wav')
def sacar_foto(self,channel,*largs):
#detengo la presentacion
Clock.unschedule(self.proxima_foto)
#envio el comando para sacar la foto
print self.ultima_foto
self.ultima_foto +=1
print self.ultima_foto
print 'raspistill -t %d -o ./fotos_booth/%s%03d.jpg -p 800,100,800,450' % ( self.timeout, self.nombre_foto, self.ultima_foto)
os.system('raspistill -t %d -w 800 -h 450 -o ./fotos_booth/%s%03d.jpg -p 800,100,800,450' % ( self.timeout, self.nombre_foto, self.ultima_foto) )
self.lista_fotos.append( '%s%d.jpg' % (self.nombre_foto,self.ultima_foto) )
Clock.schedule_once( self.ruidito , self.timeout )
self.foto_nueva=Picture( source='./fotos_booth/%s%03d.jpg'%(self.nombre_foto,self.ultima_foto), nocache=True)
self.s.add_widget( self.foto_nueva )
Clock.schedule_once(self.proxima_foto,7)
self.mostrar_foto_nueva=True
BoothApp().run()
-----