Timer no PyQT

Quem programa em Python provavelmente já precisou fazer alguma coisa com threads. Contudo quando estamos trabalhando com PyQT há alguns incovenientes em utilizar as threads da API do Python, principalmente quando temos interfaces gráficas. Recentemente tive problemas para fazer uma função que executasse determinada ação após um tempo pré-definido em segundos. Pois quando enquanto a thread não terminasse sua execução a janela gráfica não aparecia.  Encontrei duas maneiras para solucionar,  a primeira utilizando QThread e uma muito mais simples usando QTimer,  fica o registro das duas maneiras:

from PyQt4 import *
from PyQt4.QtCore import *

class MyTimer(QThread):
	def __init__(self,parent = None):
		QThread.__init__(self,parent)

	def run(self):
		while 1:
		# a cada 'self.tempo' segundos o sinal é emitido e
                  nós tratamos na outra classe. Exemplo:
			self.emit(SIGNAL("sinal_atualiza()"))
			self.sleep(self.tempo)

	def Timer(self,t=5):
		self.tempo = t
		self.start()

Depois, na sua classe basta que gerencia a interface gráfica, basta instanciar o objeto e tratar os sinais definidos em MyTimer(), você pode definir quantos sinais forem necessários:

	  self.timer = MyTimer()
	  self.timer.Timer(3) # 3 segundos

	  self.connect(self.timer,
                       QtCore.SIGNAL("sinal_stualiza()"),
                       self.atualiza)
	  # caso seja necessario executar algo após o termino da
          # therad (não é o caso do exemplo acima que o while
          # "trava" na função run()
	  self.connect(self.timer,
                       QtCore.SIGNAL("finished()"),
                       self.finaliza)

Contudo existe uma maneira muito mais fácil de fazer um timer utilizando PyQT, usando a QTimer

	self.timer = QtCore.QTimer()

	self.connect(self.timer,
                     QtCore.SIGNAL("timeout()"),
                     self.atualiza)

        self.timer.start(3000) # tempo em milisegundos

Uma resposta

  1. Boa ideia a do Timer vou usar ! To apanhando aqui pro QT atualizar uma progress bar! rs rs ! Abraços =)

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: