你有时间钓鱼吗?互联网圈子里经常说996工作制,其实也有965,甚至还有007,而007有点像ICU,所以大家时不时的偷偷摸摸的进来,偶尔钓鱼,还有各种钓鱼方式,你在工作中钓鱼过吗?你用钓鱼时间做什么?如果早点完成一天的任务,坐下来等下班不是很好吗?我想说,这个时候还难,不如赶紧找点事情做,那怎么办呢?写个下班倒计时吧,真是个开心的决定。。。要实现想法倒计时的时间刷新,肯定是需要图形界面的,也就是需要GUI编程。这里我使用tkinter来实现本地窗口的界面。使用tkinter可以实现页面时间的布局和定时刷新显示,与时间相关的操作必须使用时间模块。这里我还添加了倒计时结束后自动关机的功能(注解,需要的可以开启),所以我也使用了os模块的系统实现了定时关机的功能。运行环境Python运行环境:Windows+python3.8使用的模块:tkinter,time,os如果没有安装该模块,请使用pipinstatllxxxxxx安装,例如:pipinstalltkinter界面布局看一下界面实现后从截图中可以看到,主要有3个信息:?当前时间:这是一个实时显示的当前时间,格式为年月日时分秒?下班时间:这个是可以修改的,默认是18:00:00,你可以根据自己的下班时间修改。剩余时间:这里是倒计时的剩余时间。点击START后,设置页面数据会每秒刷新一次。tk_obj=Tk()tk_obj.geometry('400x280')tk_obj.resizable(0,0)tk_obj.config(bg='white')tk_obj.title('倒计时应用程序')Label(tk_obj,text='倒计时工作',font='宋体20粗体',bg='white').pack()设置当前时间标签(tk_obj,font='Arial15bold',text='currenttime:',bg='white').place(x=50,y=60)curr_time=Label(tk_obj,font='Arial15',text='',fg='gray25',bg='white')curr_time.place(x=160,y=60)refresh_current_time()下班时间Label(tk_obj,font='宋体15粗体',text='下班时间:',bg='white').place(x=50,y=110)下班时间time-hourwork_hour=StringVar()Entry(tk_obj,textvariable=work_hour,width=2,font='宋体12').place(x=160,y=115)work_hour.set('18')下班时间-minutework_minute=StringVar()Entry(tk_obj,textvariable=work_minute,width=2,font='宋体12').place(x=185,y=115)work_minute.set('00')下班时间-秒work_second=StringVar()Entry(tk_obj,textvariable=work_second,width=2,font='宋体12').place(x=210,y=115)work_second.set('00')设置剩余时间Label(tk_obj,font='宋体15bold',text='剩余时间:',bg='white').place(x=50,y=160)down_label=Label(tk_obj,font='宋体23',text='',fg='gray25',bg='white')down_label.place(x=160,y=155)down_label.config(text='00:00:00秒')开始计时按钮Button(tk_obj,text='START',bd='5',command=refresh_down_time,bg='green',font='Arial10bold').place(x=150,y=220)tk_obj.mainloop()定时刷新剩余时间,通过获取设置的下班时间,比较当前时间的时间差得到剩余时间,然后每秒循环使用while处理剩余时间,并在界面上实时刷新,直到剩余时间为0程序结束,甚至运行电脑的自动关机功能defrefresh_down_time():"""刷新倒计时时间"""#当前时间戳now_time=int(time.time())#下班时分秒数据过滤work_hour_val=int(work_hour.get())ifwork_hour_val>23:down_label.config(text='小时的间隔是(00-23)')returnwork_minute_val=int(work_minute.get())ifwork_minute_val>59:down_label.config(text='时间间隔分钟是(00-59)')returnwork_second_val=int(work_second.get())ifwork_second_val>59:down_label.config(text='Therangeofsecondsis(00-59)')return#Turnoff-工作时间转换为时间戳work_date=str(work_hour_val)+':'+str(work_minute_val)+':'+str(work_second_val)work_str_time=time.strftime('%Y-%m-%d')+work_datetime_array=time.strptime(work_str_time,"%Y-%m-%d%H:%M:%S")work_time=time.mktime(time_array)ifnow_time>work_time:down_label.config(text='下班时间已过')return#下班时间剩余秒数diff_time=int(work_time-now_time)whilediff_time>-1:#获取倒计时-小时和分钟秒数down_minute=diff_time//60down_second=diff_time%60down_hour=0ifdown_minute>60:down_hour=down_minute//60down_minute=down_minute%60#刷新倒计时时间down_time=str(down_hour).zfill(2)+'hour'+str(down_minute).zfill(2)+'minute'+str(down_second).zfill(2)+'second'down_label.config(text=down_time)tk_obj.update()time.sleep(1)如果diff_time==0:#倒计时结束down_label.config(text='该下班了')#自动关机,一分钟关机,可以取消#down_label.config(text='下一分钟自动关机')#os.system('shutdown-s-f-t60')breakdiff_time-=1为了方便大家测试和顺利钓鱼,我也贴出了完整的倒计时程序,大家有什么可以及时反馈questions--coding:utf-8--"""从工作时间开始倒计时author:gxcuizydate:2021-04-27"""fromtkinterimport*importtimeimportosdefrefresh_current_time():"""刷新当前time"""clock_time=time.strftime('%Y-%m-%d%H:%M:%S')curr_time.config(text=clock_time)curr_time.after(1000,refresh_current_time)defrefresh_down_time():"""刷新倒计时时间"""#当前时间戳now_time=int(time.time())#下班后时间分秒数据过滤work_hour_val=int(work_hour.get())ifwork_hour_val>23:down_label.config(text='小时的间隔是(00-23)')returnwork_minute_val=int(work_minute.get())ifwork_minute_val>59:down_label.config(text='间隔分钟为(00-59)')returnwork_second_val=int(work_second.get())ifwork_second_val>59:down_label.config(text='间隔秒为(00-59)')return#offwork将时间转换为时间戳d')+work_datetime_array=time.strptime(work_str_time,"%Y-%m-%d%H:%M:%S")work_time=time.mktime(time_array)如果现在时间>work_time:down_label.config(text='下班时间已过')return#返回的秒数从下班时间开始diff_time=int(work_time-now_time)whilediff_time>-1:#获取倒计时-时、分、秒down_minute=diff_time//60down_second=diff_time%60down_hour=0ifdown_minute>60:down_hour=down_minute//60down_minute=down_minute%60#刷新倒计时时间down_time=str(down_hour).zfill(2)+'hour'+str(down_minute).zfill(2)+'minute'+str(down_second).zfill(2)+'second'down_label.config(text=down_time)tk_obj.update()time.sleep(1)ifdiff_time==0:#倒计时结束down_label.config(text='该下班了')#自动关机,一分钟关机,可以取消#down_label.config(text='下一分钟会自动关机')#os.system('shutdown-s-f-t60')breakdiff_time-=1mainentryoftheprogramif__name__=="__main__":#设置页面数据tk_obj=Tk()tk_obj.geometry('400x280')tk_obj.resizable(0,0)tk_obj.config(bg='white')tk_obj.title('倒计时应用')Label(tk_obj,text='上班倒计时',font='Arial20bold',bg='white').pack()#设置当前时间Label(tk_obj,font='宋体15bold',text='Currenttime:',bg='white').place(x=50,y=60)curr_time=label(tk_obj,font='宋体15',text='',fg='gray25',bg='white')curr_time.place(x=160,y=60)refresh_current_time()#设置下班时间Label(tk_obj,font='宋体15bold',text='offhours:',bg='white').place(x=50,y=110)#offhours-hourwork_hour=StringVar()Entry(tk_obj,textvariable=work_hour,width=2,font='宋体12').place(x=160,y=115)work_hour.set('18')#下班时间-分钟work_minute=StringVar()Entry(tk_obj,textvariable=work_minute,width=2,font='宋体12').place(x=185,y=115)work_minute.set('00')#下班时间-秒work_second=StringVar()Entry(tk_obj,textvariable=work_second,width=2,font='宋体12').place(x=210,y=115)work_second.set('00')#设置剩余时间Label(tk_obj,font='宋体15bold',text='剩余时间:',bg='white').place(x=50,y=160)down_label=Label(tk_obj,font='宋体23',text='',fg='gray25',bg='白色的')down_label.place(x=160,y=155)down_label.config(text='00:00:00')#开始计时按钮Button(tk_obj,text='START',bd='5',command=refresh_down_time,bg='green',font='宋体10bold').place(x=150,y=220)tk_obj.mainloop()最后有什么问题可以给我留言,我会及时回复.如果有不对的地方,请帮忙指正。大家有什么好玩的钓鱼方法,也可以在评论区给我留言。一起快乐钓鱼吧!
