# -*- coding: utf-8 -*-
"""
ストップウォッチもどき
"""

import tkinter as tk


# ストップウォッチもどき用ラベル
class SW_Label(tk.Label):

    def __init__(self, master, iv=10):
        self.state = 0   # ストップウォッチの状態（0:停止，1:稼働中）
        self.count = 0   # ミリ秒
        self.iv    = iv  # 更新間隔（ミリ秒）
        self.lb1_var = tk.StringVar(value="00:00.000")
        super().__init__(master, textvariable=self.lb1_var, font=("ＭＳ　ゴシック", 36))
    
    # カウンター文字列を生成
    def count2str(self):
        minute = self.count // 60000
        second = (self.count - minute*60000) // 1000
        milsec = self.count % 1000
        return f"{minute:02}:{second:02}.{milsec:03}"


    # 開始（リセットして play() を呼び出し）
    def start(self):
        self.state = 1
        self.count = 0
        self.lb1_var.set(value="00:00.000")
        self.after(self.iv, self.play)

    # 稼働
    def play(self):
        # １時間で停止
        if self.count >= 6000000:
            self.lb1_var.set("Time Over")
            self.stop()
        # カウンター文字列の表示
        elif self.state == 1:
            self.count += self.iv
            self.lb1_var.set(value=self.count2str())

            # after() の性質を知るための，ただの時間稼ぎ
            for i in range(10000):
                (10000-i) / (i+1)

            """ 指示ここから """
            # このコメントブロックの下に，
            # 指定の更新間隔（self.iv）を空けて，次を呼び出すよう
            # 命令文を書きなさい．

            self.after(self.iv, self.play)
            """ 指示ここまで """

    # 停止
    def stop(self):
        self.state = 0

    # クリックで開始と停止
    def click(self, event:tk.Event):
        if  self.state == 0:
            self.start()
        else:
            self.stop()
    
    # スケールで更新間隔を変更
    def set_iv(self, sc1_var:tk.DoubleVar):
        self.iv = int(sc1_var.get()*1000)


def main():
    base = tk.Tk()
    base.title("$u_id")

    # タイマー表示ラベルは拡張したモノを利用
    lb1 = SW_Label(base)
    lb1.bind("<Button>", lb1.click)
    lb1.pack()

    # 更新間隔を指定するスケールを設置
    sc1_var = tk.DoubleVar(value=0.01)
    sc1 = tk.Scale(base, from_=0.001, to=0.10, variable=sc1_var, resolution=0.001, orient="horizontal", length=200)
    sc1.config(command=lambda event:lb1.set_iv(sc1_var))
    sc1.pack()

    base.mainloop()  # GUIを待機


if __name__ == "__main__":
    main()
