開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
- Kivy (パッケージ)
Kivyプログラミング ―Pythonで作るマルチタッチアプリ― (実践Pythonライブラリー) (原口 和也(著)、久保 幹雄(監修)、朝倉書店)の3(イベントとプロパティ)、3.4(演習問題)、演習3.3の解答を求めてみる。
コード
Python 3
#!/usr/bin/env python3 from kivy.app import App from kivy.clock import Clock from kivy.uix.button import Button from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.boxlayout import BoxLayout from kivy.core.text import LabelBase, DEFAULT_FONT LabelBase.register(DEFAULT_FONT, 'NotoSansCJKjp-Regular.otf') class MyTextInput(TextInput): pass class MyLabel(Label): def __init__(self, *args, **kwargs): Label.__init__(self, *args, **kwargs) self.text = '-' def callback(self, dt): self.input_text = self.parent.children[2] class MyButton(Button): def __init__(self, *args, **kwargs): Button.__init__(self, *args, **kwargs) self.text = '開始' def on_press(self): self.label, self.button, self.input_text = self.parent.children self.disabled_widgets = [self.button, self.input_text] try: self.count = int(self.input_text.text) if self.count < 0: raise ValueError() for widget in self.disabled_widgets: widget.disabled = True self.event = Clock.schedule_interval(self.callback, 1) except ValueError as err: self.label.text = '非負整数を入力して下さい。' except Exception as err: self.label.text = str(err) def callback(self, dt): if self.count >= 0: self.label.text = str(self.count) self.count -= 1 else: self.event.cancel() for widget in self.disabled_widgets: widget.disabled = False class SampleApp(App): def build(self): box_layout = BoxLayout(orientation='vertical') text_input = MyTextInput(text='10', size_hint_y=0.05) button = MyButton(size_hint_y=0.475) label = MyLabel(size_hint_y=0.475) widgets = [text_input, button, label] for widget in widgets: box_layout.add_widget(widget) return box_layout if __name__ == '__main__': SampleApp().run()
入出力結果(Terminal, cmd(コマンドプロンプト), Jupyter(IPython))
$ python3 sample3.py [INFO ] [Logger ] Record log in /~/.kivy/logs/kivy_19-01-05_19.txt [INFO ] [Kivy ] v1.10.1 [INFO ] [Python ] v3.7.1 (default, Oct 21 2018, 09:01:26) [Clang 10.0.0 (clang-1000.11.45.2)] [INFO ] [Factory ] 194 symbols loaded [INFO ] [Image ] Providers: img_tex, img_imageio, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored) [INFO ] [Text ] Provider: sdl2 [INFO ] [Window ] Provider: sdl2 [INFO ] [GL ] Using the "OpenGL ES 2" graphics system [INFO ] [GL ] Backend used <gl> [INFO ] [GL ] OpenGL version <b'2.1 INTEL-12.4.7'> [INFO ] [GL ] OpenGL vendor <b'Intel Inc.'> [INFO ] [GL ] OpenGL renderer <b'Intel(R) Iris(TM) Pro Graphics 6200'> [INFO ] [GL ] OpenGL parsed version: 2, 1 [INFO ] [GL ] Shading version <b'1.20'> [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 ] [GL ] NPOT texture support is available [INFO ] [Base ] Start application main loop [INFO ] [Base ] Leaving application in progress... $
0 コメント:
コメントを投稿