Kivyでkvファイルを利用してカウントダウンを作る(Python タイマー作成)
本日の課題と目標
kvファイルを利用する
カウントダウンを作る
はじめに
今回は pvファイルを使っていきます。最初に設定した秒数だけカウントダウンするプログラムです。
kvファイルに日本語が含まれてエラーになりました。ほかに方法はあると思いますが今回はコメントで日本語を使用していたので全て削除しました。
プログラムのコード
# フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', '0') Config.set('graphics', 'width', '300') Config.set('graphics', 'height', '150') from kivy.app import App from kivy.uix.widget import Widget from kivy.properties import StringProperty from kivy.clock import Clock class KivyTimer(Widget): # プロパティの追加 text = StringProperty() # ボタンをクリック時 def on_command(self, **kwargs): if self.text == 'OK!': self.text = '3' Clock.schedule_interval(self.on_countdown, 1.0) def on_countdown(self, dt): self.text = str(int(self.text) - 1) if int(self.text) == 0: self.text = 'OK!' return False def __init__(self, **kwargs): super(KivyTimer, self).__init__(**kwargs) self.text = '3' class TestApp(App): def __init__(self, **kwargs): super(TestApp, self).__init__(**kwargs) # ウィンドウのタイトル名 self.title = 'test' def build(self): return KivyTimer() if __name__ == '__main__': TestApp().run()
kvファイル (test.kv)
<KivyTimer>: Label: id: label1 size: 300,100 pos: 0,50 font_size: 32 text: root.text Button: id: button1 size: 100,50 pos: 100,10 text: "Start" font_size: 24 on_press: root.on_command()
解説
UnicodeDecodeError: 'cp932' codec can't decode byte 0x86 in position 275: illegal multibyte sequence
上記のエラーがでる場合は、kvファイルに日本語が含まれている可能性があります。コメント(# ラベル)等にも日本語があるとダメみたいなので全て削除しましょう。
新しく使ったモジュール「from kivy.clock import Clock」をインポート
公式より「Clockオブジェクトを使用すると未来の関数呼び出しをスケジュールできます。 指定された間隔で1回または繰り返しを 引数 dtを使用して、スケジューリングとコールバックの呼び出しの間に経過した時間を取得できます。」とのことです。
プログラムの流れ
初期のラベル文字を「3」にして、ボタンをクリック時にラベルの文字を1秒毎にー1して表示します。「0」になったら「OK!」を表示するプログラムです。
「OK!」が表示されている時にボタンを押すとエラーになったので、再び「3」を表示するようにして何度も繰り返せるようにしました。
次回はこれをさらに改良して「スライダー」を使って初期値を決められるようにしたいと思います。
参考サイト
保存ファイル
lesson34.py
文責:Luke