簡體   English   中英

在GUI PyQT4旁邊執行任務

[英]Threading a task beside a GUI PyQT4

因此,我正在嘗試運行PyQT GUI,而另一項功能是在后台收集信息。 如果找到信息,則GUI應自行更新。

我是線程技術的新手,因此我在Google上進行了很多搜索,並找到了一些不錯的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()

謝謝!

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_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM