あきらぼ

テック系ブログ

【Python】Tkinterの再帰関数でRecursionError

こんにちは。

 

TKinterのafterによる再帰関数のエラーでハマったので少しそのこと書きます。

 

 

 

今回は以下のコードで「RecursionError: maximum recursion depth exceeded while calling a Python object」のエラーが生じてしまいました。

Tkinterでのafterメソッドでの再帰関数は定期実行でよく使う方法だと思います。

こちらは再帰関数によってメモリ使用量が増えすぎたりするのを防止するためのエラーだそうです。

 

 

結論としてはtk.afterで再帰する際にメソッドの引数はもともとないのですが、「()」を使用しないことでこちらのエラーは生じません。

 

こちらのコードでいう22行目の

self.after(100, self.DrawAnnotation())

self.after(100, self.DrawAnnotation)

に変更することでこちらのエラーは生じません。

引数があると再帰の際にメモリをリリースせずに新たに割り当ててしまうからでしょうか。