2017-04-19 3 views
0

Je construis ma première interface graphique dans pyQT5 et je suis assez nouveau dans la programmation Python. J'essaie d'utiliser une variable dans un Qthread et de l'utiliser dans un autre. Je pensais que pyqtsignal était le moyen de le faire. Mais je ne peux pas le faire fonctionner.Déplacement de variables d'un Qthread vers un autre avec pyqtsignal

class GetCurrentSpeed(QThread): 
    gpsLatSig = pyqtSignal(str) 

    def __init__(self): 
     QThread.__init__(self) 

    def __del__(self): 
     self.wait() 

    def run(self): 
     while True: 
      ####Print a value in lon and lat so that its never empty 
       lon = "18" 
       lat = "59" 

      ###Get Current Latitude and Longitude 
       if report['class'] == 'TPV': 
          if hasattr(report, 'lat'): 
           lat = (str(report.lat)) 
           self.gpsLatSig.emit(lat) 
          else: 
           lat = "59" 
           print("No GPS Lock") 
           self.gpsLatSig.emit(lat) 

class PosSignals(QObject): 
    GetGps = GetCurrentSpeed() 

    def connectsig(self): 
     self.GetGps.gpsLatSig[str].connect(self.handle_string) 

    @pyqtSlot(str) 
    def handle_string(self, text): 
     print text 

class OverPassApi(QThread): 
    GetGps = GetCurrentSpeed() 


    def __init__(self): 
     QThread.__init__(self) 
     self.b = PosSignals() 


    def __del__(self): 
     self.wait() 

    def run(self): 
     while True: 
       self.b.connectsig() 
       print b.handle_string() 

       api = overpy.Overpass() 
       result = api.query("""<osm-script> 
       <query type="way"> 
         <around lat="%s" lon="%s" radius="30"/> 
         <has-kv k="name" v=""/> 
        </query> 
        <print/> 
       </osm-script>""" % (b.handle_string, 18)) 

Ceci est juste une partie du programme et cela pourrait contenir d'autres erreurs puisque j'ai travaillé dur pour que cela fonctionne.

Mon problème est que je reçois la sortie « < principaux .PosSignals objet à 0x72f0c210> » lorsque je tente d'imprimer le texte dans la fonction de la poignée quand je supprime l'auto comme:

@pyqtSlot(str) 
    def handle_string(text): 
     print text 

et quand Je maintiens moi-même que je dois fournir un argument à l'impression b.handle_string() qui alors bien sûr imprime seulement l'argument que j'ajoute.

Ce que je veux obtenir est d'utiliser la variable créée en lat GetCurrentSpeed ​​(QThread): et l'utiliser en classe OverPassApi (QThread):

Répondre

0

On dirait que vous avez simplement oublié un argument self pour handle_string.