【Python】sleepを使ったカウントダウンタイマーの作成

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

テキストボックスに数値を入力してStartボタンを押すと、カウントダウンを開始する。

Pythonの開発は、時間を扱うことができます。

例えば、ループ処理をしているときに時間を一時停止する。
指定時間カウントして、時間まで数値を減らすカウントダウン機能など
時間のプログラムは使用頻度が高いです。

特に、カウントダウンタイマー(count down timer)は非常に簡単に作成できるので、
Pythonを始めたばかりの初心者の方にもおすすめです。

今回は、timeモジュールsleep関数を使ってPythonで、
カウントダウンタイマーを制作するコードを紹介します。

またTkinterを応用して、
ユーザーが入力した秒数を取得し、カウントダウンするコードも紹介します。

本記事は次の人におすすめ
  • Python初学者
  • 簡単なプログラミングができるようになりたい。
  • カウントダウンタイマーを作成したい。
  • 「timeモジュールのsleep関数」の使い方を知りたい。
Udemyで学習する
スポンサーリンク

sleep関数を使ったタイマー

初めに、sleep関数のみを使用してカウントが進むコードを紹介します。
本プログラムの稼働には、「GoogleColaboratory」を使用します。

「GoogleColaboratory」は「Python」をインストールして環境を構築する必要がないので、
初めて、Pythonを触る人には非常におすすめです。

GoogleColaboratory

Google Colaboratoryは、Googleが提供するクラウドベースのJupyterノートブック環境です。

Google Colaboratoryでは、ブラウザ上でJupyterノートブックを作成・編集し、
Pythonなどのプログラムの実行やデータの可視化、機械学習モデルのトレーニングなどを行うことができます。

また、NumpypandasMatplotlibなど統計学に役立つライブラリが使えることが特徴です。

数値解析や統計学に役立つライブラリを紹介しています。

timeモジュール

timeモジュールはPythonの標準ライブラリの1つで、時間に関連する機能を提供します。
主な目的は、時間の計測や操作、待機などを行うことです。

主な機能
  • time()関数: 現在の時刻をエポックからの経過秒数(UNIX時間)で取得します。一般的に時間計測に使用されます。
  • sleep()関数: 指定した秒数だけプログラムを一時停止させます。他の処理を待たせたり、一定の時間間隔を作るために使用されます。
  • ctime()関数: 現在の時刻を文字列として返します。読みやすい形式で時刻を表示したい場合に使用されます。
  • strftime()関数: 時刻を指定したフォーマットの文字列に変換します。年、月、日、時、分、秒などの要素を組み合わせてカスタムの時刻表現を作成できます。
  • gmtime()関数: 現在の時刻をUTC(協定世界時)のタプル形式で取得します。タプルの要素として年、月、日、時、分、秒などが含まれます。
  • localtime()関数: 現在の時刻をローカルタイムゾーンのタプル形式で取得します。

Sleep()関数

sleep関数()は、プログラムを指定された時間だけ一時停止させるために使用される関数です。
一時停止することで、プログラムが指定した時間待機することができます。

sleep()関数は「sleep()」括弧内に入力した数字の秒数の間、プログラムを停止します。

sleep()関数は時間の単位を秒で指定します。
関数が呼び出されると、プログラムの実行は指定した秒数だけ一時停止し、その後に次の処理に進みます。
主に、一時停止を行う際に他の処理が実行させるために使用されます。

しかし、秒間は使用しているPC・シェルなどの環境に依存するため、Sleep()関数の精度は正確ではないです。

画像では5秒のカウントをしますが、GoogleColaboratoryの計測では実行時間は「4秒」です。

マイクロ秒・ナノ秒の精度ではなく、ふわりと時間計測するにはsleep関数はおすすめです。

時間のずれ

※参考ページ:「Pythonのsleep関数の使い方と利用場面を解説

ソースコード

from time import sleep

Time = 5

def Timer(secs):
    for i in range(0,secs):
        print(i)
        sleep(1)
    print('end')
Timer(Time)

UdemyでPythonを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。




解説

初めにsleep関数を使用する場合は、timeモジュールを使う必要があり、
以下のコードを書きます。

from time import sleep

続いて計測する時間を定義します。
ソースコード内では、「Time」としています。

Time = 5

ここで、def関数を定義します。
for文を使用して、0からsecs、つまり5まで数字を刻みます。

sleep関数で1秒間プログラムを停止を繰り返します。
そして、printで最後は終了を知らせます。

引数は秒で取ることを覚えておいてください。

def Timer(secs):
    for i in range(0,secs):
        print(i)
        sleep(1)
    print('end')
Timer(Time)
引数とは

