PyQt4ベースのアプリ用のある種のAPIクライアントを作成しようとしています。そして、このドキュメントに従って、私はこのコードを書きました:
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(..), ..)
)。2番目の問題は、メソッドを呼び出しているときに、このコードが最後の行でセグメンテーション違反を引き起こすことですisFinished
。APIメソッド内でこのメソッドを呼び出すと、正しく機能します。
私は、reply
オブジェクトがガベージコレクションされるか、何らかの理由で削除されることが原因だと考えていたので、オブジェクト変数authenticate
に明示的にバインドするメソッドの2番目のバージョンを作成しました。reply
セグメンテーション違反も発生します。
私のコードの何が問題になっていますか?