« dlibがマルチバイトでこける件 | メイン | python 標準出力の取得 »

2022年01月05日

python kivyのスレッド

python自体にスレッドの仕組みは入っている

thread = threading.Thread(target=self.showImg, args=(path,file))
thread.start()

とかすれば動作します。


が、しかし、しかしながらkivyの場合はメインスレッド以外から表示を変更することには対応していないよう。画像の表示を変更しようとしても真黒になるだけでした。

こういう時はkivyについてるスレッドの仕組み
Clock.schedule_once(...)
を使うと良いらしい

https://github.com/kivy/kivy/issues/1317

結局 画像を作る重い処理は threading.Thread( で後ろに回して
表で Clock.schedule_interval(self.updateImg, 0.2) として繰り返して 画像が出来上がってたら表示変更という流れにしました。表示変更終わったら Clock.unschedule(self.updateImg) しました

メインスレッド以外での画面更新はやはり対応していないっぽい
Clock.schedule_once や Clock.unscheduleもメインスレッドだと理解した。正しいのかはわからないがw

投稿者 muuming : 2022年01月05日 15:10