1. はじめに
今回、tkinterの機能を使ってタイマーを作ってみます。
2. コード
がむしゃらに作ったので色々とコードが汚いですがご愛敬ということで...笑
start,check,stopというTrueかFalseを取る3つの変数の組み合わせで処理を変えています。
例えば(start,check,stop)=(True,True,False)はタイマー開始の処理を、(start,check,stop)=(True,False,True)の時は一時停止の処理のような感じです。
import tkinter as tk
import tkinter.font as font
import tkinter.ttk as ttk
root=tk.Tk()
root.title("Timer")
text_sec=tk.StringVar()
text_sec.set("0")
my_font=font.Font(size=20)
text_min=tk.StringVar()
text_min.set("30")
buff_min=tk.StringVar()
buff_min.set("0")
buff_sec=tk.StringVar()
buff_sec.set("0")
text_start_stop=tk.StringVar()
text_start_stop.set("START")
start=True
check=True
stop=False
def start():
global start,check,text_min,text_sec,start,check,stop,value_time
start=False
if check==True and stop==True:
start=True
text_start_stop.set("STOP")
timer()
elif check==False and stop==True:
count_min=int(buff_min.get())
count_sec=int(buff_sec.get())
buff_min.set("0")
buff_sec.set("0")
buff_min.set(count_min)
buff_sec.set(count_sec)
check=True
text_start_stop.set("START")
else:
start=True
stop=True
text_start_stop.set("STOP")
buff_min.set(int(text_min.get()))
buff_sec.set(int(text_sec.get()))
timer()
def timer():
global start,buff_min,buff_sec,text_min,text_sec,check,value_time,div_time
if start==True:
if int(buff_min.get())==0 and int(buff_sec.get())==0:
pass
else:
check=False
time_min=int(buff_min.get())
time_sec=int(buff_sec.get())
if time_min>=0:
time_sec-=1
buff_sec.set(str(time_sec))
root.after(1000,timer)
if time_sec==-1:
time_min-=1
buff_min.set(str(time_min))
buff_sec.set("59")
if int(buff_min.get())==0 and int(buff_sec.get())==0:
start=False
time_min=0
time_sec=0
buff_sec.set(str(time_sec))
buff_min.set(str(time_min))
def stop():
global start,check,stop
start=True
check=True
stop=False
time_min=0
time_sec=0
buff_sec.set(str(time_sec))
buff_min.set(str(time_min))
labbel=tk.Label(root,text="設定")
labbel.grid(row=0,column=0,columnspan=1)
entry=tk.Entry(root,width=2,font=my_font,textvariable=text_min)
entry.grid(row=0,column=1)
label_min=tk.Label(root,text=u"分")
label_min.grid(row=0,column=2)
entry1=tk.Entry(root,width=2,font=my_font,textvariable=text_sec)
entry1.grid(row=0,column=3)
label_sec=tk.Label(root,text=u"秒")
label_sec.grid(row=0,column=4)
button=tk.Button(root,textvariable=text_start_stop,command=start)
button.grid(row=0,column=5)
button=tk.Button(root,text=u"RESET",command=stop)
button.grid(row=0,column=6)
labbel=tk.Label(root,text="タイマー")
labbel.grid(row=1,column=0,columnspan=1)
labbel=tk.Label(root,font=my_font,textvariable=buff_min)
labbel.grid(row=1,column=1,columnspan=1)
labbel=tk.Label(root,text="分")
labbel.grid(row=1,column=2,columnspan=1)
labbel=tk.Label(root,font=my_font,textvariable=buff_sec)
labbel.grid(row=1,column=3,columnspan=1)
labbel=tk.Label(root,text="秒")
labbel.grid(row=1,column=4,columnspan=1)
root.mainloop()
コードを実行すると以下の画面が出てきます。
初期値は30分に設定しています。
ここで好きな時間を設定します,今回は40分30秒にします。
STARTを押すとタイマーが始まります。またSTARTボタンがSTOPに変わります。
ここでSTOPボタンを押すとタイマーを一時停止させることができます。
またSTOPボタンが再びSTARTボタンに変わり、STARTボタンを押すとタイマーが再開します。
RESETを押すと,タイマーが最初の0分0秒に戻ります。
おすすめ書籍
tkinterは参考書が非常に少ないです、というより日本語の参考書はほぼ皆無です。個人的には以下がお勧めです。
私が勉強していた時は以下のような参考書がなくネットで調べながら苦労してtkinterを覚えましたが、もし当時こんな書籍があったらもっと楽に学べたのに...と思うくらい基本的内容について丁寧に書かれています。
Amazonの月額読み放題サービス「Kindle unlimited」でも読めます。
初回30日間は無料、退会も簡単なので試しに無料体験して読んでみてもよさそうです。
次回
次回はこちらの記事です。
www.stjun.com