# -*- coding: utf-8 -*-
import os, sys, urllib
from threading import Thread
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class QDownloader(QProgressDialog):
def __init__(self, parent=None):
QProgressDialog.__init__(self, parent)
self.parent = parent
self.ok = True
self.resize(self.size().width()*2, self.size().height())
self.canceled.connect(self.cancelDownload)
self.connect(self, SIGNAL("updateProgress(PyQt_PyObject, PyQt_PyObject, PyQt_PyObject, PyQt_PyObject)"), self.updateProgress)
def updateProgress(self, numblocks, blocksize, filesize, url=None):
self.setMaximum(filesize)
self.setValue(numblocks*blocksize)
if numblocks*blocksize > filesize:
self.thread._Thread__stop()
self.hide()
def dld(self, url, path):
try:
urllib.urlretrieve(url, path, lambda nb, bs, fs, url=url: self.emit(QtCore.SIGNAL("updateProgress(PyQt_PyObject, PyQt_PyObject, PyQt_PyObject, PyQt_PyObject)"), nb, bs, fs, url))
except BaseException, e:
pass
def download(self, url, path):
self.thread = Thread(target=self.dld, args=(url, path))
self.thread.start()
self.show()
self.exec_()
return self.ok
def cancelDownload(self):
self.ok = False
self.thread._Thread__stop()