在信号和插槽之间传递参数时的PyQt解除绑定方法
我正在从事一个项目,在这个项目中,我需要从网络位置下载并解析一个XML文件。我一直在尝试使用QtNetwork模块来实现这一点,但我遇到了一个看似简单的问题,我花了很多时间试图解决这个问题。我的代码如下:在信号和插槽之间传递参数时的PyQt解除绑定方法,qt,pyqt,pyqt4,Qt,Pyqt,Pyqt4,我正在从事一个项目,在这个项目中,我需要从网络位置下载并解析一个XML文件。我一直在尝试使用QtNetwork模块来实现这一点,但我遇到了一个看似简单的问题,我花了很多时间试图解决这个问题。我的代码如下: class NetworkAccessor(QObject): done = False def importXml(self): self.manager = QNetworkAccessManager() self.manager.finis
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时,出现以下错误:
回溯(最近一次呼叫最后一次):
文件“C:/SVN Local/Thermal/PyQtTestTemplate.py”,第40行,在updateUi中
f=networkAccessor.importXml()
文件“C:/SVN Local/Thermal/PyQtTestTemplate.py”,第14行,在importXml中
self.connect(self.manager,SIGNAL(“finished(QNetworkReply*)”),self.fileReady(QNetworkReply))
文件“C:/SVN Local/Thermal/PyQtTestTemplate.py”,第20行,在fileReady中
self.f.write(response.readAll())
TypeError:QIODevice.readAll():未绑定方法的第一个参数的类型必须为“QIODevice”
这似乎表明传递给fileReady方法的参数没有实例化。此外,上面的print type(response)
语句表明response
属于PyQt4.QtNetwork.QNetworkReply
类型
我尝试了多种方式将信号连接到插槽,包括“老式”方式:self.connect(self.manager,signal(“finished(QNetworkReply*)”)、self.fileReady(“QNetworkReply”))
,以及使用短路参数传递,但都没有成功
有人能告诉我将QNetworkReply对象的实例化实例从信号传递到插槽的正确方法吗
谢谢。只要将插槽传递给它,QNetworkReply对象将通过以下信号:
self.manager.finished.connect(self.fileReady)
没关系,我已经弄明白了。完成的信号没有在我的程序中发出,但是当我以我所做的方式指定slot时,slot方法立即被调用,并将一个未初始化的QNetworkReply对象传递给该方法。因此,现在又提出了另一个问题:为什么没有升起完成的旗帜?这个文件只有几千字节长,我确信地址是正确的。不过,该文件每隔一秒钟左右就会更新一次,但我认为这与此无关。