Python + Tkinter:简单倒计时GUI工具学习

本文介绍了如何利用Python的Tkinter库创建一个简单的倒计时GUI工具,包括代码实现、界面展示,以及解决时间显示和窗口位置的问题。通过这个教程,读者可以学习到Tkinter的基本用法。

更新记录

1、2019-10-12 创建文章
2、2019-10-14 修改时间显示问题
3、2021-01-20 修改框体每次打开均在左上角显示


一、前言

  • 本文主要为记一次Tkinter学习成果,实现简单倒计时GUI工具。
  • Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
  • 由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

二、代码实现

from tkinter import *
from datetime import datetime
from tkinter.messagebox import *


class TestTime(object):
    def __init__(self, master=None):
        self.root = master
        self.root.geometry('400x200')
        self.root.resizable(width=False, height=False)
        self.label_a = Label(self.root, text='当前本地时间为:\t\t')
        self.label_a.pack()
        self.label_b = Label(self.root, text="")
        self.label_b.pack()
        self.label_c = Label(self.root, text='\n距离中午吃饭还有:\t\t')
        self.label_c.pack()
        self.label_d = Label(self.root, text="")
        self.label_d.pack()
        self.label_e = Label(self.root, text='\n距离今天下班还有:\t\t')
        self.label_e.pack()
        self.label_f = Label(self.root, text="")
        self.label_f.pack()
        self.update_time()

    def update_time(self):
        self.update_a()
        self.update_b()
        self.update_c()

    def update_a(self):
        now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        self.label_b.configure(text=now)
        self.root.after(1000, self.update_a)

    def update_b(self):
        # 获取当日日期,不包含时间,str
        now_day = datetime.now().strftime("%Y-%m-%d")
        # 字符串拼接,组成当日12点
        a = now_day + ' 12:00:00'
        new_time = datetime.strptime(a, "%Y-%m-%d %H:%M:%S")
        t = new_time - datetime.now()
        self.label_d.configure(text=t)
        self.root.after(1000, self.update_b)

    def update_c(self):
        # 获取当日日期,不包含时间,str
        now_day = datetime.now().strftime("%Y-%m-%d")
        # 字符串拼接,组成当日12点
        a = now_day + ' 18:00:00'
        new_time = datetime.strptime(a, "%Y-%m-%d %H:%M:%S")
        t = new_time - datetime.now()
        self.label_f.configure(text=t)
        self.root.after(1000, self.update_c)


if __name__ == '__main__':
    root = Tk()
    root.title('计时小界面')
    # 窗口置顶.
    root.wm_attributes('-topmost', 1)
    TestTime(root)
    root.mainloop()



三、界面展示

在这里插入图片描述

四、拓展:新增定时提醒

    def update_d(self):
        now_time = datetime.now().strftime("%H:%M:%S")
        if now_time >= '11:00:00' and now_time <= '11:30:00':
            showinfo(title='吃饭/喝水提醒', message='该吃饭了!!!!该喝水了!!!!')
        else:
            pass
        self.root.after(300000, self.update_d)  # 单位毫秒

注:需在update_time内添加:self.update_d()

五、2019-10-14 修改时间显示问题

目的: 修改本地时间超过12点或18点后,显示异常问题

1. 问题展示:

修改前
2.问题修改

    def update_b(self):
        # 字符串拼接,组成当日12点
        a = datetime.now().strftime("%Y-%m-%d") + ' 12:00:00'
        new_time = datetime.strptime(a, "%Y-%m-%d %H:%M:%S")
        p = str(new_time - datetime.now()).split('.')[0].split(':')
        if "-1 day" in str(new_time - datetime.now()):
            test = '吃完午饭,开始坐等下班!'
        else:
            test = "%s 小时 %s分钟 %s 秒" % (p[0], p[1], p[2])
        self.label_d.configure(text=test)
        self.root.after(1000, self.update_b)

    def update_c(self):
        # 字符串拼接,组成当日18点
        a = datetime.now().strftime("%Y-%m-%d") + ' 18:00:00'
        new_time = datetime.strptime(a, "%Y-%m-%d %H:%M:%S")
        p = str(new_time - datetime.now()).split('.')[0].split(':')
        if "-1 day" in str(new_time - datetime.now()):
            test = '下班啦!!!'
        else:
            test = "%s 小时 %s分钟 %s 秒" % (p[0], p[1], p[2])
        self.label_f.configure(text=test)
        self.root.after(1000, self.update_c)

修改后


六、2021-01-20 修改框体每次打开均在左上角显示

  • 可通过root.geometry(width,height)来设置窗口的位置
    root = Tk()
    root.title('计时小界面')
    # 窗口置顶.
    root.wm_attributes('-topmost', 1)

    # 移动窗口至屏幕中心
    width = root.winfo_screenwidth()/2 - 350/2  # 计算中心坐标点
    height = root.winfo_screenheight()/2 - 500/2    # 计算中心坐标点
    root.geometry("+{0}+{1}".format(int(width), int(height)))   # 移动窗口
    
    TestTime(root)
    root.mainloop()
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值