前言
有时候需要专心的盯屏幕着干一件事,又懒得一直点任务栏的时间看。有个倒计时可以看,可以提高紧迫感,所以干脆用tkinter做一个简单的倒计时
'''
需求:
1.顶置窗口
2.显示 小时、分钟、秒数
3.有个开始、结束就行,别停,停了就不想动了
4.简单点,少点花里胡哨
'''
全文的核心
时
、分
、秒
换算【简单的除法】
temp_m, s = divmod('总倒计时秒数', 60) # 分,秒
h, m = divmod(temp_m, 60) # 时,分
完整代码
import time
import tkinter as tk
from tkinter import INSERT, NORMAL, DISABLED
from threading import Thread
global temp_time
global time_s_var
global time_m_var
global time_h_var
temp_var = 1 # 停止倒计时用的值
class APP:
def __init__(self):
self.window = tk.Tk()
self.window.title("倒计时")
self.window.attributes('-topmost', -1) # 顶置窗口
self.window.resizable(0, 0) # 固定窗口大小,不可调整
self.window['background'] = '#323232' # 设置背景颜色
self.window.geometry("%dx%d+%d+%d" % (210, 250, 100, 100)) # 宽、高,x坐标为100,y坐标为100
""" 画布 """
self.canvas_1 = tk.Canvas(self.window, width=200, height=20, highlightbackground='#323232', bg='#323232')
self.canvas_1.create_line(10, 10, 190, 10, fill="#a8b6be") # 第一点(x1, y1), 第二点(x2, y2)
self.canvas_2 = tk.Canvas(self.window, width=200, height=20, highlightbackground='#323232', bg='#323232')
self.canvas_2.create_line(10, 10, 190, 10, fill="#a8b6be") # 第一点(x1, y1), 第二点(x2, y2)
""" 画布 END"""
""" 标签 """
self.label_1 = tk.Label(self.window, text=' 倒计时时间 ', font=('微软雅黑', 12, 'bold'), fg='#a8b6be',
bg='#323232', height=2)
global time_s_var
global time_m_var
global time_h_var
# 秒数
time_s_var = tk.StringVar()
time_s_var.set('0秒')
self.label_s_1 = tk.Label(self.window, textvariable=time_s_var, font=('微软雅黑', 18, 'bold'),
fg='#a8b6be', bg='#323232')
# 分钟
time_m_var = tk.StringVar()
time_m_var.set('0分0秒')
self.label_m_1 = tk.Label(self.window, textvariable=time_m_var, font=('微软雅黑', 18, 'bold'),
fg='#a8b6be', bg='#323232')
# 小时
time_h_var = tk.StringVar()
time_h_var.set('0小时0分0秒')
self.label_h_1 = tk.Label(self.window, textvariable=time_h_var, font=('微软雅黑', 18, 'bold'),
fg='#a8b6be', bg='#323232')
""" 标签 END"""
""" 输入框"""
self.mub_input = tk.Entry(self.window, font=('微软雅黑', 18, 'bold'),
fg='#a8b6be', bg='#323232', insertbackground='#323232',
justify='center', relief='flat', width=6)
self.mub_input.insert(INSERT, 300)
""" 输入框 END"""
""" 按钮"""
# 加粗bold,字体颜色fg,背景颜色bg
self.bu_1 = tk.Button(self.window, text=' 开始 ', font=('微软雅黑', 12, 'bold'),
fg='#a8b6be', bg='#323232', command=self.thread_start, borderwidth=0.5)
self.bu_2 = tk.Button(self.window, text=' 结束 ', font=('微软雅黑', 12, 'bold'),
fg='#a8b6be', bg='#323232', command=self.thread_stop)
self.bu_2['state'] = DISABLED # 设置按钮不可选
""" 按钮END"""
self.set_layout() # 启动布局
# 布局
def set_layout(self):
self.label_1.grid(row=1, column=0) # 标签
self.mub_input.grid(row=1, column=2) # 输入框
self.bu_1.grid(row=3, column=0, columnspan=1) # 按钮
self.bu_2.grid(row=3, column=2, columnspan=1) # 按钮
self.canvas_1.grid(row=4, column=0, columnspan=5) # 画布
self.label_s_1.grid(row=5, column=0, columnspan=5) # 标签
self.label_m_1.grid(row=6, column=0, columnspan=5) # 标签
self.label_h_1.grid(row=7, column=0, columnspan=5) # 标签
def thread_start(self):
global temp_time
self.bu_1['state'] = DISABLED # 设置按钮不可选
self.bu_2['state'] = NORMAL # 设置按钮可选
temp_time = 0
tem = int(self.mub_input.get())
Thread(target=self.get_time, args=(tem,), daemon=True).start() # 多线程
def thread_stop(self):
self.bu_1['state'] = NORMAL # 恢复查询按键 可用
self.bu_2['state'] = DISABLED # 设置按钮不可选
Thread(target=self.stop, args=(), daemon=True).start()
# 倒计时
def get_time(self, value):
global temp_time
global time_s_var
global time_m_var
global time_h_var
global temp_var
temp_time = int(value) - 1
if temp_time >= 0:
temp_m, s = divmod(temp_time, 60)
h, m = divmod(temp_m, 60)
time_s_var.set('%d秒' % temp_time)
time_m_var.set('%d分%d秒' % (temp_m, s))
time_h_var.set('%d小时%d分%d秒' % (h, m, s))
time.sleep(1)
if temp_var == 1:
self.get_time(temp_time)
else:
temp_var = 1
self.bu_1['state'] = NORMAL # 恢复查询按键 可用
self.bu_2['state'] = DISABLED # 设置按钮不可选
else:
self.bu_1['state'] = NORMAL # 恢复查询按键 可用
self.bu_2['state'] = DISABLED # 设置按钮不可选
def stop(self):
global temp_var
temp_var = 0
if __name__ == '__main__':
myapp = APP()
myapp.window.mainloop()