Bonsoir chères amis je développe une application dans laquelle j’utilise une boucle tantque qui bloque mon interface graphique. J’ai jugé bien d’utiliser un Qthread pour gérer cela. Mon qthread doit envoyer régulièrement des informations a l’interface graphique pour la mise a jour.
Mais le véritable problème je n’arrive pas a faire communiquer mon Qthread avec mon interface graphique. Voici ma classe lancer qui hérite de Qthread.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Lancer(QtCore.QThread): def __init__(self, liste, plus, duree, parent=None): super(Lancer, self).__init__(parent) self.liste = liste self.plus = plus self.duree = duree self.fin = None self.continuer = False def run(self): if self.continuer: pass else: self.continuer = True self.fin = time.strftime("%H") + str(int(time.strftime("%M")) + int(self.plus)) + time.strftime("%S") while time.strftime("%H%M%S") <= fin and self.continuer: envoi = self.liste[randrange(len(self.liste))] self.emit(QtCore.SIGNAL("demarrer(PyQt_PyObject)"), envoi) time.sleep(self.duree) ` |
j’ai utilisé self.emit(QtCore.SIGNAL("demarrer(PyQt_PyObject)"), envoi) dans le but d’envoyer la variable envoi a ma fenêtre graphique.
Dans ma fenêtre graphique j’ai définir cette fonction:
1 2 3 4 | def demarrer(self): start = Lancer(self.liste, self.nbre_min, self.vitesse_pass) self.connect(start, QtCore.SIGNAL("recevoir(PyQt_PyObject)"), self.recevoir) start.start() |
j’ai utilisé self.connect(start, QtCore.SIGNAL("recevoir(PyQt_PyObject)"), self.recevoir) dans le but de recevoir la variable du thread et de lancer la fonction self.recevoir qui est défini comme suite:
1 2 3 4 5 | def recevoir(self, msg): self.passa_elt.setText(msg) QtCoreQcoreApplication.processEvents() ` |
Mais quand je lance le programme voici le résultat:
1 2 | self.connect(start, QtCore.SIGNAL("recevoir(PyQt_PyObject)"), self.recevoir) AttributeError: 'Ui_MainWindow' object has no attribute 'connect' |
Pouvez vous m’aider? Merci d’avance.