PySideを使用して、Webページの読み込みとスクリーンショットの作成を自動化するアプリケーションを作成しています(いいえ、既存のソリューションのいずれも使用できません)。アプリの一部がURLのリストを取得し、新しい QWebPageオブジェクトを使用して各URLを順番に読み込みます。ページがロードされると、スクリーンショットが作成され、QWebPageオブジェクトが削除されます。PySide QWebPageで誤った "シグナルシグネチャ"エラーが発生する
すべての今して、十分に実行与えられた、私は例外RuntimeError例外として、PySideから次のエラーが発生します。
Invalid Signal signature: loadStarted()
Failed to connect signal loadStarted().
最初の行は、(おそらくQtのことで?)STDERRに出力され、2行目Pythonの例外です。
loadStarted()は、作成したものではなく、組み込みのQWebPage信号です。これは90%の時間で動作し、何が失敗するかを把握することができませんでした。
このアプリケーションは、PySide/QtをuWSGIで提供されるWebアプリケーションにフックするため、設計上非常に珍しいです。つまり、QApplicationイベントループではなく、それぞれのローカルイベントループを使用しています。ページの読み込み。私はQtやPythonのどちらでも経験していないので、私は多くの間違いを犯している可能性がありますが、それらが何であるか把握することはできません。
私はthisポストはそれと関連があるかもしれないと思っていますが、わかりません。
次はどこを参考にしたらいいですか?
UPDATE:信号は、次のコードを介して接続されている:
class MyWebPage(QWebPage):
def __init__(self, parent=None):
super(MyWebPage, self).__init__(parent)
self.loadStarted.connect(self.started)
self.loadFinished[bool].connect(self.finished)
MyWebPageオブジェクトは、プロセスがシャットダウンされるまで削除されない異なる単一QObjectのインスタンスの子として作成されます。それらは私が一度完了したら、page.deleteLater()を呼び出すことによって削除されます。私は地元のイベントループを実行しておりますので、私は呼び出すことにより、ローカルイベントループを終了した後に発生する繰延欠損をトリガ:(私はたまにで、これらのエラーを取得したい
# self.eventLoop is the local event loop, which at this stage is not running
self.eventLoop.processEvents()
# self.app is the QApplication instance
self.app.sendPostedEvents(None, QEvent.DeferredDelete)
信号はどのように接続されていますか?ウェブページオブジェクトが正しく削除されていることを確認するためにどのようなコードを使用していますか?問題を再現する簡単なテストケースを作成しようとしましたか? – ekhumoro
私は単純化されたテストケースを作成しようとしましたが、これまでのところできませんでした - これはそのまま再現するのが難しいです。質問に役立つ情報を追加しました。 – shevron
マルチスレッドが起こっていますか? – Luke