PyQt - 在GUI中运行循环

6

我有一段Python代码内部有一些while循环,但我不知道如何将其与我的PyQt GUI一起使用 - 我只能运行Qt窗口或该循环(但是窗口则不显示)。 有什么解决方案吗? 我读到了一些关于QThreads或QTimers的内容,但我不知道如何使用它。


你应该发布你的代码和循环。 - user1786283
1个回答

5

有一个问题与你的非常相似,在PyQt中使用QThread进行后台线程。答案提供了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_())

从这里开始更新多线程PyQT中的GUI元素


对于urls中的每个url: downloader = DownloadThread(url, self.list_widget) self.threads.append(downloader) # 纠正拼写错误? downloader.run() - Larry_C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接