PyQt4崩溃,进程b

2024-10-02 02:26:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试进行一个下载操作,它有一个自动进行的进度条。在

当我运行这段代码时,进度条工作得很好,但是当我用鼠标点击表单时,程序就停止工作了。在

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import urllib

app = QApplication(sys.argv)
app.setStyle('Cleanlooks')
label = QLabel()
progressx = QProgressBar(label)

url = "http://l3cdn.riotgames.com/ShellInstaller/EUNE/LeagueofLegends_EUNE_Installer_9_15_2014.exe"
name = url.split('/')[-1]
def report(count, blockSize, totalSize):
        global percent
        percent = int(count*blockSize*100/totalSize)

        sys.stdout.write("\r%d%%" % percent + ' complete')
        progressx.setValue(percent)
        label.show()

urllib.urlretrieve(url, name, reporthook=report)
sys.exit(app.exec_())

这是进度条:

Broken progress bar


Tags: 进度条namefromimportreportappurlcount
1条回答
网友
1楼 · 发布于 2024-10-02 02:26:44

我不想通过在循环中调用show来更新UI,而是调用QtGui.QApplication.processEvents()

import sys
from PyQt4 import QtGui
import urllib

app = QtGui.QApplication(sys.argv)
app.setStyle('Cleanlooks')

progressx = QtGui.QProgressBar()
progressx.show()

url = "http://l3cdn.riotgames.com/ShellInstaller/EUNE/LeagueofLegends_EUNE_Installer_9_15_2014.exe"
name = url.split('/')[-1]
def report(count, blockSize, totalSize):
    global percent
    percent = int(count*blockSize*100/totalSize)

    sys.stdout.write("\r%d%%" % percent + ' complete')
    progressx.setValue(percent)

    QtGui.QApplication.processEvents()

urllib.urlretrieve(url, name, reporthook=report)
sys.exit(app.exec_())

或者,如果它仍然不能按您的预期工作,您可以尝试使用QThread在它自己的线程中实现下载过程,并将进度传递给带有信号和槽结构的进度条。如果你需要的话,我可以给你举个例子。在

相关问题 更多 >

    热门问题