# -*- 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()