2013-05-25 4 views
4

У меня есть код Python с некоторым циклом while внутри, но я не знаю, как заставить его работать с моим GUI PyQt - я могу запускать только Qt-окно или этот цикл (но тогда окна не отображаются). Есть ли какие-либо решения? Я читал о некоторых QThreads или QTimers, но я не знаю, как его использовать.PyQt - запуск цикла внутри GUI

+0

Вы должны опубликовать свой код и ваши петли. – enginefree

ответ

4

Существует вопрос, который очень похож на ваш, Background thread with QThread in PyQt. В ответе есть 3 уникальных метода использования qthread.

Этот учебник может быть очень полезным, http://joplaete.wordpress.com/2010/07/21/threading-with-pyqt4/

Здесь также очень хороший пример:

import sys 
import urllib2 

from PyQt4 import QtCore, QtGui 


class DownloadThread(QtCore.QThread): 
    def __init__(self, url, list_widget): 
     QtCore.QThread.__init__(self) 
     self.url = url 
     self.list_widget = list_widget 

    def run(self): 
     info = urllib2.urlopen(self.url).info() 
     self.list_widget.addItem('%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) 

    def start_download(self): 
     urls = ['http://google.com', 'http://twitter.com', 'http://yandex.ru', 
       'https://stackoverflow.com/', 'http://www.youtube.com/'] 
     self.threads = [] 
     for url in urls: 
      downloader = DownloadThread(url, self.list_widget) 
      self.threads.append(downloader) 
      downloader.start() 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    window = MainWindow() 
    window.resize(640, 480) 
    window.show() 
    sys.exit(app.exec_()) 

Отсюда Updating GUI elements in MultiThreaded PyQT

Смежные вопросы