Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Esperar 5 segundos antes de ejecutar la siguiente linea
#1
Hola a todos, 

Tengo el siguiente problema: Estoy haciendo una aplicación con interfaz grafica en la que reproduzco un gif animado en un label. La cuestion es que quiero que la reproducción dure solo 5 segundos y despues se pare y limpie el Label. 

Lo primero que hice fue utilizar Sleep(5), pero no me vale porque para la ejecución de todo el codigo incluido el gif y el resto de procesos que se ejecutan a la vez que el gif  y lo único que consigo es que el gif se reproduzca 5 segundos despues. 



Luego intenté con multitreas con Thread.....Pero no consegui nada (debido a mi inexperincia supongo). 


Alguien sabría decirme como podría hacer esa espera de 5 segundos sin parar el resto de código en ejecución?

Código:
def AbrirGif(self):
       movie = QtGui.QMovie(DirIma + '/RECONFACE.gif')
       movie.setSpeed(250)

       self.lbConocidos.setMovie(movie)
       self.lbConocidos.setAlignment(Qt.AlignCenter)  # Aliniamos al Centro
       movie.start()
     
        # Aqui necesito esperar 5 segundos
     
       movie.stop()
       self.lbConocidos.clear()
Responder
#2
Hola, ¿cómo estás?

Podés usar la función QTimer.singleShot para programar la llamada a un slot una vez transcurrida cierta cantidad de milisegundos. En tu caso podría verse más o menos así:

  1. def AbrirGif(self):
  2. movie = QtGui.QMovie(DirIma + '/RECONFACE.gif')
  3. movie.setSpeed(250)
  4.  
  5. self.lbConocidos.setMovie(movie)
  6. self.lbConocidos.setAlignment(Qt.AlignCenter) # Aliniamos al Centro
  7. movie.start()
  8.  
  9. # Programar la llamada a pause_gif() luego de 5 segundos.
  10. self.movie = movie
  11. QtCore.QTimer.singleShot(5000, self.pause_gif)
  12.  
  13. @QtCore.pyqtSlot()
  14. def pause_gif(self)
  15. self.movie.stop()
  16. self.lbConocidos.clear()


Un saludo!
Responder
#3
(20-07-2017, 04:15 PM)Francisco escribió: Hola, ¿cómo estás?

Podés usar la función QTimer.singleShot para programar la llamada a un slot una vez transcurrida cierta cantidad de milisegundos. En tu caso podría verse más o menos así:

  1. def AbrirGif(self):
  2.       movie = QtGui.QMovie(DirIma + '/RECONFACE.gif')
  3.       movie.setSpeed(250)
  4.  
  5.       self.lbConocidos.setMovie(movie)
  6.       self.lbConocidos.setAlignment(Qt.AlignCenter)  # Aliniamos al Centro
  7.       movie.start()
  8.      
  9.       # Programar la llamada a pause_gif() luego de 5 segundos.
  10.       self.movie = movie
  11.       QtCore.QTimer.singleShot(5000, self.pause_gif)
  12.  
  13. @QtCore.pyqtSlot()
  14. def pause_gif(self)
  15.       self.movie.stop()
  16.       self.lbConocidos.clear()


Un saludo!

Muchísimas gracias Francisco, funciona perfectamente. Ni te imaginas las horas que he pasado buscando en internet y probando diferentes códigos y no había visto nada sobre esa función.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)