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

🎯 タスク
このプロジェクトでは、以下のことを学びます。
- 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

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



