Foros del Web » Programando para Internet » Python »

Crear animación

Estas en el tema de Crear animación en el foro de Python en Foros del Web. ¡Hola! Estoy trabajando con Pygtk, y quiero poner una animación. He pensado en hacer una animación GIF , pero el problema es que este formato ...
  #1 (permalink)  
Antiguo 26/04/2011, 19:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
Pregunta Crear animación

¡Hola! Estoy trabajando con Pygtk, y quiero poner una animación. He pensado en hacer una animación GIF, pero el problema es que este formato no soporta semitransparencias. También he pensado en hacerlo en el formato APNG, pero no sé si Pygtk puede mostrarlo. ¿Hay alguna manera de hacer una animación con semitransparencias?

Gracias
  #2 (permalink)  
Antiguo 27/04/2011, 08:10
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear animación

Considerando que el primer resultado de "pygtk +apng" en Google es este mismo tema, creo que no será posible.
Pero vale la pena probar: aunque no lista qué formatos soporta, la página de pygtk menciona que existe soporte para otros formatos de imagen. Fijate aquí: http://faq.pygtk.org/index.py?file=f...2.htp&req=show
  #3 (permalink)  
Antiguo 27/04/2011, 16:53
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
Gracias por la respuesta. Pero lo he probado, y no funciona

__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #4 (permalink)  
Antiguo 27/04/2011, 17:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Crear animación

Que tal una animación a la antigua.
Tu sabes tener varias imágenes con transparencias y que estén cambiando constantemente.
Aunque creo que eso subiría mucho el consumo de cpu a menos que este optimizado.
  #5 (permalink)  
Antiguo 27/04/2011, 20:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
¿Y cómo se hace para cambiarlas?
__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #6 (permalink)  
Antiguo 30/04/2011, 13:39
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Crear animación

Metes una lista de imágenes y la recorres con un for. Y a medida que vayas avanzando se van mostrando, recuerda que el ojo humano necesita 25 cuadros por segundo para reconocer el movimiento(con 19 pueden ser suficientes), por tanto tendrás que tener bastantes imágenes dependiendo del tiempo que quieras mostrar o animar.

Última edición por SamuraiBlanco; 30/04/2011 a las 13:39 Razón: agrada una palabra xD
  #7 (permalink)  
Antiguo 01/05/2011, 15:28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
Gracias por la respuesta, lo probaré así.

__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #8 (permalink)  
Antiguo 03/05/2011, 13:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
De acuerdo

Al final lo he solucionado así, con un bucle for y con threads.

__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #9 (permalink)  
Antiguo 03/05/2011, 15:36
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Crear animación

Una animación es secuencial,
¿por que deberías de usar threads?

Incluso si utilizas threads para abrir los archivos al mismo tiempo, no te ayudara de mucho por que el cuello de botella estaría en el disco duro.

¿Como lograste meter threads para optimizar este problema?
  #10 (permalink)  
Antiguo 03/05/2011, 18:16
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear animación

razpeitia, quizás el hilo sea para hacer la animación sin congelar la GUI
  #11 (permalink)  
Antiguo 03/05/2011, 19:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
Si, como dice AlvaroG he utilizado threads para no congelar la GUI. Porque sin threads se congeló la GUI, y al final me mostraba sólo la última imagen.

__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #12 (permalink)  
Antiguo 03/05/2011, 19:52
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Crear animación

¿Puedes postear el código? Para que los demás aprendamos
  #13 (permalink)  
Antiguo 03/05/2011, 20:05
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
Hilos con Pygtk:
Código Python:
Ver original
  1. import threading
  2.  
  3. gtk.gdk.threads_init()
  4.  
  5. def animacion(self):
  6.    tupla = ("ruta_imagen_1","ruta_imagen_2","ruta_imagen_3")
  7.    for i in range(0,2):
  8.       sleep(0.05)
  9.       gtk.gdk.threads_enter()
  10.       self.gtkImage.set_from_file(self.tupla[i])
  11.       gtk.gdk.threads_leave()
  12.  
  13. def thread(self):
  14.    hilo = threading.Thread(target=animacion)
  15.    hilo.start()

Y cuando quieres mostrar la animación, llamas la función thread.

__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #14 (permalink)  
Antiguo 03/05/2011, 20:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Crear animación

Tienen razón, ¿pero por que no usaron un Timer (un timer llama un evento cada x milisegundos)?

Buscando un poco sobre este widget encontré esto.
  #15 (permalink)  
Antiguo 04/05/2011, 04:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
Ahora veo que en el ejemplo anterior, he cometido dos errores:

Código Python:
Ver original
  1. for i in range(0,2):
tiene que ser
Código Python:
Ver original
  1. for i in range(0,3):
pero también se puede escribir así:
Código Python:
Ver original
  1. for i in range(3):

y
Código Python:
Ver original
  1. sleep(0.05)
normalmente es
Código Python:
Ver original
  1. time.sleep(0.05)

Cita:
Iniciado por razpeitia Ver Mensaje
... pero por que no usaron un Timer ...
Creo que es mejor con threads, ¿no?

__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111

Última edición por _Adrian_; 04/05/2011 a las 04:21

Etiquetas: animacion, semitransparencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:12.