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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

2797閲覧

Kivyを終了させる方法を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2017/11/17 07:46

編集2017/11/17 08:03

###前提・実現したいこと
PythonにKV languageを直書きしています。なので、プログラム自体の終了(Ctrl+Cなど)ではなく、Kivyで作成したアプリのみを終了させる(窓が閉じるところまで)方法を知りたいです。

###試してみたこと
公式ドキュメントや質問サイト等を調べ、以下を試してみましたがダメでした。どのようにすればプログラム内でKivyを終了させることが出来るのか、どなたかご教授ください。

以下はエラーを吐くこともなく完全にスルーされてしまいました。

App.get_running_app().stop()
App.stop()

以下はボタンを押下しても無反応でした

Button: id: btnExit text: "Exit" on_press: app.stop

###該当のソースコード

python

1Builder.load_string(""" 2<MyApp>: 3 Button: 4 id: btn 5 font_size: 68 6 Button: 7 id: btnExit 8 text: "Exit" 9 on_press: app.stop 10""") 11 12num = 0 13class MyApp(App, BoxLayout): 14 def build(self): 15 self.ids.btn.text = 'by Python' 16 global num 17 num += 1 18 return self 19 20 21if __name__ == "__main__": 22 global num 23 while True: 24 if num == 0: 25 MyApp().run() 26 num += 1 27 elif num == 2: 28 #ここでKivyを終了したい 29 MyApp().stop() 30 num+=1 31 else: 32 break 33

###補足情報(言語/FW/ツール等のバージョンなど)
バージョン
Kivy 1.10.1
Python 2.7.9

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

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

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

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

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

guest

回答2

0

似たような問題を見つけましたのでご参考にしてみてください。ラズパイはいろいろデバイス固有の問題があるようです。

https://stackoverflow.com/questions/35203141/how-to-exit-python-program-on-raspberry

→要約すると、プログラムループを事前終わらせてから、sys.exit()すると終了できるというものだそうです

https://www.raspberrypi.org/forums/viewtopic.php?f=32&t=146737
→今回と内容がちがうかもしれませんがご参考までに

投稿2017/11/17 22:02

dario_okazaki

総合スコア282

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

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

0

ベストアンサー

正しい方法かは不明ですが、on_pressを以下のように変更することでExitボタンでウインドウを閉じてwhileループに戻ることができました。

Python

