今天看到了一个闹钟的视频,于是想到了不如自己也编写一个。让我们先来理一下思路,界面用tkinter编辑,主要是其他的GUI也没用过,datetime获取本地时间。。。。。。

1.好的,思路理完了,让我们来敲代码吧。先创建一个AlarmClock类继承自Tk,控件什么的随便放放,也不用追求什么美观了。

class AlarmClock(Tk):

def __init__(self):

super().__init__()

self.title('我的闹钟')

self.minsize(width=300, height=300)

# 设置控件

Label(self, text='现在时间:', font=('Arial', 15)).place(x=10, y=10)

self.now_time = str(datetime.now()).split('.')[0] #获取本地时间

self.var_nowtime = StringVar(value=self.now_time)

Label(self, textvariable=self.var_nowtime, font=('Arial', 15), bg='#D6EAF8').place(x=50, y=50)

# 闹钟的时间设置部分用了三个entry控件输入时分秒

Label(self, text='设置闹钟:', font=('Arial', 15)).place(x=10, y=90)

self.var_hour = StringVar(value='00')

self.var_min = StringVar(value='00')

self.var_sec = StringVar(value='00')

self.entry_hour = Entry(self, textvariable=self.var_hour, font=('Arial', 15), bg='#D6EAF8', width=3,

justify='center')

self.entry_hour.place(x=60, y=130)

Label(self, text=':', font=('Arial', 15)).place(x=105, y=130)

self.entry_min = Entry(self, textvariable=self.var_min, font=('Arial', 15), bg='#D6EAF8', width=3,

justify='center')

self.entry_min.place(x=120, y=130)

Label(self, text=':', font=('Arial', 15)).place(x=165, y=130)

self.entry_sec = Entry(self, textvariable=self.var_sec, font=('Arial', 15), bg='#D6EAF8', width=3,

justify='center')

self.entry_sec.place(x=180, y=130)

# 因为只能设定一个闹钟,所以再次设定的话要重置

self.btn_replace = Button(self, text='重置', font=('Arial', 12), width=5, command=self.replace)

self.btn_replace.place(x=70, y=180)

# 开关按钮控制闹钟的开和关,初始是OFF状态,点击变成ON状态启动闹钟

self.btn_begin = Button(self, text='OFF', font=('Arial', 12), width=5, command=self.beginning)

self.btn_begin.place(x=150, y=180)

下面是界面图

