时钟程序(加入时间响应处理)


                               
               
                # -*- coding: cp936 -*-
'''一个时钟程序'''
def createAlarm(master):
    ''' 创建时间选择组件,包括小时、分钟、秒
    系统默认的时间设置为当前的事件'''
    import time
    now = time.localtime(time.time())
    lfAlarm = LabelFrame(text = 'Add you alarm')
    master.vHour = StringVar()
    master.vHour.set(now[3])
    Label(lfAlarm,text = 'Hour:').grid(row = 0,column = 0)
    master.omHour = apply(OptionMenu,(lfAlarm,master.vHour) + tuple(range(0,24)))
    master.omHour.grid(row = 0,column = 1)
   
    master.vMinute = StringVar()
    master.vMinute.set(now[4])
    Label(lfAlarm,text = 'Minute:').grid(row = 0,column = 2)
    master.omMinute = apply(OptionMenu,(lfAlarm,master.vMinute) + tuple(range(0,60)))
    master.omMinute.grid(row = 0,column = 3)
    master.vSecond = StringVar()
    master.vSecond.set(now[5])
    Label(lfAlarm,text = 'Second:').grid(row = 0,column = 4)
    master.omSecond = apply(OptionMenu,(lfAlarm,master.vSecond) + tuple(range(0,60)))
    master.omSecond.grid(row = 0,column = 5)
    lfAlarm.grid(row = 1,column =0,columnspan = 6)
def addAlarm(master):
    '''将当前的设置添加为一个提醒
    设置最后一个为激活态
    选中最后一个'''
    master.lbAlarm.insert(END,master.vHour.get() + ':' + master.vMinute.get() + ':' + master.vSecond.get())
    master.lbAlarm.selection_clear(0,END)
    master.lbAlarm.selection_set(END)
    master.lbAlarm.activate(END)
def deleteAlarm(master):
    '''删除一个提醒'''
    master.lbAlarm.delete(ACTIVE)
    if master.lbAlarm.size() > 0:
        master.lbAlarm.selection_set(ACTIVE)
def modifyAlarm(master):
    '''修改提醒,
    删除原来的提醒,添加一个新的提醒,索引使用原来'''
    t = master.vHour.get() + ':' + master.vMinute.get() + ':' + master.vSecond.get()
    n = master.lbAlarm.curselection()
    master.lbAlarm.delete(n)
    master.lbAlarm.insert(n,t)
    master.lbAlarm.selection_set(n)
   
def createAlarmList(master):
    '''创建提醒列表,目前所有可用的提醒均显示在这里'''
    master.lbAlarm = Listbox(master)
    master.lbAlarm.grid(row = 3,column = 0,
                 columnspan = 4,rowspan = 3,
                 stick = S + N + E + W)
def createOperation(master):
    '''创建操作列表,对提醒列表中的提醒进行添加、修改或删除'''
    Button(master,text = 'Add alarm',
           command = lambda arg = master:addAlarm(arg)
           ).grid(
               row = 3,column = 4,
               columnspan = 2,
               stick = S + N + E + W)
    Button(master,text = 'Modify alarm',
           command = lambda arg = master:modifyAlarm(arg)
           ).grid(
               row = 4,column = 4,
               columnspan = 2,
               stick = S + N + E + W)
    Button(master,text = 'Delete alarm',
           command = lambda arg = master:deleteAlarm(arg)
           ).grid(row = 5,column = 4,
                  columnspan = 2,
                  stick = S + N + E + W)
def showCurrentTime(master):
    '''显示当前时间'''
    lbCurrentTime = Label(master,text = 'Current Time:')
    lbCurrentTime.grid(row = 0,column = 0,
                       columnspan = 2,
                       stick = W)
    master.vCurrentTime = StringVar()
    master.etCurrentTime = Entry(master,textvariable = master.vCurrentTime,state = 'readonly')
    master.etCurrentTime.grid(row = 0,column = 2,
                       columnspan = 4,
                       stick = S + N + E + W)
def updateTime(master):
    '''时钟回调函数,用于更新当前时间;
    判断是否满足提醒条件'''
    import time
    now = time.localtime(time.time())
    t = '%d:%d:%d' % (now[3],now[4],now[5])
    master.vCurrentTime.set(t)
    for item in master.lbAlarm.get(0,END):
        if str(item) == t:
            # 如果当前时间与提醒列表中的一致,打印
            print 'you have a alarm',item
    root.after(100,updateTime,master)
   
from Tkinter import *
root = Tk()
showCurrentTime(root)
createAlarm(root)
createAlarmList(root)
createOperation(root)
# 将检测周期设置为100ms
root.after(100,updateTime,root)
root.mainloop()