Advertisement
Guest User

QThread urllib download

a guest
Feb 9th, 2012
875
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.62 KB | None | 0 0
  1. import sys
  2. import urllib2
  3. import time
  4.  
  5. from PySide import QtCore, QtGui, QtNetwork
  6.  
  7.  
  8. class DownloadThread(QtCore.QThread):
  9.  
  10.     data_downloaded = QtCore.Signal()
  11.    
  12.     def __init__(self, url):
  13.         QtCore.QThread.__init__(self)
  14.         self.url = url
  15.         self._data = None
  16.        
  17.     def run(self):
  18.         self._data = urllib2.urlopen(self.url).read()
  19.         self.data_downloaded.emit()
  20.        
  21.     def get_data(self):
  22.         return self._data
  23.  
  24.  
  25. class ImagePreview(QtGui.QWidget):
  26.     def __init__(self, parent=None):
  27.         super(ImagePreview, self).__init__(parent)
  28.         self.setMinimumSize(50, 50)
  29.         self.text = None
  30.         self.pixmap = None
  31.         self.dl_n = 0
  32.  
  33.  
  34.     def paintEvent(self, paintEvent):
  35.         painter = QtGui.QPainter(self)
  36.  
  37.         if(self.pixmap):
  38.             painter.drawPixmap(0, 0, self.pixmap)
  39.  
  40.         if(self.text):
  41.             painter.setPen(QtCore.Qt.blue)
  42.             painter.setFont(QtGui.QFont("Arial", 30))
  43.             painter.drawText(self.rect(), QtCore.Qt.AlignCenter, self.text)
  44.  
  45.     def startDownload(self):
  46.         self.setText(str(self.dl_n))
  47.         self.dl_n += 1
  48.         print("Starting Download {0}".format(self.dl_n))
  49.  
  50.         self.download_thread = DownloadThread('http://192.168.0.50:8080/images/logo.gif')
  51.         self.download_thread.start()
  52.         self.download_thread.data_downloaded.connect(self.ondownloadFinished)
  53.  
  54.     def ondownloadFinished(self):
  55.         self.paintImage()
  56.         print("download finished?")
  57.         if self.dl_n < 5:
  58.             self.startDownload()
  59.  
  60.     def paintImage(self):
  61.         print("Painting")
  62.         pixmap = QtGui.QPixmap()
  63.         pixmap.loadFromData(self.download_thread.get_data())
  64.         self.setPixmap(pixmap)
  65.  
  66.     def setPixmap(self, pixmap):
  67.         self.pixmap = pixmap
  68.         self.setMinimumSize(pixmap.width(), pixmap.height())
  69.         self.update()
  70.  
  71.     def setText(self, text):
  72.         self.text = text
  73.         self.update()
  74.  
  75.  
  76. class MainWindow(QtGui.QWidget):
  77.     def __init__(self):
  78.         super(MainWindow, self).__init__()
  79.         self.imagepreview = ImagePreview()
  80.         self.button = QtGui.QPushButton("Start")
  81.         self.button.clicked.connect(self.imagepreview.startDownload)
  82.         layout = QtGui.QVBoxLayout()
  83.         layout.addWidget(self.button)
  84.         layout.addWidget(self.imagepreview)
  85.         self.setLayout(layout)
  86.  
  87.  
  88.  
  89. if __name__ == "__main__":
  90.     import sys
  91.  
  92.     try:
  93.         app = QtGui.QApplication(sys.argv)
  94.     except RuntimeError:
  95.         pass
  96.  
  97.     mainwindow = MainWindow()
  98.     mainwindow.show()
  99.  
  100.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement