7

IRC クライアントを Python 2.6 から 3.3 に移植するのに忙しく、PyQt で問題に遭遇しました。アプリケーションはもともと PyQt4 を使用していましたが、PyQt5 で動作するように再コーディングしていますが、行参照なしでエラーが発生しています:「QWidget: QPaintDevice の前に QApplication を構築する必要があります」。問題を 1 つのクラスに絞り込みました。

ここですでに何度も質問されていることは理解していますが、私の場合は確実な回答を引き出すことができなかったので、私の質問が無知に見える場合はお詫び申し上げます.

コードの一部を次に示します: http://pastebin.com/Lj60icgQ

愚かな私は、インポートステートメントの直後に「app」変数を配置する必要がありましたが、配置しませんでした。次に、残りのコードをメイン ファイルの最後に配置すると、そのエラーは発生しなくなりました。助けてくれてありがとう!

4

3 に答える 3

11

残念ながら、この状況では単一のファイルでは不十分です。この 1 つのモジュールだけでは、実行フローが明確ではありません。問題のメッセージは通常、いくつかのリソースを使用しようとしたり、初期化された QApplication を必要とするいくつかのオブジェクトを作成しようとしたときに表示されます (QIcon など)。

通常、Qt ベースの GUI アプリケーションのインスタンス化は次のようになります。

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main_window = MainWindowClass()
    main_window.show()
    sys.exit(app.exec_())
于 2013-10-15T14:59:00.853 に答える
2

エラー メッセージは非常に明確です: をインスタンス化する前にQWidget(PyQt4.5継承されたQPaintDeviceand ) を描画しようとしています。しかし、あなたのコードは行ごとに読むには大きすぎます。小さなアプリケーションを構築し、機能を段階的に追加するエラーを切り分けるようにしてください。または、デバッガーを使用します ( +のような IDEは、アプリをデバッグできるはずです)。または、自己完結型の問題の小さな例を提供してください。QObjectQApplicationEclipsePyDev

于 2013-10-15T15:03:12.560 に答える