在GUI PyQT4旁边执行任务

时间:2017-09-21 19:31:55

标签: python python-2.7 python-3.x pyqt qthread

所以我正在尝试运行PyQT GUI,而另一个功能是在后台收集信息。如果找到信息,则GUI应自行更新。

我是Threading的新手所以我搜索了很多东西,发现了一些很好的HowTo,虽然它不能正常工作。

当我运行程序时,它会在3秒后结束。

也许你看到我做过的一些重大错误。

这是我试图运行的基本代码

class scan_Thread(QThread):
    def __init__(self, samp_rate, band, speed, ppm, gain, args, prn):
        QThread.__init__(self)
            self.samp_rate=samp_rate
            self.band=band
            self.speed=speed
            self.ppm=ppm
            self.gain=gain
            self.args=args
            self.prn=prn

        def __del__(self):
            self.wait()

        def run(self):
            do_scan(self.samp_rate, self.band, self.speed,
                    self.ppm, self.gain, self.args, self.prn)


def start_gui():
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
    #app.exec_()
    #sys.exit()

def main(options = None):

    def printfunc(found_list):
        for info in sorted(found_list):
            print info

    get_thread = scan_Thread(options.samp_rate, options.band, options.speed,
                options.ppm, options.gain, options.args, printfunc)
    get_thread.start()
    start_gui()

谢谢!

1 个答案:

答案 0 :(得分:0)

Qt类的许多对象以及因此PyQt的许多对象需要启动一些Application类型的对象(QCoreApplication,QtGuiApplication或QApplication),但这些对象中只有一个必须存在。

在您的特定情况下,QThread需要它。以前的类负责生成必要的循环。

因此,您应该将代码修改为以下内容:

def main(options = None):
    app = QtGui.QApplication(sys.argv) // before creating any PyQt object.

    def printfunc(found_list):
        for info in sorted(found_list):
            print info

    get_thread = scan_Thread(options.samp_rate, options.band, options.speed,
                options.ppm, options.gain, options.args, printfunc)
    get_thread.start()
    window = Window()
    window.show()
    sys.exit(app.exec_())