コンテンツにスキップ

Pythonアプリ(5):アラームクロックを作ろう!

アラームクロックを作ろう!

時刻を表示し、アラームを設定して時間が来ると音が鳴るようにします。

tentoapp-05-01.png

音楽素材

魔王魂よりダウンロード

1. 時刻を表示しよう

from tentoapp import *
from datetime import *
app = App()
l1 = Label(app)
l1.fontsize = 30
now = datetime.now()
l1.text = str(now.hour) + "" + str(now.minute) + "" + str(now.second) + ""
l1.pack()
app.start()

tentoapp-05-02.png

現在の時刻を表示するには、 datetime モジュールを使用します。 datetime(デイトタイム)モジュール は最初からPythonに含まれているのでtentoappと違ってモジュールをダウンロードする必要がありません。

now = datetime.now()

ここでは、 datetime.now() を実行して現在の時刻を取ってきて変数 now に入れています。 nowdatetime型 なので、 year(イヤー、年)hour(アワー、時間)minute(ミニット、分)second(セカンド、秒) などを取り出すことができます。 たとえば now.minute で分を取り出せますが、そのままでは数値なので str() 関数で文字にしてから + を使ってくっつけます。

2. 時間を経過させよう

このままだと、プログラムを実行したときの時間が表示されるだけです。自動的に時間が変わるようにしましょう。

from tentoapp import *
from datetime import *
def update():
now = datetime.now()
l1.text = str(now.hour) + "" + str(now.minute) + "" + str(now.second) + ""
app.after(100,update)
app = App()
l1 = Label(app)
l1.fontsize = 30
l1.pack()
app.after(100,update)
app.start()

app.after() を用いて0.1秒ごとに関数 update が呼び出されるようにし、関数 update の中で現在時刻を呼び出します。

3. アラーム設定ボタンを作ろう

アラームを設定するためのしくみをつくります。まず、アラームの時間と分を入力するボックスと、設定ボタンを作ります。

from tentoapp import *
from datetime import *
def update():
now = datetime.now()
l1.text = str(now.hour) + "" + str(now.minute) + "" + str(now.second) + ""
app.after(100,update)
app = App()
l1 = Label(app)
l1.fontsize = 30
l1.pack()
sp1 = Spinbox(app)
sp1.fontsize = 20
sp1.width = 2
sp1.pack()
sp2 = Spinbox(app)
sp2.fontsize = 20
sp2.width = 2
sp2.pack()
b = Button(app)
b.text = "アラーム設定"
b.pack()
app.after(100,update)
app.start()

tentoapp-05-03.png

Spinbox(スピンボックス) というのは数値だけが入力できるフォームです。最初のSpinboxに時間を、次のSpinboxに分を入れるようにします。

4. アラームが鳴るようにしよう

ボタンを押したらアラームがセットされるようにしましょう。

from tentoapp import *
from datetime import *
alarm_hour = 0
alarm_minute = 0
sound = Sound("se_maoudamashii_chime11.wav")
def setalarm():
global alarm_hour, alarm_minute
alarm_hour = sp1.value
alarm_minute = sp2.value
def update():
global alarm_hour, alarm_minute
now = datetime.now()
l1.text = str(now.hour) + "" + str(now.minute) + "" + str(now.second) + ""
app.after(100,update)
if now.hour == alarm_hour and now.minute == alarm_minute:
sound.play()
app = App()
l1 = Label(app)
l1.fontsize = 30
l1.pack()
sp1 = Spinbox(app)
sp1.fontsize = 20
sp1.width = 2
sp1.pack()
sp2 = Spinbox(app)
sp2.fontsize = 20
sp2.width = 2
sp2.pack()
b = Button(app)
b.text = "アラーム設定"
b.onclick = setalarm
b.pack()
app.after(100,update)
app.start()

4-1 変数の追加

alarm_hour = 0
alarm_minute = 0
sound = Sound("se_maoudamashii_chime11.wav")

アラームの時間と分を記録する変数を作ります。また、 Sound を使って音声をアラーム音の変数 sound も用意します。

4-2 関数setalarmの追加

「アラーム設定」ボタンをクリックしたときに変数alarm_hourとalarm_minuteにSpinboxの数値を記録します。ボタンbに onclick をつけることも忘れずに。

def setalarm():
global alarm_hour, alarm_minute
alarm_hour = sp1.value
alarm_minute = sp2.value

4-3 関数updateの変更

現在の時刻と分がalarm_hour、alarm_minuteとおなじになったときに音を鳴らすようにします。

def update():
global alarm_hour, alarm_minute
now = datetime.now()
l1.text = str(now.hour) + "" + str(now.minute) + "" + str(now.second) + ""
app.after(100,update)
if now.hour == alarm_hour and now.minute == alarm_minute:
sound.play()

やってみよう!

1. アラームを止めよう☆☆

今作ったアラーム時計は、いったんアラームが鳴り始めると分が変わるまでずっとなり続けてしまいます。音が一回だけ鳴るように変更しましょう。

2. 数字を調整しよう☆

現在、Spinboxにはどんな数字も入れられてしまいます。時刻には0〜23しか入らないように、また分には0〜59の数字に限定しよう。

3. ストップボタンを作ろう☆☆☆

アラームを一回鳴らすだけだと目覚まし時計にはならないですね。今度はストップボタンを押すまでなり続けるようにしましょう。

4. アラームの設定を表示しよう☆☆

アラームが設定されているのかどうか分かるようにしてください。