在信号和插槽之间传递参数时的PyQt未绑定方法

时间:2012-06-13 15:58:10

标签: qt pyqt pyqt4

我正在开发一个项目,我需要从网络位置下载并解析XML文件。我一直在尝试使用QtNetwork模块来实现这一目标,但我遇到了一个看似简单的问题,我花了很多时间试图解决这个问题。我的代码如下:

class NetworkAccessor(QObject):
    done = False
    def importXml(self):
        self.manager = QNetworkAccessManager()
        self.manager.finished.connect(self.fileReady(QNetworkReply))
        self.manager.get(QNetworkRequest(QUrl("http://192.168.5.243/details.xml")))

    def fileReady(self, response):
        self.f = QTemporaryFile()
        print type(response)
        self.f.write(response.readAll())
        self.done = True
        print "Done"

当我实例化NetworkAccessor类并调用importXml时,我收到以下错误:

Traceback (most recent call last):
File "C:/SVN-Local/Thermal/PyQtTestTemplate.py", line 40, in updateUi
f = networkAccessor.importXml()
File "C:/SVN-Local/Thermal/PyQtTestTemplate.py", line 14, in importXml
self.connect(self.manager,SIGNAL("finished(QNetworkReply*)"),self.fileReady(QNetworkReply))
File "C:/SVN-Local/Thermal/PyQtTestTemplate.py", line 20, in fileReady
self.f.write(response.readAll())
TypeError: QIODevice.readAll(): first argument of unbound method must have type 'QIODevice'

似乎表明传递给fileReady方法的参数没有实例化。此外,上面的print type(response)声明表明response属于PyQt4.QtNetwork.QNetworkReply类型。

我尝试了各种方法将信号连接到插槽,包括“老式”方式:self.connect(self.manager,SIGNAL("finished(QNetworkReply*)"),self.fileReady("QNetworkReply"))以及使用短路参数传递但没有成功。

有人可以告诉我将QNetworkReply对象的实例化实例从信号传递到插槽的正确方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

只需将其传递给插槽,QNetworkReply对象将通过信号传递:

self.manager.finished.connect(self.fileReady)