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
Arquivado em: programação, pyqt Etiquetado: | pyqt, python, qt, threads

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