5

QWidget 内で VLC MediaPlayer インスタンスをホストする PySide アプリケーションがあります。QMainWindow の close イベントを介して、または QApplication.quit() を使用してアプリケーションを閉じると、UI が消え、「python.exe が動作を停止しました」という Windows ダイアログが表示されます。

QApplication は、カスタム QWidget を含むカスタム QMainWindow クラスをホストします (これはすべての UI タスクを処理し、QMainWindow はスレッド間のメッセージングを処理します - アプリはキーストロークを記録し、バックグラウンド スレッドで出力ファイルを書き込みます)。ビデオの現在の位置で LineEdit を更新するメインの QWidget を実行するタイマーもあります。

ファイルが書き込まれているかどうかに関係なく、クラッシュが発生します (コードはコメントアウトされています)。

ある種のガベージ コレクションを実行する必要がありますか、それともオブジェクトを特定の順序で破棄する必要がありますか? タイマーを停止し、MediaPlayer、インスタンス、および MediaPlayer をホストするフレームをすべて None に設定してから、フレームを破棄 (self.videoFrame.destroy()) しようとしましたが、アプリはまだクラッシュします。

基本的なコードは、vlc の repo exampleのサンプル Qt アプリケーションに基づいており、特別なガベージ コレクションやオブジェクトの破棄はありません。

Windows XP で Python 2.6 を実行しています。現在、コマンド ラインから直接 Python を実行していますが、このクラッシュが修正されたら、Py2Exe で exe を作成するように設定しています。

4

2 に答える 2

6

関数のラッピングは私を助けました

def main():
    ...

if __name__ == '__main__':
    main()
于 2015-02-09T12:37:57.033 に答える