Start_python’s diary

ふたり暮らし

アラフィフ夫婦のフリーランスプラン

Kivyでkvファイルを利用してカウントダウンを作る(Python タイマー作成)

本日の課題と目標

kvファイルを利用する

カウントダウンを作る

 

はじめに

今回は pvファイルを使っていきます。最初に設定した秒数だけカウントダウンするプログラムです。

kvファイルに日本語が含まれてエラーになりました。ほかに方法はあると思いますが今回はコメントで日本語を使用していたので全て削除しました。

 

f:id:Start_python:20191114084152g:plain

 

プログラムのコード

# フル画面を解除して画面の幅と高さを設定
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」を表示するようにして何度も繰り返せるようにしました。

 

 

次回はこれをさらに改良して「スライダー」を使って初期値を決められるようにしたいと思います。

 

 

参考サイト

qiita.com

tkitao.hatenablog.com

 

 

保存ファイル

lesson34.py

 

 

 文責:Luke