1

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()

最初の問題は、シグナル(processResponseprocessError)が呼び出されないことです(との接続を宣言してもself.connect(.., SIGNAL(..), ..))。2番目の問題は、メソッドを呼び出しているときに、このコードが最後の行でセグメンテーション違反を引き起こすことですisFinished。APIメソッド内でこのメソッドを呼び出すと、正しく機能します。

私は、replyオブジェクトがガベージコレクションされるか、何らかの理由で削除されることが原因だと考えていたので、オブジェクト変数authenticateに明示的にバインドするメソッドの2番目のバージョンを作成しました。replyセグメンテーション違反も発生します。

私のコードの何が問題になっていますか?

4

1 に答える 1

1

私はアホです :(

この問題はmanager、ではなくオブジェクト変数にバインドすることで解決されましたreply。マネージャーはガベージコレクションされました(またはそのようなsmth)。

于 2012-09-05T19:33:42.510 に答える