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

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()
      
       # Programar la llamada a pause_gif() luego de 5 segundos.
       self.movie = movie
       QtCore.QTimer.singleShot(5000, self.pause_gif)

@QtCore.pyqtSlot()
def pause_gif(self)
       self.movie.stop()
       self.lbConocidos.clear()

Un saludo!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
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í:

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()
     
      # Programar la llamada a pause_gif() luego de 5 segundos.
      self.movie = movie
      QtCore.QTimer.singleShot(5000, self.pause_gif)

@QtCore.pyqtSlot()
def pause_gif(self)
      self.movie.stop()
      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)