引数(ひきすう)は、プログラムや関数に渡す値のことを指します。
関数や手続き(サブルーチン)が実行される際に、外部から渡されるデータや情報です。

一般的に、関数は特定の処理を行い、その結果として値を返すことがあります。
この処理を行うために必要な情報やデータは、関数の引数として渡されます。
関数は引数を受け取り、その引数を元に処理を行い、結果を返すことができます。

引数は関数を呼び出す際に渡されるため、関数の動作や結果に影響を与えることができます。引数の数や型、順序などを適切に指定することで、関数に必要なデータを正確に渡すことができます。

def add_numbers(a, b):
    result = a + b
    return result

sum1 = add_numbers(3, 5)
print(sum1)  # 結果(8が出力)

sum2 = add_numbers(3, 3)
print(sum2)  # 結果(6が出力)

def関数で変数「result」をa,bの和として定義します。
sum1は、3+5の結果(=8)、sum2は、3+3の結果(=6)が出力されます。

先ほどはカウントを増やしてきましたが、
以下のようにコードを書き替えると、カウントダウンになります。

#for i in range(0,secs):から変更
for i in range(secs,-1,-1):

入力した秒数をカウントダウンするタイマー

sleep関数の使用を確認しました。
入力した数字のカウントダウンタイマーを制作していきます。
テキストボックスに数字入力して、カウントダウンをしますので、「Tkinter」を使用します。

Tkinterの基本とボタンの使い方をまとめています。

本プログラムで使用するTkinterはGoogle Colaboratoryで稼働しないので、
VScodeやコマンドプロンプトのようなシェルで実行してください。

作成したコードをexe化する方法を紹介しています。

Pythonをexeファイルにする方法を紹介しています。

ソースコード

import tkinter 
from time import sleep

#画面作り
root = tkinter.Tk()
root.geometry('300x150')
root.title('Timer')

#ラベル
lbl = tkinter.Label(text ='時間【s】入力')
lbl.place(x=30,y=70)

#テキストBOX
txt = tkinter.Entry(width=20)
txt.place(x=100,y=70)

#ボタン
def btnstart():
    i = txt.get()
    s = int(i)
    txt.delete(0, tkinter.END)
    def Timer(secs):
        for s in range(secs,-1,-1):
            print(s)
            sleep(1)
        print('end')
    Timer(s)

btnstart = tkinter.Button(root,text='Start',command=btnstart)
btnstart.pack()
btnstart.place(x=220,y=70)

root.mainloop()

解説

初めに、tkinterとtime、2つのモジュールを追加(import)します。

import tkinter
from time import sleep

続いて、Tkinterの画面と、ラベル、テキストBOXを作成します。

#画面作り
root = tkinter.Tk()
root.geometry('300x150')
root.title('Timer')

#ラベル
lbl = tkinter.Label(text ='時間【s】入力')
lbl.place(x=30,y=70)

#テキストBOX
txt = tkinter.Entry(width=20)
txt.place(x=100,y=70)

ここで、def関数でボタンを作成します。ボタンを押すと、iにテキストを代入し、sにint型変数iを代入します。

「txt.delete(0, tkinter.END)」で、取得後テキストボックスから数字を消します。

for文は先ほどと同じで、取得した値をsleep関数で1秒間プログラムを停止を繰り返して、カウントダウンします。

#ボタン
def btnstart():
    i = txt.get()
    s = int(i)
    txt.delete(0, tkinter.END)
    def Timer(secs):
        for s in range(secs,-1,-1):
            print(s)
            sleep(1)
        print('end')
    Timer(s)

btnstart = tkinter.Button(root,text='Start',command=btnstart)
btnstart.pack()
btnstart.place(x=220,y=70)

動作確認

冒頭で紹介しましたようにテキストボックスに数字を入力して、
ボタンを押すとカウントダウンが始まります。

処理を終えると、テキストボックスから数字が消えて次の入力が可能になります。

応用

timeモジュールのsleep関数を使用せずに
カウントダウンのタイマーを作成する方法を紹介しています。

本製作では、Tkinterの画面切り替えを目的として作成しています。

Tkinterのsleep関数を使用しないでカウントダウンタイマーを作成しています。

まとめ

今回はPythonでtimeモジュールのsleep関数を使って、カウントダウンタイマーを作成しました。

sleep関数は、カッコ内に入力した数字の秒数の間、プログラムを停止する関数です。

秒間は使用しているPC・シェルなどの環境に依存するため、Sleep関数の精度は荒いです。
マイクロ秒、ナノ秒の精度ではなく、ふわりと時間計測するにはsleep関数はおすすめです。

また、Tkinterを使用すれば、入力した秒数をカウントダウンするタイマーの作成も可能になります。

Udemyで学習する
タイトルとURLをコピーしました