混乱

2017-09-15 12 views
0

は、実際に私は私のビデオを再生するkivy.uix.videoplayerムールを使用して、私は私がビデオを再生するためのコードを書いている関数を作りましたそれは私が下記のように「リターン」のVideoPlayer()を使用していないときには非常によくビデオを再生returnを使用します。混乱

def hi(self): 
    VideoPlayer(source='it.mp4', state='play') 

そして、音だけが再生、ビデオが示され、エラーがつまり来ていません。

[ERROR ] [Image  ] Error loading texture it.mp4 

私はそうreturn声明について私をクリアしてください (私は常にあった)ここreturnを使用して、少し混乱しています。

+1

'VideoPlayer'によって作成されたオブジェクトは、参照が保存されていないため、呼び出しが完了するとすぐにガベージコレクションの対象となります。任意の名前に 'hi'の戻り値を代入しないと、' return'文で同じ動作を得ることができます。 – chepner

+0

@chepnerありがとうございました –

答えて

5

何も参照していないときは、Pythonオブジェクトは自動的にが削除されます。が削除されます。オブジェクトを返さないことで、基本的にはVideoPlayerオブジェクトを参照するものがないことが保証され、関数が返ってくるとPythonオブジェクトが削除されます。

あなたがreturnを使用

、おそらく何 通話 hi()生きてそれを維持、返さ VideoPlayer()インスタンスへの参照を保存する方法: return Noneなし

video_player = someinstance.hi() 

が代わりに返されます。 returnステートメントを終了しても、戻り値をどこにも格納せずにsomeinstance.hi()を直接呼び出すと、同じ動作になります。 VideoPlayer()オブジェクトが参照されていないため削除されています。

Kivyはではありません。 Python; Pythonオブジェクトはネイティブなデータ構造とコードの単なるプロキシです。サウンドハンドラは、VideoPlayer()が作成された状態で開始されましたが、削除されたオブジェクトがすぐにクリーンアップされませんでした。

+0

Thanx @MartijinPieters –