用python编程小程序制作_用python编写一个闹钟小程序

今天看到了一个闹钟的视频,于是想到了不如自己也编写一个。让我们先来理一下思路,界面用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)

下面是界面图

1063c39f4864

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秒钟更新一次

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

1063c39f4864

image.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值