1Builder.load_string(""" 2 # 略 3 on_press: app.root_window.close()

以下検証コードです。

from kivy.lang import Builder from kivy.app import App from kivy.uix.boxlayout import BoxLayout Builder.load_string(""" <MyApp>: Button: id: btn font_size: 68 Button: id: btnExit text: "Exit" on_press: app.root_window.close() """) class MyApp(App, BoxLayout): def build(self): self.ids.btn.text = 'by Python' return self if __name__ == "__main__": bApp = False while True: if bApp is False: MyApp().run() bApp = True else: if input('input 9 to exit:') == 9: break

実行結果。Win10x64上。

>python hoge.py [INFO ] [Logger ] Record log in C:\Users\user.kivy\logs\kivy_17-11-17_29.txt [INFO ] [Kivy ] v1.10.0 [INFO ] [Python ] v2.7.14 |Anaconda custom (64-bit)| (default, Nov 8 2017, 13:40:45) [MSC v.1500 64 bit (AMD64)] [INFO ] [Factory ] 194 symbols loaded [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored) [INFO ] [OSC ] using <thread> for socket [INFO ] [Window ] Provider: sdl2 [INFO ] [GL ] Using the "OpenGL" graphics system [INFO ] [GL ] GLEW initialization succeeded [INFO ] [GL ] Backend used <glew> [INFO ] [GL ] OpenGL version <4.0.0 - Build 10.18.10.4425> [INFO ] [GL ] OpenGL vendor <Intel> [INFO ] [GL ] OpenGL renderer <Intel(R) HD Graphics 4000> [INFO ] [GL ] OpenGL parsed version: 4, 0 [INFO ] [GL ] Shading version <4.00 - Build 10.18.10.4425> [INFO ] [GL ] Texture max size <16384> [INFO ] [GL ] Texture max units <16> [INFO ] [Window ] auto add sdl2 input provider [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked [INFO ] [Text ] Provider: sdl2 [INFO ] [Base ] Start application main loop [INFO ] [GL ] NPOT texture support is available [ERROR ] [Base ] No event listeners have been created [ERROR ] [Base ] Application will leave input 9 to exit:1 input 9 to exit:9 >

投稿2017/11/17 09:04

編集2017/11/17 09:39
can110

総合スコア38233

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

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

退会済みユーザー

退会済みユーザー

2017/11/17 09:34 編集

ありがとうございます。検証コードを試したところ、確かにボタンを押下したところウインドウも閉じることができました。しかし、whileループに戻ることが出来ず、 ``` [INFO ] [Base ] Leaving application in progress... Traceback (most recent call last): File "kivy_test.py", line 27, in <module> MyApp().run() File "/usr/local/lib/python2.7/dist-packages/kivy/app.py", line 829, in run runTouchApp() File "/usr/local/lib/python2.7/dist-packages/kivy/base.py", line 502, in runTouchApp EventLoop.window.mainloop() File "/usr/local/lib/python2.7/dist-packages/kivy/core/window/window_egl_rpi.py", line 92, in mainloop self._mainloop() File "/usr/local/lib/python2.7/dist-packages/kivy/core/window/window_egl_rpi.py", line 87, in _mainloop EventLoop.idle() File "/usr/local/lib/python2.7/dist-packages/kivy/base.py", line 354, in idle window.dispatch('on_flip') File "kivy/_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch (/tmp/pip-0Hs1f_-build/kivy/_event.c:7726) File "/usr/local/lib/python2.7/dist-packages/kivy/core/window/__init__.py", line 1222, in on_flip self.flip() File "/usr/local/lib/python2.7/dist-packages/kivy/core/window/window_egl_rpi.py", line 84, in flip egl.SwapBuffers(self.egl_info[0], self.egl_info[1]) File "kivy/lib/vidcore_lite/egl.pyx", line 596, in kivy.lib.vidcore_lite.egl.SwapBuffers (/tmp/pip-0Hs1f_-build/kivy/lib/vidcore_lite/egl.c:7166) File "kivy/lib/vidcore_lite/egl.pyx", line 322, in kivy.lib.vidcore_lite.egl.raise_egl_error (/tmp/pip-0Hs1f_-build/kivy/lib/vidcore_lite/egl.c:1877) kivy.lib.vidcore_lite.egl.EGLError: EGL_NOT_INITIALIZED (code x3001) ``` というエラーを吐いてプログラムを終了してしまいました。 何が原因でしょうか…?調べても分かりませんでした。ご教授ください。よろしくお願いします。
can110

2017/11/17 09:42

当方での実行結果を追記しました。 ログに何かエラー吐かれてますが、mainループは正常に動作しました。 kivyは癖が強くてほとんど触ったことなく推測なのですが、ライブラリや環境の違い、かもしれません。
退会済みユーザー

退会済みユーザー

2017/11/17 09:51

こちらはRaspbian GNU/Linux 8.0 (jessie)で動かしております。デバイス側の問題かもしれません。 ありがとうございました
can110

2017/11/17 09:55

う~ん。お役に立てずすみません。
dario_okazaki

2017/11/17 22:04

横から失礼します。このエラーはウインドウがおちているがコンソールが生きているとラズパイではエラーになるみたいです。 ご参考までに。 https://github.com/kivy/kivy/issues/5360 少なくともこの方法ではラズパイでは使用できないみたいです
can110

2017/11/20 09:03

情報ありがとうございます。環境(ビデオライブラリ?)によるようですね。 たまたまWin10では動作しているけど、やはり正しい閉じ方ではないかも。
退会済みユーザー

退会済みユーザー

2017/11/22 01:14

お二方ともありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問