Pythonアプリ(5):アラームクロックを作ろう!
アラームクロックを作ろう!
時刻を表示し、アラームを設定して時間が来ると音が鳴るようにします。
音楽素材
魔王魂よりダウンロード
1. 時刻を表示しよう
from tentoapp import *from datetime import *
app = App()
l1 = Label(app)l1.fontsize = 30now = datetime.now()l1.text = str(now.hour) + "時" + str(now.minute) + "分" + str(now.second) + "秒"l1.pack()
app.start()
現在の時刻を表示するには、 datetime
モジュールを使用します。 datetime(デイトタイム)モジュール は最初からPythonに含まれているのでtentoappと違ってモジュールをダウンロードする必要がありません。
now = datetime.now()
ここでは、 datetime.now()
を実行して現在の時刻を取ってきて変数 now
に入れています。 now
は datetime型 なので、 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 = 30l1.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 = 30l1.pack()
sp1 = Spinbox(app)sp1.fontsize = 20sp1.width = 2sp1.pack()
sp2 = Spinbox(app)sp2.fontsize = 20sp2.width = 2sp2.pack()
b = Button(app)b.text = "アラーム設定"b.pack()
app.after(100,update)app.start()
Spinbox(スピンボックス) というのは数値だけが入力できるフォームです。最初のSpinboxに時間を、次のSpinboxに分を入れるようにします。
4. アラームが鳴るようにしよう
ボタンを押したらアラームがセットされるようにしましょう。
from tentoapp import *from datetime import *
alarm_hour = 0alarm_minute = 0sound = 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 = 30l1.pack()
sp1 = Spinbox(app)sp1.fontsize = 20sp1.width = 2sp1.pack()
sp2 = Spinbox(app)sp2.fontsize = 20sp2.width = 2sp2.pack()
b = Button(app)b.text = "アラーム設定"b.onclick = setalarmb.pack()
app.after(100,update)app.start()
4-1 変数の追加
alarm_hour = 0alarm_minute = 0sound = 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. アラームの設定を表示しよう☆☆
アラームが設定されているのかどうか分かるようにしてください。