我正在尝试为基于PyQt4的应用程序编写某种API客户端。并且,在this documentation之后我编写了这段代码:
from PyQt4 import QtCore, QtNetwork
class API(QtCore.QObject):
def processResponse(self, response):
print 'response'
response.deleteLater()
def processError(self, error):
print 'error'
def authenticate(self, authUrl, login, password):
manager = QtNetwork.QNetworkAccessManager()
request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
reply = manager.get(request)
reply.error.connect(self.processError)
reply.finished.connect(self.processResponse)
return reply
def authenticate2(self, authUrl, login, password):
manager = QtNetwork.QNetworkAccessManager()
request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
self.reply = manager.get(request)
self.reply.error.connect(self.processError)
self.reply.finished.connect(self.processResponse)
return self.reply
p = API()
z = p.authenticate('http://dev.dentv.ru/edda/v1/token/', 'test', 'test')
print z
print z.isFinished()
第一个问题是 - 没有信号(processResponse
,processError
)被调用(即使我声明与self.connect(.., SIGNAL(..), ..)
的连接)。第二个问题是,当我调用isFinished
方法时,此代码会导致最后一行出现段错误。如果我在API方法中调用此方法,它可以正常工作。
我在想,原因是reply
对象被垃圾收集或以某种方式被删除,所以我编写了authenticate
方法的第二个版本,并使用显式reply
绑定到对象变量。它也会导致段错误。
我的代码有什么问题?
答案 0 :(得分:1)
我是个白痴:(
通过将manager
绑定到对象变量而不是reply
来解决问题。管理员被垃圾收集(或者像这样)。