2010-07-14 6 views
1

Dans mon code (python2.6, PyQt4) je fais quelque chose comme ceci:Paramètres python QThread.run - changés entre les versions?

def myRun(): 
    doStuff 
thread = QtCore.QThread() 
thread.run = myRun 
thread.start() 

Sur ma machine papou, cela fonctionne parfaitement. Sur un ubunut (9.10, Karmic Koala) ça ne marche pas, ça dit: Type Erreur: myRun() ne prend aucun argument (1 donné)

Quelque chose a changé dans QT? Comment puis-je faire ce travail sur les deux machines?

Merci! Nathan

Répondre

2

Je ne sais pas comment cela a déjà fonctionné; vous êtes supposé sous-classer QThread et remplacer la méthode run(). L'erreur "prend aucun argument" est due au fait que l'exécution de QT essaie de transmettre "self" en tant que premier argument d'une méthode de classe. Ce qui suit est plus proche de ce dont vous avez besoin:

def myThread(QtCore.QThread): 
    def run(self): 
     pass 

thread = myThread() 
thread.start() 

MISE À JOUR: Correspondant à l'original un peu plus.

def myRun(): 
    doStuff 

thread = QtCore.QThread() 
thread.run = lambda self: myRun() 
thread.start() 
+0

Eh bien, avec un langage dynamique comme Python, comme je le faisais devrait fonctionner, devrait-il pas? Le problème est que, sans le paramètre self, il ne fonctionne pas sur la machine ubuntu et avec elle, cela ne fonctionne pas sur la machine gentoo. – Nathan

+0

Si vous voulez le faire dynamiquement comme votre exemple, vous avez toujours besoin de votre fonction pour accepter le paramètre self. Je vais le mettre à jour avec un exemple. – sunetos

+0

Je suis désolé, si je ne suis pas clair. L'exemple avec le paramètre self fonctionne sur mon ubuntu, _ mais_ ne fonctionne pas sur mon gentoo. L'exemple sans auto-paramètre fonctionne sur mon gentoo, mais ne fonctionne pas sur mon ubuntu. – Nathan

Questions connexes