นาฬิกาจับเวลา (Stopwatch) ใช้วัดช่วงเวลาระหว่างสองเหตุการณ์ ปกติเป็นวินาทีถึงนาที มีการใช้งานหลากหลาย เช่น ในกีฬา หรือวัดการไหลของความร้อน กระแสไฟฟ้า เป็นต้น ในการตั้งโรงงาน Python สามารถสร้าง Stopwatch ได้โดยใช้ไลบรารี tkinter
ไลบรารีนี้จะมีคุณสมบัติ GUI สำหรับสร้าง Stopwatch แสดงตัวเลือก Start, Stop และ Reset องค์ประกอบสำคัญของโปรแกรมคือการใช้โมดูล label.after() ของ tkinter
label.after(parent, ms, function=None) โดย parent: อ็อบเจกต์ของ widget ที่ใช้ฟังก์ชันนี้ ms: เวลาในมิลลิวินาที function: ฟังก์ชัน callback
ในโปรแกรมด้านล่าง เราใช้เมธอดนี้เป็นองค์ประกอบหลักและออกแบบ widget แสดงคุณสมบัติ GUI ใน Stopwatch
ตัวอย่าง
import tkinter as tink
count = -1
run = False
def var_name(mark):
def value():
if run:
global count
# ก่อนเริ่มต้น
if count == -1:
show = "Starting"
else:
show = str(count)
mark['text'] = show
# เพิ่ม count ทุก 1 วินาที
mark.after(1000, value)
count += 1
value()
# ขณะทำงาน
def Start(mark):
global run
run = True
var_name(mark)
start['state'] = 'disabled'
stop['state'] = 'normal'
reset['state'] = 'normal'
# ขณะหยุด
def Stop():
global run
start['state'] = 'normal'
stop['state'] = 'disabled'
reset['state'] = 'normal'
run = False
# สำหรับ Reset
def Reset(label):
global count
count = -1
if run == False:
reset['state'] = 'disabled'
mark['text'] = 'Welcome'
else:
mark['text'] = 'Start'
base = tink.Tk()
base.title("PYTHON STOPWATCH")
base.minsize(width=300, height=200)
mark = tink.Label(base, text="Welcome", fg="blue", font="Times 25 bold", bg="white")
mark.pack()
start = tink.Button(base, text='Start', width=25, command=lambda: Start(mark))
stop = tink.Button(base, text='Stop', width=25, state='disabled', command=Stop)
reset = tink.Button(base, text='Reset', width=25, state='disabled', command=lambda: Reset(mark))
start.pack()
stop.pack()
reset.pack()
base.mainloop()
ภาพด้านล่างแสดง 3 สถานการณ์ที่แตกต่างกันเมื่อรัน Stopwatch:
เริ่มต้น Stopwatch

Stopwatch กำลังทำงาน

หยุด Stopwatch

รีเซ็ต Stopwatch
