PythonのGUI開発用ライブラリ「Kivy」でOpenGLエラーに遭遇しました。
現象と回避策について記します。
OpenGLエラーが発生した現象
「Kivy」でGUIに何かしらの画像を表示させたいときに使用する「Image」モジュール。
「Image」の変数「source」に表示したい画像のurlを入れ、「reload()」すると、GUI上に画像を表示してくれます。
この「source」に格納する画像を動的に変更していたところ、急にGUIが落ちてしまいました。
何の例外も出力しないのでWindowsの「イベントビューワー」を見たところ、「OPENGL32.dll」でエラーが発生していることがわかりました。
エラーコードは「0xc000000005」なので、許可されていないメモリにアクセスしたことが原因だと考えられます。
が、自分のソースコードからOpenGLのアクセス違反を特定するのは不可能でした。
エラー回避方法
エラーが発生するのは、「Image」モジュールの変数「source」の値を、表示したい画像urlに書き換えるのが原因です。
そこで、「source」の値は変更せずに、表示したい画像urlをsourceの値に変更することにしました。
例えば、
- 今のsourceの値: C://images/display.jpg
- 表示したい画像url: C://images/next_display.jpg
だとすると、今まではsouceの値をC://images/next_display.jpgに書き換えていました。
そうではなく、表示したい画像であるC://images/next_display.jpgをC://images/display.jpgに置き換えるのです。
画像を置き換えた後、Imageのreload()を実行すると、エラーが発生することなくGUIに表示される画像が変化しました。
まとめ
Kivyで遭遇したエラーについて、現象と回避策をまとめました。
最近はデスクトップGUIアプリを作ることが少なくなっているせいか、Kivyに関する情報もネットにあまりありません。
しかし、PythonのGUI開発用モジュールの中では使いやすく仕上がっているので、今後もKivyに関する情報をシェアしていきます。
以上!
コメント