質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1497閲覧

Python Kivy の起動が遅い

vibrato

総合スコア52

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

2クリップ

投稿2017/12/12 14:15

タイトル通りなのですが、kivyの起動が遅いと感じています。
改善する方法はないものでしょうか?
どんなに短いコードであったとしても、平均4秒はかかります。
遅いときは10秒かかることも…

プログラム経験も浅いので、どれほどの起動速度が平均なのかもわかりませんが、
ユーザー目線で言えば、1秒以下であるのが望ましいかなと思います。
(フル3Dなどのゲームならば10秒くらい待つのも解るのですが…)

例えて言えばQRコードリーダーのようなアプリを作るとしたとき起動に10秒かかっていては、
サービスとして大きな欠点になり得ると思うので、出来れば起動を速くしたいのですが、
何か改善する方法はありますでしょうか?

ご教授のほど宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんな感じでスプラッシュスクリーンを用意して、それを表示してからkivy関連のコードが走るようにしてはいかがでしょうか?UXの観点から、ただ無反応に待たせるよりは心象がよくなると思います。

python

1 2from threading import Thread 3from tkinter import Label 4from tkinter import Tk 5 6 7class Splash(Thread): 8 def __init__(self, text, factor=0.4): 9 Thread.__init__(self) 10 self.setName("Splash") 11 self.setDaemon(True) 12 self.text = text 13 self.factor = factor 14 self.screen = None 15 16 def run(self): 17 self.screen = Tk() 18 Label(self.screen, text=self.text).pack() 19 screen_w = self.screen.winfo_screenwidth() 20 screen_h = self.screen.winfo_screenheight() 21 w, h = screen_w * self.factor, screen_h * self.factor 22 x, y = (screen_w/2) - (w/2), (screen_h/2) - (h/2) 23 self.screen.geometry("%dx%d+%d+%d" % (w, h, x, y)) 24 self.screen.overrideredirect(True) 25 self.screen.mainloop() 26 27 show = Thread.start # Alias 28 29 def hide(self): 30 if self.screen: 31 self.screen.quit() 32 33 def __enter__(self): 34 self.show() 35 36 def __exit__(self, *_): 37 self.hide() 38 39 40with Splash("ちょっとまってね"): 41 from kivy.app import App 42 from kivy.uix.button import Button 43 44 45class TestApp(App): 46 def build(self): 47 return Button(text='Hello World') 48 49 50if __name__ == '__main__': 51 TestApp().run()

投稿2017/12/13 11:06

編集2017/12/13 11:08
YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vibrato

2017/12/13 16:53

回答ありがとうございます。 わざわざコードまで書いていただき重ねてありがとうございます。 >>ただ無反応に待たせるよりは心象がよくなると思います。 試しに実装してみたところ、確かに同じ待機時間であれば、だんぜんこちらの方が良いと解りました! とても勉強になりました! ただ、今回は質問での例えで書いた様に、QRコードの様なレスポンス重視のサービスを作ろうと考えていますので、別の機会があればこの教えていただいた方法を用いて、取り組んでいきたいと思います。 ありがとうございました!
guest

0

ベストアンサー

端的に言えば改善する方法は使用するPCのグラフィックボードの性能を上げるしかないです。

なぜKivyの表示が遅いかというと実は質問の中に答えがあります。

>フル3Dなどのゲームならば10秒くらい待つのも解るのですが…
Kivyは画面の描画に3次元コンピュータグラフィックス用 API であるOpenGLを使用しています。なので実は描画に関していうと2Dのように見えますが実はフル3Dになります。なので描画は遅いです。

これは推測ですがマルチプラットフォームということでどの環境でも同じUIを表示しようとした結果OpenGLを描画に使用したのだと思います。

<参考>Programming Guide(翻訳済み) » Architectural Overview(翻訳済み)

そのため起動を早くするのであれば描画を別のものに置き換える必要があって海外だとKivyの公式とは別にwebkitで描画しようとしたりモバイルであればネイティブなパーツで置き換えようとしている人はいるのですがあまり目立った成果はでていないみたいです。

なので起動を早くする方法は現在のところグラフィックボードを良いものを入れるとかしかないです。例えばGTX1060とかで動かすと起動は1秒ぐらいになります。

>例えて言えばQRコードリーダーのようなアプリを作るとしたとき起動に10秒かかっていては、サービスとして大きな欠点になり得る

たぶんサービスの内容にもよるのですが毎日起動してちょっと動かすみたいアプリはKivyは不向きかもしれません。

起動を早くする方法はないですが、ほかの方が指摘されているようにスプラッシュスクリーンを入れるとかするとだいぶ印象は変わってくるかと思います。

投稿2017/12/13 14:50

dario_okazaki

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vibrato

2017/12/13 17:12

回答ありがとうございます。 >>Kivyは画面の描画に3次元コンピュータグラフィックス用 API であるOpenGLを使用しています。 >>なので描画は遅いです。 こちらのお話は事前情報があり多少頭の片隅にはあったのですが、 >>あまり目立った成果はでていないみたいです。 >>現在のところグラフィックボードを良いものを入れるとかしかないです。 こちらを聞いて撃沈です; >>ちょっと動かすみたいアプリはKivyは不向きかもしれません。 そうなんですね;もう少し試行錯誤し、それでもだめなら別の手段を考えます。 丁寧に教えていただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問