从前参加过比赛的作品,和大家分享
使用说明:
- 显示运行窗口(图1)

- 当前时间为北京时间。
- 倒计时功能:
- 首先按下“设置”键,出现设置界面(图2),进行倒计时设置。可单独设置分钟数、秒数。点击确定倒计时时间显示在界面上(图3)。
- 时间设置完成后点击“开始”运行软件。
- 点击“暂停”按钮倒计时暂停,暂停按键变换为“继续”按钮,当按下“继续”按钮倒计时继续。

- 点击“结束”按钮,倒计时结束。
- 倒计时时间归零则会发出声音进行提示。
- 喝水和久坐提醒。
点击“ON”,会开始按照提前设置好的时间进行计时提醒,会出现温馨提示标签。点击“OFF”会关闭。

程序介绍:
1.使用python的time模块、winsound模块、tkinter模块。

2.窗口显示。使用tkinter模块,对窗口的大小、显示颜色、透明度等进行设置。

3.读取系统时间
4.可设置倒计时,久坐提醒、喝水提醒。
有开始、暂停、继续、结束、设置按键

6.声音提示

代码
# -------------------------------------------------
# 项目名称:学生作息计时器 作者 wangqiuding(qiu等xiao)
# ------------------------------------------------
import time
import tkinter as tk
from tkinter import messagebox
import winsound
# 系统时间显示
class TimeSys:
def __init__(self):
self.root = tk.Tk()
# 获取屏幕分辨率
self.screenWidth = self.root.winfo_screenwidth()
self.screenHeight = self.root.winfo_screenheight()
''' 计算显示坐标'''
self.x = int((self.screenWidth - 300) / 2)
self.y = int((self.screenHeight - 150) / 2)
'''#系统时间变量'''
self.systimecound = tk.StringVar()
'''# 倒计时时间变量'''
self.downtimecound = tk.StringVar()
'''#按键标志变量初始'''
'''#开始/暂停按键编制'''
self.pause = False
self.set_time_end_sign = False
self.set_time_start_sign = False
'''#暂停的时间'''
self.long = 0
self.hold = True
self.delta = 0
self.zanTing = 0
self.jiXu = 0
self.timeSitOld = 0
self.select_SIT_sign = True
self.select_WATER_sign = True
''' 系统时间窗口设置'''
def sys_time_display(self):
# 设置窗口title
self.root.title('学生习惯计时器')
# 设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x"
self.root.geometry("%sx%s+%s+%s" % (300, 150, self.x, self.y))
# 改变背景颜色
self.root.config(background="#f0ffff")
# 设置窗口处于顶层
self.root.attributes('-topmost', True)
# 设置窗口的透明度
self.root.attributes('-alpha', 0.85)
# 设置窗口被允许最大调整的范围,与resizble()冲突
self.root.maxsize(600, 600)
# 设置窗口被允许最小调整的范围,与resizble()冲突
self.root.minsize(50, 50)
# 设置窗口为:不可以随意更改大小
# self.root.resizable(0, 0)
# 显示的标签
self.show()
# 进入主循环,显示主窗口
self.root.mainloop()
'''#界面显示内容'''
def show(self):
# 显示的标签
self.Display_lable()
# 按键设置
self.anjian()
# 获取系统显示时间
self.getTime() # 获取系统时间
'''#显示的标签'''
def Display_lable(self):
# 设置显示时间的属性
self.label_time = tk.Label(self.root, textvariable=self.systimecound, font=('kaiti', 40), fg='#000000', padx=5,
pady=5,
relief="sunken")
self.label_time.place(x=5, y=5, width=230, height=60)
# 设置倒计时标签
self.label_daojishi = tk.Label(self.root, text='倒 \n计:\n时 ', font=('kaiti', 15), bg='#f0ffff')
self.label_daojishi.place(x=7, y=70, width=25, height=65)
# 设置倒计时单位标签
#self.label_fen = tk.Label(self.root, text='分\n钟', font=('kaiti', 15), bg='#f0ffff')
#self.label_fen.place(x=210, y=65, width=20, height=65)
# 设置倒计时初始值标签
self.label_countDown = tk.Label(self.root, text='00分00秒', font=('kaiti', 30), fg='red', bg='#f0ffff')
self.label_countDown.place(x=30, y=70, width=200, height=50)
# 久坐提醒
self.label_longSit = tk.Label(self.root, text='久坐\n提醒', font=('kaiti', 10), fg='black', bg='#f0ffff')
self.label_longSit.place(x=235, y=10, width=65, height=30)
# 喝水提醒
self.label_water = tk.Label(self.root, text='喝水\n提醒', font=('kaiti', 10), fg='black', bg='#f0ffff')
self.label_water.place(x=235, y=80, width=65, height=30)
# 计划安排
# 按键设置
def anjian(self):
# 开始键
self.button_start = tk.Button(self.root, text='开始', command=self.start_time)
self.button_start.place(x=45, y=125, width=35, height=25)
# 暂停/继续键
self.button_pause = tk.Button(self.root, text='暂停', command=self.pause_time)
self.button_pause.place(x=90, y=125, width=35, height=25)
# 结束键
self.button_end = tk.Button(self.root, text='结束', command=self.end_time)
self.button_end.place(x=135, y=125, width=35, height=25)
# 设置键
self.button_set = tk.Button(self.root, text='设置', command=self.set_time)
self.button_set.place(x=180, y=125, width=35, height=25)
# 单选按钮
self.select_SIT()
self.select_Water()
'''#单选框'''
def select_SIT(self):
# IntVar() 用于处理整数类型的变量
self.selectROOT = tk.IntVar()
# 根据单选按钮的 value 值来选择相应的选项
self.selectROOT.set(0)
# 使用 variable 参数来关联 IntVar() 的变量 v
tk.Radiobutton(self.root, text="OFF", fg='black', font=('微软雅黑', '7', 'bold'),
variable=self.selectROOT, value=0, command=self.select_SIT_False, indicatoron=False).place(x=250,
y=45,
width=40,
height=15)
tk.Radiobutton(self.root, text="ON", fg='black', font=('微软雅黑', '7', 'bold'),
variable=self.selectROOT, value=1, command=self.select_SIT_True, indicatoron=False).place(x=250,
y=60,
width=40,
height=15)
def select_Water(self):
# IntVar() 用于处理整数类型的变量
self.selectWaterROOT = tk.IntVar()
# 根据单选按钮的 value 值来选择相应的选项
self.selectWaterROOT.set(0)
# 使用 variable 参数来关联 IntVar() 的变量 v
tk.Radiobutton(self.root, text="OFF", fg='black', font=('微软雅黑', '7', 'bold'),
variable=self.selectWaterROOT, value=0, command=self.select_Water_False,
indicatoron=False).place(x=250, y=115, width=40, height=15)
tk.Radiobutton(self.root, text="ON", fg='black', font=('微软雅黑', '7', 'bold'),
variable=self.selectWaterROOT, value=1, command=self.select_Water_True, indicatoron=False).place(
x=250, y=130, width=40, height=15)
def select_SIT_True(self):
self.timeSitOld = 0
self.select_SIT_sign = True
self.run_sit()
def select_SIT_False(self):
self.timeSitOld = 0
self.select_SIT_sign = False
def run_sit(self):
if self.select_SIT_sign:
self.timeSitOld += 1
print(self.timeSitOld)
if self.timeSitOld == 5:
self.Top_Show_sit()
self.timeSitOld = 0
self.label_countDown.after(1000, self.run_sit)
def Top_Show_sit(self):
self.top_sit = tk.Toplevel()
self.top_sit.title("温馨提示")
''' 设置窗口大小:宽x高,注,此处不能为 *,必须使用 x '''
self.top_sit.geometry("%sx%s+%s+%s" % (200, 130, self.x, self.y))
''' # 设置窗口处于顶层'''
self.top_sit.attributes('-topmost', True)
'''# 插入分钟数'''
tk.Label(self.top_sit, text='适当的运动可以提高学习效率!!!').place(x=10, y=10)
tishshong().piayshong()
def select_Water_True(self):
self.timeWaterOld = 0
self.select_Water_sign = True
self.run_Water()
def select_Water_False(self):
self.timeWaterOld = 0
self.select_Water_sign = False
def run_Water(self):
if self.select_Water_sign:
self.timeWaterOld += 1
print(self.timeWaterOld)
if self.timeWaterOld == 5:
self.Top_Show_Water()
self.timeWaterOld = 0
self.label_countDown.after(1000, self.run_Water)
def Top_Show_Water(self):
self.top_Water = tk.Toplevel()
self.top_Water.title("温馨提示")
''' 设置窗口大小:宽x高,注,此处不能为 *,必须使用 x '''
self.top_Water.geometry("%sx%s+%s+%s" % (200, 130, self.x, self.y))
''' # 设置窗口处于顶层'''
self.top_Water.attributes('-topmost', True)
'''# 插入分钟数'''
tk.Label(self.top_Water, text='多喝水有,利于健康').place(x=10, y=10)
tishshong().piayshong()
'''#获取时间'''
def getTime(self):
# 获取当前时间
self.systimecound.set(time.strftime("%H:%M:%S"))
# 每隔 1s 调用一次 gettime()函数来获取时间
self.root.after(1000, self.getTime)
'''#开始按键功能'''
def start_time(self):
if self.pause:
self.pause = False
self.set_time_start_sign = True
# 读取开始的时间
self.oldtime = time.time()
# 倒计时开始
self.run_time()
def gettime(self):
# 换算成秒数
try:
min = self.set_min.get()
min = int(min)
except:
min = 0
try:
sec = self.set_mes.get()
sec = int(sec)
except:
sec = 0
self.tmCountShow = 60 * min + sec
return self.tmCountShow
def run_time(self):
if self.set_time_start_sign:
self.tmCountShow = self.gettime()
if self.zanTing and self.jiXu:
self.long = self.jiXu - self.zanTing + self.long
self.zanTing = self.jiXu = 0
elif self.zanTing and not self.jiXu:
self.delta = self.zanTing - self.oldtime - self.long
else:
self.delta = time.time() - self.oldtime - self.long
self.delta1 = int(self.tmCountShow) - int(self.delta)
if self.delta1 > 0:
deltaster = '{:.0f}分{:.0f}'.format(*divmod(self.delta1, 60))+'秒'
else:
deltaster = '00分00秒'
tishshong().piayshong()
tk.messagebox.showinfo('提示!', '时间到')
self.end_time()
self.downtimecound.set(deltaster)
self.label_countDown.config(textvariable=self.downtimecound)
self.label_countDown.after(1, self.run_time)
'''#暂停/继续按键功能'''
def pause_time(self):
if not self.pause and self.set_time_end_sign:
if self.hold:
self.hold = False
self.button_pause.config(text='继续')
self.zanTing = time.time()
else:
self.jiXu = time.time()
self.hold = True
self.button_pause.config(text='暂停')
'''#结束键按键功能'''
def end_time(self):
self.pause = False
self.set_time_end_sign = False
self.set_time_start_sign = False
# 暂停的时间
self.long = 0
self.hold = True
self.delta = 0
self.zanTing = 0
self.jiXu = 0
self.set_min = ''
self.set_mes = ''
self.downtimecound.set('00分00秒')
# 倒计时显示样式
self.label_countDown.config(textvariable=self.downtimecound)
'''#设置键按键功能'''
def set_time(self):
self.Top_Show()
def Top_Show(self):
self.top_level = tk.Toplevel()
self.top_level.title("设置")
# 设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x"
self.top_level.geometry("%sx%s+%s+%s" % (200, 130, self.x, self.y))
# 设置窗口处于顶层
self.top_level.attributes('-topmost', True)
# 插入分钟数
tk.Label(self.top_level, text='分钟:').place(x=10, y=10)
self.set_min = tk.StringVar()
'''# 填写时间'''
self.set_min_time = tk.Entry(self.top_level, textvariable=self.set_min)
self.set_min_time.place(x=50, y=10)
# 插入默认文本
self.set_min_time.insert(0, 0)
# 插入秒数
tk.Label(self.top_level, text='秒数:').place(x=10, y=50)
self.set_mes = tk.StringVar()
# 填写时间
self.set_mes_time = tk.Entry(self.top_level, textvariable=self.set_mes)
self.set_mes_time.place(x=50, y=50)
# 插入默认文本
self.set_mes_time.insert(0, 0)
# 确定键
tk.Button(self.top_level, text="确定", command=self.set_time_end).place(x=70, y=90)
'''#倒计时设置程序'''
def set_time_end(self):
'''# 读取倒计时数值'''
self.downtimecound.set(self.set_min.get() + '分' + self.set_mes_time.get()+'秒')
'''# 倒计时显示样式'''
self.label_countDown.config(textvariable=self.downtimecound)
self.pause = True
'''# 设置结束的标志'''
self.set_time_end_sign = True
'''#关闭弹窗'''
self.top_level.destroy()
class tishshong:
def piayshong(self):
duration = 1000
freq = 440
winsound.Beep(freq, duration)
'''#运行'''
if __name__ == '__main__':
TimeSys().sys_time_display()
&spm=1001.2101.3001.5002&articleId=132004689&d=1&t=3&u=6664c4fac21140c5b09cfa938d4c89b2)
2647

被折叠的 条评论
为什么被折叠?



