QT4Reactor / Scrapy / PyQt4

时间:2013-02-26 11:19:52

标签: pyqt4 scrapy qeventloop

如何正确使用Qt4Reactor?

我有一个运行Scrapy的PyQt4应用程序来解析网站并在ui中显示结果。

当用户单击按钮时,刮刀将在另一个进程中启动。 ui块和刮刀正在运行。刮刀完成后,数据显示在ui中。我想要的是Scrapy运行时的非阻塞ui。

由于Scrapy建立在扭曲之上,我必须使用新的进程而不是线程来从ui启动它。

我的问题是如何尽可能简单地实现非阻塞ui?

我试着像这样使用Qt4Reactor:

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)

    import qt4reactor
    qt4reactor.install()

    MainWindow = DiscogsRenamer()
    MainWindow.show()

    sys.exit(app.exec_())
    reactor.runReturn()

这会导致错误:

Traceback (most recent call last):
    File "/home/f/work/py/discogs_renamer/main.py", line 224, in <module>
        qt4reactor.install()
    File "/usr/local/lib/python2.7/dist-packages/qt4reactor.py", line 338, in posixinstall
        installReactor(p)
    File "/usr/local/lib/python2.7/dist-packages/twisted/internet/main.py", line 32, in installReactor
        raise error.ReactorAlreadyInstalledError("reactor already installed")
twisted.internet.error.ReactorAlreadyInstalledError: reactor already installed

我在这个主题上发布了另一个问题: Integrate Scrapy/Twisted event loop in PyQt4 Main loop

提前致谢。

1 个答案:

答案 0 :(得分:0)

您必须先导入并安装()导入twisted.internet.reactor之前的qt4reactor

import qt4reactor
qt4reactor.install()
from twisted.internet import reactor