Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonとtkinterでストップウォッチを作成する方法【サンプルコード付き】


ストップウォッチは、ある出来事から次の出来事までの時間間隔を測定するための道具で、一般的に数秒〜数分程度の計測に使用されます。スポーツのタイム計測をはじめ、産業現場で熱流量や電流の変化を測るなど、幅広い場面で活用されています。

Pythonでは標準ライブラリのtkinterを使えば、GUIを備えたストップウォッチを簡単に自作できます。本記事で紹介するのは、スタート(Start)ストップ(Stop)リセット(Reset)の3つの操作ボタンを備えたウィンドウアプリケーションです。

ポイントは「after()」メソッド

このプログラムの核となるのが、tkinterのウィジェットが持つafter()メソッドです。指定したミリ秒後に任意の関数(コールバック)を呼び出せるため、これを繰り返し実行することで「1秒ごとに表示を更新する」というストップウォッチ特有の動作を実現できます。

widget.after(ms, function=None)

ms       : 処理までの待ち時間(ミリ秒)
function : 時間経過後に呼び出されるコールバック関数

以下のサンプルでは、このafter()メソッドを中心に据え、わかりやすいGUIを備えたストップウォッチを構築していきます。

サンプルコード

import tkinter as tk

count = -1
run = False

def timer(mark):
    """1秒ごとにカウントを更新する"""
    def tick():
        global count
        if run:
            # 計測開始直前の表示
            if count == -1:
                show = "Starting..."
            else:
                show = str(count)
            mark['text'] = show
            # 1000ミリ秒(1秒)ごとに自分自身を再実行
            mark.after(1000, tick)
            count += 1
    tick()

# 計測開始時
def start_timer(mark):
    global run
    run = True
    timer(mark)
    btn_start['state'] = 'disabled'
    btn_stop['state'] = 'normal'
    btn_reset['state'] = 'normal'

# 一時停止時
def stop_timer():
    global run
    run = False
    btn_start['state'] = 'normal'
    btn_stop['state'] = 'disabled'
    btn_reset['state'] = 'normal'

# リセット処理
def reset_timer(mark):
    global count
    count = -1
    if not run:
        btn_reset['state'] = 'disabled'
        mark['text'] = 'Welcome!'
    else:
        mark['text'] = 'Start!'

base = tk.Tk()
base.title("PYTHON STOPWATCH")
base.minsize(width=300, height=200)

mark = tk.Label(base, text="Welcome!", fg="blue",
                font="Times 25 bold", bg="white")
mark.pack(pady=10)

btn_start = tk.Button(base, text='Start', width=25,
                      command=lambda: start_timer(mark))
btn_stop = tk.Button(base, text='Stop', width=25,
                     state='disabled', command=stop_timer)
btn_reset = tk.Button(base, text='Reset', width=25,
                      state='disabled',
                      command=lambda: reset_timer(mark))
btn_start.pack()
btn_stop.pack()
btn_reset.pack()

base.mainloop()

コードのポイントは次のとおりです。

  • timer():after(1000, tick)により1秒ごとにtick()を呼び出し続け、ラベルに表示される数値を増やしていきます。
  • start_timer() / stop_timer():フラグ変数runのON/OFFで計測の開始・停止を切り替えると同時に、各ボタンの有効/無効状態も適切に管理します。
  • reset_timer():カウントを初期値に戻し、停止中であればラベルの表示を「Welcome!」に戻します。

以下の画像は、ストップウォッチを実行した際の各シーンを示したものです。

起動直後の画面

Pythonとtkinterでストップウォッチを作成する方法【サンプルコード付き】

計測中の画面

Pythonとtkinterでストップウォッチを作成する方法【サンプルコード付き】

一時停止した画面

Pythonとtkinterでストップウォッチを作成する方法【サンプルコード付き】

リセットした画面

Pythonとtkinterでストップウォッチを作成する方法【サンプルコード付き】

  1. Pythonで作るWebサイトアラーム!指定時刻に自動でページを開く方法

    はじめに この記事では、Pythonを使って「Webサイトアラーム」を作成する方法を解説します。あらかじめURLと時刻を指定しておくと、システムの時刻がその瞬間に達したとき、自動的にブラウザで目的のWebページを開いてくれるシンプルな仕組みです。 課題の概要 WebサイトのURLと時刻を入力として受け取り、システム時刻が指定時刻に達したタイミングで、ブラウザ上に該当するWebページを表示します。 ブックマークには日々利用するさまざまなWebページを保存できますが、「毎日決まった時刻に特定のページを開いて作業したい」という場面は少なくありません。たとえば、朝会の資料ページや業務システムへのログ

  2. PythonでWordCloud(ワードクラウド)を作成する方法

    このチュートリアルでは、テキストファイルとマスク画像を用意し、そこからワードクラウド(Word Cloud)を生成して png 形式の画像として保存するプログラムをPythonで作成します。 この処理を実装するには、以下のPythonライブラリが必要です。 ・matplotlib ・wordcloud ・numpy ・tkinter ・PIL ライブラリのセットアップ まず、必要なライブラリを次のコマンドでインストールします。 $ sudo pip3 install matplotlib $ sudo pip3 install wordcloud $ sudo apt-get install