Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import urllib2
- from PyQt4 import QtCore, QtGui
- class SignalHelper(QtCore.QObject):
- data_downloaded = QtCore.pyqtSignal(object)
- class DownloadThread(QtCore.QRunnable):
- def __init__(self, url):
- QtCore.QRunnable.__init__(self)
- self.url = url
- self._signal_helper = SignalHelper()
- self.data_downloaded = self._signal_helper.data_downloaded
- def run(self):
- print 'thread', QtCore.QThread.currentThread()
- info = urllib2.urlopen(self.url).info()
- self.data_downloaded.emit('%s\n%s' % (self.url, info))
- class MainWindow(QtGui.QWidget):
- def __init__(self):
- super(MainWindow, self).__init__()
- self.list_widget = QtGui.QListWidget()
- self.button = QtGui.QPushButton("Start")
- self.button.clicked.connect(self.start_download)
- layout = QtGui.QVBoxLayout()
- layout.addWidget(self.button)
- layout.addWidget(self.list_widget)
- self.setLayout(layout)
- #
- ## Thread pool with maximum 2 simultaneously running threads
- #
- self.thread_pool = QtCore.QThreadPool()
- self.thread_pool.setMaxThreadCount(2)
- def start_download(self):
- urls = ['http://google.com', 'http://twitter.com', 'http://yandex.ru',
- 'http://stackoverflow.com/', 'http://www.youtube.com/']
- for url in urls:
- downloader = DownloadThread(url)
- downloader.data_downloaded.connect(self.on_data_ready)
- self.thread_pool.start(downloader)
- def on_data_ready(self, data):
- self.list_widget.addItem(data)
- if __name__ == "__main__":
- app = QtGui.QApplication(sys.argv)
- window = MainWindow()
- window.resize(640, 480)
- window.show()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement