Qt(Gui)中的线程问题

时间:2017-06-16 12:47:47

标签: python qt pyqt qthread

我正在开发一个从互联网上下载文件的应用程序。 我为此目的使用过Qt。 下载过程使用包含while循环的QThread对象在单独的线程中运行。 为了显示进度,我在主线程中有一个标签,并更新我发送信号到主线程。 问题是当下载线程启动时标签显示值0并保持为0,下载完成后突然显示100。 两个值之间没有。 我该如何解决这个问题?

我已经使用了repaint()processEvents()update方法。他们不工作。

以下是一些供参考的代码:

这是用于创建下载线程的类线程。

class signal(QObject):       #For creating signals
sgn=pyqtSignal()
ma=pyqtSignal()
jo=pyqtSignal()
def __init__(self):
    super(signal,self).__init__()

class thread(QThread):
    def __init__(self):
        super(thread,self).__init__()
        self.w=signal()
    def run(self):
        global url
        global video
        global val
        self.w.ma.emit()
        size=url.get_filesize()
        f=open(video.title+'.'+url.extension,"wb")
        resp=urllib.request.urlopen(url.url)
        l=0
        print(size)
        while True:
            buf=resp.read(65536)
            if not buf:
                f.close()
                return
            l+=len(buf)
            val=l//size*100     # val is global variable for progress value
            self.w.sgn.emit()   # Here I emit the signal
            f.write(buf)

线程对象和标签在主GUI线程中定义。

用户按下下载按钮后,我启动线程。

#Main thread
.
.
self.obj=thread()
self.obj.w.sgn.connect(self.m)
def m(self):     #Slot for updating
    global val
    print("Here")   #For checking
    self.label.setText(str(val))  

P.S。 - "在这里"重复打印在控制台中,下载完成后停止。

0 个答案:

没有答案