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):