Python と Tkinter を使った秒計

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、PythonとTkinterを使って簡単な秒計アプリケーションを作成します。秒計には、開始、停止、リセット、終了の機能があります。グラフィカルユーザーインターフェイス(GUI)コンポーネントにはTkinterライブラリを、時間関連の操作にはtimeライブラリを使います。

👀 プレビュー

秒計GUIのプレビュー

🎯 タスク

このプロジェクトでは、以下のことを学びます。

  • GUIと時間関連の操作に必要なライブラリをインポートする方法
  • Frameクラスを拡張するStopWatchクラスを定義する方法
  • 秒計用のGUIコンポーネントを作成する方法
  • 経過時間を更新し、GUIに表示する方法
  • 秒計を開始、停止、リセットする機能を実装する方法
  • StopWatchオブジェクトを初期化し、インタラクション用のボタンを追加するメイン関数を作成する方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • PythonでTkinterを使ってGUIアプリケーションを作成する
  • Pythonで時間関連の操作を行う
  • 秒計の機能を実装する

プロジェクトファイルを作成する

まず、stopwatch.py という名前の新しいファイルを作成し、好きなコードエディタで開きます。

cd ~/project
touch stopwatch.py
✨ 解答を確認して練習

必要なライブラリをインポートする

stopwatch.py ファイルでは、必要なライブラリをインポートすることから始めます。GUIコンポーネントには Tkinter が必要で、テーマ付きのウィジェットには ttk が必要で、時間関連の操作には time が必要です。ファイルの先頭に次のコードを追加します。

from tkinter import *
from tkinter import ttk
import time
✨ 解答を確認して練習

StopWatchクラスを定義する

次に、Frame クラスを拡張する StopWatch という名前のクラスを定義します。このクラスを使って秒計の機能を作成します。インポート文の後に次のコードを追加します。

class StopWatch(Frame):
    def __init__(self, parent=None, **kw):
        Frame.__init__(self, parent, kw)
        self._start = 0.0
        self._elapsedtime = 0.0
        self._running = 0
        self.timestr = StringVar()

        self.makeWidgets()
✨ 解答を確認して練習

GUIコンポーネントを作成する

StopWatch クラスの中に、GUIコンポーネントを作成して配置する makeWidgets というメソッドを追加します。このメソッドはコンストラクタから呼び出されます。StopWatch クラスの中に次のコードを追加します。

    def makeWidgets(self):
        l = ttk.Label(self, textvariable=self.timestr)
        self._setTime(self._elapsedtime)
        l.pack(fill=X, expand=NO, pady=2, padx=2)
✨ 解答を確認して練習

経過時間を更新する

StopWatch クラスの中に _update という名前のメソッドを追加します。このメソッドは経過時間を計算し、GUIを更新します。StopWatch クラスの中に次のコードを追加します。

    def _update(self):
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)
✨ 解答を確認して練習

時間を設定する

StopWatch クラスの中に _setTime という名前のメソッドを追加します。このメソッドは時間をフォーマットし、timestr 変数を更新します。StopWatch クラスの中に次のコードを追加します。

    def _setTime(self, elap):
        minutes = int(elap / 60)
        hours = int(minutes / 60)
        seconds = int(elap - minutes * 60.0)
        hseconds = int((elap - minutes * 60.0 - seconds) * 100)
        self.timestr.set('%02d:%02d:%02d:%02d' % (hours, minutes, seconds, hseconds))
✨ 解答を確認して練習

開始機能を実装する

StopWatch クラスの中に Start という名前のメソッドを追加します。このメソッドは秒計を開始します。StopWatch クラスの中に次のコードを追加します。

    def Start(self):
        if not self._running:
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1
✨ 解答を確認して練習

停止機能を実装する

StopWatch クラスの中に Stop という名前のメソッドを追加します。このメソッドは秒計を停止します。StopWatch クラスの中に次のコードを追加します。

    def Stop(self):
        if self._running:
            self.after_cancel(self._timer)
            self._elapsedtime = time.time() - self._start
            self._setTime(self._elapsedtime)
            self._running = 0
✨ 解答を確認して練習

リセット機能を実装する

StopWatch クラスの中に Reset という名前のメソッドを追加します。このメソッドは秒計をリセットします。StopWatch クラスの中に次のコードを追加します。

    def Reset(self):
        self._start = time.time()
        self._elapsedtime = 0.0
        self._setTime(self._elapsedtime)
✨ 解答を確認して練習

メイン関数を作成する

StopWatch クラスの外に main 関数を追加します。この関数はメインアプリケーションウィンドウを作成し、StopWatch オブジェクトを初期化し、開始、停止、リセット、終了用のボタンを追加します。StopWatch クラスの後に次のコードを追加します。

def main():
    root = Tk()
    sw = StopWatch(root)
    sw.pack(side=TOP)

    Button(root, text='Start', command=sw.Start).pack(side=LEFT)
    Button(root, text='Stop', command=sw.Stop).pack(side=LEFT)
    Button(root, text='Reset', command=sw.Reset).pack(side=LEFT)
    Button(root, text='Quit', command=root.quit).pack(side=LEFT)

    root.mainloop()


if __name__ == '__main__':
    main()
✨ 解答を確認して練習

プロジェクトを実行する

最後に、デスクトップに切り替えて、次のコマンドを使用してプロジェクトを実行します。

python stopwatch.py
stopwatch project execution
✨ 解答を確認して練習

まとめ

おめでとうございます!Python と Tkinter を使って、成功裏に秒計アプリケーションを作成しました。ここでは、プロジェクトファイルを作成する手順、必要なライブラリをインポートすること、StopWatch クラスを定義すること、GUI コンポーネントを作成すること、経過時間を更新すること、開始、停止、およびリセット機能を実装すること、そしてメインアプリケーションを作成することを通りました。これで、プロジェクトを実行して、ボタンを使って秒計を制御することができます。