我正在做一个项目,我需要从网络位置下载和解析 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 对象的实例化实例从信号传递到插槽的正确方法吗?
谢谢。