python编写一个GUI倒计时器

  

下面是Python编写一个GUI倒计时器的完整攻略:

1. 准备工作

在编写GUI倒计时器前,我们需要安装Python以及Tkinter库。Python是一种流行的高级编程语言,而Tkinter是Python自带的图形用户界面(GUI)库。

安装Python可以前往官网下载,安装过程中需要选择添加Python到系统路径;安装完成后,打开命令行(Windows下可以使用Win+R打开运行框,输入cmd)执行以下命令安装Tkinter库:

pip install tk

当以上两个准备工作完成之后,我们就可以开始编写GUI倒计时器了。

2. 编写代码

2.1 导入库

在代码文件的开头,我们需要导入Python自带的一些库和Tkinter库。

import tkinter as tk
import time

2.2 创建窗口

在主函数中,首先要创建一个窗口,可以使用Tk()函数来创建,这个窗口相当于是一个容器,我们可以在窗口中添加各种组件,比如标签、按钮、文本框等等。

def main():
    window = tk.Tk()
    window.title("倒计时器")
    window.geometry("300x150")
    window.mainloop()

2.3 添加标签和文本框

倒计时器需要展示当前的倒计时时间,我们可以在窗口中添加一个标签和一个文本框来展示。

def main():
    window = tk.Tk()
    window.title("倒计时器")
    window.geometry("300x150")

    label = tk.Label(window, text="倒计时:", font=("Arial", 18))
    label.pack()

    time_text = tk.StringVar()
    time_text.set("00:00:00")
    time_label = tk.Label(window, textvariable=time_text, font=("Arial", 24))
    time_label.pack()

    window.mainloop()

2.4 编写倒计时函数

接下来,我们需要实现一个倒计时的函数。倒计时的核心是使用Python的time库来获取当前时间,然后计算与目标时间的差距,接着将差距转换成时、分、秒三个部分,最后展示到文本框中。

def countdown(time_text):
    target_time = time.mktime(time.strptime("2020-12-31 23:59:59", "%Y-%m-%d %H:%M:%S"))
    while True:
        current_time = time.time()
        remaining_time = target_time - current_time
        if remaining_time <= 0:
            break
        hours = int(remaining_time // 3600)
        minutes = int((remaining_time % 3600) // 60)
        seconds = int(remaining_time % 60)
        time_str = "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds)

        time_text.set(time_str)
        time_text.get()
        time.sleep(1)

2.5 添加按钮并绑定事件

最后一步是添加一个按钮,在按钮被点击时调用countdown函数进行倒计时,我们可以使用Button组件来实现这个按钮,并使用command属性绑定countdown函数。

def main():
    window = tk.Tk()
    window.title("倒计时器")
    window.geometry("300x150")

    label = tk.Label(window, text="倒计时:", font=("Arial", 18))
    label.pack()

    time_text = tk.StringVar()
    time_text.set("00:00:00")
    time_label = tk.Label(window, textvariable=time_text, font=("Arial", 24))
    time_label.pack()

    start_btn = tk.Button(window, text="开始倒计时", font=("Arial", 16), command=lambda: countdown(time_text))
    start_btn.pack()

    window.mainloop()


if __name__ == '__main__':
    main()

3. 示例说明

下面我们分别介绍两个倒计时器的示例。

3.1 示例一

要求实现一个倒计时器,从当前时间开始倒计时10分钟。

def main():
    window = tk.Tk()
    window.title("倒计时器")
    window.geometry("300x150")

    label = tk.Label(window, text="倒计时:", font=("Arial", 18))
    label.pack()

    time_text = tk.StringVar()
    time_text.set("00:10:00")
    time_label = tk.Label(window, textvariable=time_text, font=("Arial", 24))
    time_label.pack()

    start_btn = tk.Button(window, text="开始倒计时", font=("Arial", 16), command=lambda: countdown(600, time_text))
    start_btn.pack()

    window.mainloop()


def countdown(seconds, time_text):
    target_time = time.time() + seconds
    while True:
        current_time = time.time()
        remaining_time = target_time - current_time
        if remaining_time <= 0:
            break
        hours = int(remaining_time // 3600)
        minutes = int((remaining_time % 3600) // 60)
        seconds = int(remaining_time % 60)
        time_str = "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds)

        time_text.set(time_str)
        time_text.get()
        time.sleep(1)


if __name__ == '__main__':
    main()

3.2 示例二

要求实现一个倒计时器,到指定的日期时间后进行提醒。

def main():
    window = tk.Tk()
    window.title("倒计时器")
    window.geometry("300x150")

    label = tk.Label(window, text="倒计时:", font=("Arial", 18))
    label.pack()

    time_text = tk.StringVar()
    time_text.set("00:00:00")
    time_label = tk.Label(window, textvariable=time_text, font=("Arial", 24))
    time_label.pack()

    start_btn = tk.Button(window, text="开始倒计时", font=("Arial", 16), command=lambda: countdown("2021-01-01 00:00:00", time_text))
    start_btn.pack()

    window.mainloop()


def countdown(target_time_str, time_text):
    target_time = time.mktime(time.strptime(target_time_str, "%Y-%m-%d %H:%M:%S"))
    while True:
        current_time = time.time()
        remaining_time = target_time - current_time
        if remaining_time <= 0:
            break
        hours = int(remaining_time // 3600)
        minutes = int((remaining_time % 3600) // 60)
        seconds = int(remaining_time % 60)
        time_str = "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds)

        time_text.set(time_str)
        time_text.get()
        time.sleep(1)

    tk.messagebox.showinfo("提示", "倒计时结束!")


if __name__ == '__main__':
    main()

这两个示例分别展示了从当前时间开始倒计时10分钟和到指定时间后进行提醒的倒计时器,你可以根据自己的需求进行修改。

相关文章