使用pyqtsignal将变量从一个Qthread移动到另一个Qthread

时间:2017-04-19 11:57:15

标签: python pyqt5 qthread qt-signals

我正在pyQT5中构建我的第一个GUI,我对Python编程很新。

我试图在一个Qthread中使用一个变量并在另一个Qthread中使用它。我认为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))

这只是程序的一部分,这可能包含其他错误,因为我已经努力工作。

我的问题是我得到输出“&lt; main .PosSignals对象位于0x72f0c210&gt;”当我尝试在句柄功能中打印文本时,我删除自己像:

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

当我保持自我时,我需要为print b.handle_string()提供一个参数,然后当然只打印我添加的参数。

我想要实现的是使用在GetCurrentSpeed(QThread)中创建的lat变量:并在类OverPassApi(QThread)中使用它:

1 个答案:

答案 0 :(得分:0)

您似乎忘记了self的{​​{1}}参数。