


设有标准型和沙漏型两种模式,可设置四种局时(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