Python Qt(Gui)中的线程问题
我正在开发一个从互联网下载文件的应用程序。 我已经为此使用了Qt。 下载过程使用包含while循环的QThread对象在单独的线程中运行。 为了显示进度,我在主线程内有一个标签,并更新我向主线程发送的信号。 问题是,当下载线程开始并保持为0时,标签显示值0,下载完成后,标签突然显示为100。 没有中间值。 如何解决此问题 我已经使用了Python Qt(Gui)中的线程问题,python,qt,pyqt,qthread,Python,Qt,Pyqt,Qthread,我正在开发一个从互联网下载文件的应用程序。 我已经为此使用了Qt。 下载过程使用包含while循环的QThread对象在单独的线程中运行。 为了显示进度,我在主线程内有一个标签,并更新我向主线程发送的信号。 问题是,当下载线程开始并保持为0时,标签显示值0,下载完成后,标签突然显示为100。 没有中间值。 如何解决此问题 我已经使用了repaint()、processEvents()和update方法。它们不起作用 以下是一些代码供参考: 这是用于创建下载线程的类线程 class signal(
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))
注意-“Here”会在控制台中反复打印,并在下载完成后停止。显示您的代码这是一大块代码。只需包含相关代码(请参阅)。如何发出下载状态?您是否检查了中间进度是否有效发出?是。我已经检查过中间进程是通过在控制台上打印一些消息来传输的。所以这不是问题!