4)72V({PY5V_L7B9~BRWBVO.png

2.接下来就是编辑两个按钮的功能函数了

开关按钮

def beginning(self):

flag = self.btn_begin['text'] # 定义一个flag来表示闹钟的状态

# 如果是打开状态就什么也不做

if flag == 'ON':

return

# 如果是关闭状态,就把text变为ON,三个输入框变为不可编辑

else:

self.btn_begin['text'] = 'ON'

self.entry_hour['state'] = DISABLED

self.entry_min['state'] = DISABLED

self.entry_sec['state'] = DISABLED

# 获取三个输入框内的时间

set_time = '%s:%s:%s' % (self.entry_hour.get(), self.entry_min.get(), self.entry_sec.get())

list_time = []

for i, j in zip(set_time.split(':'), self.now_time.split(' ')[-1].split(':')):

# 计算离闹钟启动还有多少时间

list_time.append(abs(int(i) - int(j)))

messagebox.showinfo(title='设置成功', message='距离启动还有%d小时%d分%d秒' % tuple(list_time))

重置按钮

def replace(self):

# 重置按钮把三个输入框内容变为00,同时变为可编辑状态,开关按钮变为OFF

self.var_hour.set('00')

self.var_min.set('00')

self.var_sec.set('00')

self.btn_begin['text'] = 'OFF'

self.entry_hour['state'] = NORMAL

self.entry_min['state'] = NORMAL

self.entry_sec['state'] = NORMAL

messagebox.showinfo(title='重置成功', message='重置成功')

3.现在Label显示的本地时间是静止的,要想让它动起来则需要在死循环内不断使用update()方法,所以我们再加一个死循环的方法timer

def timer(self):

player = ctypes.windll.kernel32 # 这个模块我也不是太清楚,这里是用来产生蜂鸣的

while True:

self.now_time = str(datetime.now()).split('.')[0]

self.var_nowtime.set(self.now_time)

self.update()

set_time = '%s:%s:%s' % (self.entry_hour.get(), self.entry_min.get(), self.entry_sec.get())

if self.btn_begin['text'] == 'ON':

# 设定时间和本地时间一致,闹钟就响1.5秒

if set_time == self.now_time.split(' ')[-1]:

for i in range(3):

# 人耳能听到的频率是20~20000HZ,这里设定2000HZ,500ms

player.Beep(2000, 500)

time.sleep(1) # 1秒钟更新一次

到这里这个简单的小程序就完成了,是不是很简单呢。代码其实还有很多可以扩展的地方,比如可以设定多个闹钟(就像手机上一样)。还可以定时关机什么的,看你自由发挥了。其实代码很简单,难的是把界面编辑的好看美观。如果有什么疑问或指教,欢迎交流。

image.png

这是最终的效果图,在设定完时间后点击开关按钮会弹出提示框。

python写小程序-用python编写一个闹钟小程序相关推荐

  1. java写便签_如何编写一个便签程序(用Java语言编写)

    如何编写一个便签程序(用Java语言编写) 热度:336   发布时间:2011-02-18 11:44:16 如何编写一个便签程序(用Java语言编写) 因为以前没有好好学习Java,都搞忘了,请大 ...

  2. python编程100个小程序-用python编写一个闹钟小程序

    今天看到了一个闹钟的视频,于是想到了不如自己也编写一个.让我们先来理一下思路,界面用tkinter编辑,主要是其他的GUI也没用过,datetime获取本地时间...... 1.好的,思路理完了,让我 ...

  3. Python写阴阳师脚本带GUI又是一个学习小技巧

    Python写阴阳师脚本带GUI 需要用到环境 Python3. pycharm.天天模拟器.阴阳师. 准备库 pip install pyautogui pip install pywin32 需要 ...

  4. Python写阴阳师脚本带GUI又是一个学习小技巧!

    需要用到环境 Python3. pycharm.天天模拟器.阴阳师. 准备库 pip install pyautogui pip install pywin32 12 需要用到的全部库 import ...

  5. 用python做一个简单的投票程序_如何编写一个自动投票程序

    展开全部 此文章为ocean所有32313133353236313431303231363533e59b9ee7ad9431333335346138,版权归ocean所有 如何编写投票程序,大致分为这 ...

  6. python做一个闹钟软件下载_Python编写一个闹钟功能

    Python编写一个闹钟功能 音频文件放入和.py文件同级的目录下 import winsound # 导入此模块实现声音播放功能 import time # 导入此模块,获取当前时间 # 提示用户设 ...

  7. python写rest服务_Python 如何创建一个简单的REST接口

    问题 你想使用一个简单的REST接口通过网络远程控制或访问你的应用程序,但是你又不想自己去安装一个完整的web框架. 解决方案 构建一个REST风格的接口最简单的方法是创建一个基于WSGI标准(PEP ...

  8. 利用C#编写一个水准测量近似平差程序

    一.代码界面展示 整个界面主要就是就整个界面而言,其实主要使用到的控件就是Menu,tabControl,dataGridView,richtextbox. 二.代码运算结果展示 1.导入数据 这里就 ...

  9. 让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析

    让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析 标签:new bing.GPT-4 文章目录 让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析 前言 ...

最新文章

  1. Fedora中安装 Shutter步骤介绍
  2. 关于silverlight5 打印功能收集
  3. 解决MyEclipse2015启动时:Java was started but returned exit code=1问题
  4. [YTU]_2417 C语言习题 字符串长度
  5. java快速排序泛型,如何进行对C# .NET通用泛型进行快速排序?
  6. 【windows gdi+】GDI+ Image类加载图片时异常问题处理与分析
  7. 别小看这不起眼的电阻,里面有很多学问!
  8. impdp使用network_link导入
  9. 项目管理系列之项目范围时间及资源管理(一)
  10. asp.net用户注销或者关闭网页时清除用户Cookie
  11. pitr 原理_PostgeSQL 数据库备份与恢复实验 (PITR)
  12. R语言爬虫系列(1)XML抓取表格数据
  13. GTJ2018如何导出全部工程量_新清单计量规范征求意见稿第二期来啦!来看看那些让你烦恼的操作如何解决...
  14. 系统、驱动相关软件下载
  15. 双目立体匹配算法:ELAS
  16. OKR 与绩效考核结合的推进行业案例:医药行业
  17. 如何打开linux字符界面,Linux字符界面转图形界面
  18. ETC和车联网安全认证的基本原理的分析和比较
  19. mac的鼠标滚动方向和触摸板方向,一个插件搞定
  20. kinect java_Kinect for Java

热门文章

  1. sense chrome扩展工具安装问题
  2. 判断某个点是否在不规则图形内
  3. winform修改、打开窗体、构造函数传值
  4. 【快速幂+中等难度】Calculation 哈工大HITOJ2901
  5. 使用Martix来实现缩放图片的功能
  6. 说说身边产品的用户体验
  7. .NET MessageBox 网页弹出消息框
  8. WSS(MOSS)如何修改Rich文本编辑器的宽度
  9. 前端——JavaScript
  10. Mybatis 查询小技巧