设有标准型和沙漏型两种模式,可设置四种局时(1分钟,5分钟,10分钟,20分钟)。
import tkinter import math import tkinter.messagebox class clock(object): jushi=300 jiamiao=0 jishi=1 num1 = jushi num2 = jushi mode=0 pausemode=0 def __init__(self): self.root=tkinter.Tk() self.root.minsize(610,320) self.root.maxsize(610,320) stringg = ‘计时器 ‘ + str(int(self.jushi / 60)) + ‘分钟 ‘ if self.mode == 0: stringg += ‘标准型‘ elif self.mode == 1: stringg += ‘沙漏型‘ self.root.title(stringg) #self.root.title = ‘计时器‘ self.t1=tkinter.StringVar() self.t2 = tkinter.StringVar() self.t1.set(self.num1) self.t2.set(self.num2) self.sta=[0,0] self.pausesta=[0,0] self.menus() self.time1 = tkinter.StringVar() self.show1 = tkinter.Label(self.root, bd=3, bg=‘white‘, font=( ‘宋体‘, 30), anchor=‘e‘, textvariable=self.t1) self.root.after(int(1000*self.jishi), self.update) self.show1.place(x=20, y=20, width=270, height=70) self.button1 = tkinter.Button(self.root, text=‘红‘, command=lambda: self.press(0)) self.button1.place(x=20, y=100, width=270, height=70) self.show2 = tkinter.Label(self.root, bd=3, bg=‘white‘, font=( ‘宋体‘, 30), anchor=‘e‘, textvariable=self.t2) self.show2.place(x=320, y=20, width=270, height=70) self.button2 = tkinter.Button(self.root, text=‘黑‘, command=lambda: self.press(1)) self.button2.place(x=320, y=100, width=270, height=70) self.resetbutton=tkinter.Button(self.root, text=‘重置‘, command=self.reset) self.resetbutton.place(x=20,y=180,width=270,height=70) self.pausebutton = tkinter.Button(self.root, text=‘暂停‘, command=self.pause) self.pausebutton.place(x=320, y=180, width=270, height=70) #self.root.mainloop() def pause(self): if self.sta==[0,0] and self.pausemode==0: return if self.pausemode==0: self.pausesta=self.sta self.sta=[0,0] self.pausebutton["text"]=‘继续‘ self.pausemode=1 return if self.pausemode==1: self.sta=self.pausesta self.pausebutton["text"] = ‘暂停‘ self.pausemode = 0 return def reset(self): self.pausemode=0 self.pausesta=[0,0] self.pausebutton["text"] = ‘暂停‘ self.num1 = self.jushi self.num2 = self.jushi self.t1.set(self.num1) self.t2.set(self.num2) stringg=‘计时器 ‘+str(int(self.jushi/60))+‘分钟 ‘ if self.mode ==0: stringg+=‘标准型‘ elif self.mode==1: stringg+=‘沙漏型‘ self.root.title(stringg) self.sta=[0,0] def setmode(self,i): self.mode=i self.reset() def update(self): self.num1-=self.sta[0] self.num2-=self.sta[1] self.num1=round(self.num1,1) self.num2 = round(self.num2, 1) self.t1.set(self.num1) self.t2.set(self.num2) if self.num1*self.num2==0: tkinter.messagebox.showinfo("game over","gameover!") self.reset() self.root.after(int(1000*self.jishi),self.update) #self.show2.after(1000,self.update) def setjushi(self,i): self.jushi=i self.reset() def press(self,i): self.sta[1-i]=self.jishi self.sta[i]=0 if self.mode==1: self.sta[i]=-self.jishi def setjingque(self,i): self.jishi=i self.reset() def menus(self): # 添加菜单 # 创建总菜单 allmenu = tkinter.Menu(self.root) # 添加子菜单 filemenu = tkinter.Menu(allmenu, tearoff=0) # 添加选项卡 filemenu.add_command( label=‘标准型(T) Alt+1‘,command=lambda: self.setmode(0)) filemenu.add_command( label=‘沙漏型(S) Alt+2‘,command=lambda: self.setmode(1)) allmenu.add_cascade(label=‘查看(V)‘, menu=filemenu) # 添加子菜单2 editmenu = tkinter.Menu(allmenu, tearoff=0) # 添加选项卡 menujushi = tkinter.Menu(editmenu, tearoff=0) menujushi.add_command(label=‘1分钟‘,command=lambda: self.setjushi(60)) menujushi.add_command(label=‘5分钟‘, command=lambda: self.setjushi(300)) menujushi.add_command(label=‘10分钟‘, command=lambda: self.setjushi(600)) menujushi.add_command(label=‘20分钟‘, command=lambda: self.setjushi(1200)) editmenu.add_cascade(label=‘局时‘,menu=menujushi) editmenu.add_command(label=‘加秒‘) jingquemenu=tkinter.Menu(editmenu,tearoff=0) jingquemenu.add_command(label=‘1‘,command=lambda: self.setjingque(1)) jingquemenu.add_command(label=‘10‘,command=lambda: self.setjingque(0.1)) editmenu.add_cascade(label=‘精确系数‘,menu=jingquemenu) allmenu.add_cascade(label=‘编辑(E)‘,menu=editmenu) # 添加子菜单3 helpmenu = tkinter.Menu(allmenu, tearoff=0) # 添加选项卡 helpmenu.add_command(label=‘查看帮助(V) F1‘) # 添加分割线 helpmenu.add_separator() # 添加选项卡 helpmenu.add_command(label=‘关于棋钟(A)‘) allmenu.add_cascade(label=‘帮助(H)‘, menu=helpmenu) self.root.config(menu=allmenu) myclock=clock() myclock.root.mainloop()
原文:https://www.cnblogs.com/hyffff/p/14859994.html