tkinter简易倒计时软件

Tkinter倒计时应用程序

本blog由GPT辅助完成书写

环境准备

Tkinter是Python的标准GUI(图形用户界面)库,它让你可以轻松创建窗口、按钮、文本框等组件。而PyInstaller则是一个强大的工具,它可以将你的Python程序打包成独立的可执行文件(.exe),让没有Python环境的用户也能运行你的程序。

首先,确保你已经安装了Python。然后,通过pip安装Tkinter(通常Python自带Tkinter,但如果没有,可以通过pip安装)和PyInstaller。打开命令行,输入以下命令:

pip install tk
pip install pyinstaller

Tkinter基础

Tkinter它使用面向对象的方式来创建和管理GUI。我们的项目开始于创建一个Tk窗口对象,这是所有Tkinter应用的基础。

import tkinter as tk
root = tk.Tk()
root.title("Countdown Wizard")

我们设置了窗口的标题为“Countdown Wizard”

构建倒计时功能

接下来,我们创建一个界面让用户输入日期和时间。Tkinter的Entry组件用于接收用户的输入,Label用于显示文本,Button用于执行操作。

self.date_entry = ttk.Entry(entry_frame, width=10)
self.time_entry = ttk.Entry(entry_frame, width=10)

我们使用了ttk模块,这是Tkinter的一个扩展,提供了更现代化的组件。

日期时间处理

倒计时的核心是处理日期和时间。Python的datetime模块非常适合这个任务。我们用它来计算现在到目标时间的差异:

from datetime import datetime
target_datetime = datetime.strptime(date_str + ' ' + time_str, '%Y-%m-%d %H:%M:%S')

界面美化和功能增强

界面的美观同样重要。Tkinter提供了多种方式来改善用户界面,比如使用不同的字体、颜色和布局。我们在代码中设置了标签和按钮的字体:

self.style.configure('TLabel', font=('Arial', 12))
self.style.configure('TButton', font=('Arial', 12))

打包成.exe文件

最后,我们使用PyInstaller将我们的应用打包成.exe文件。这个过程非常简单,只需在命令行中运行以下命令:

pyinstaller --onefile your_script_name.py

PyInstaller会创建一个dist文件夹,你的.exe文件就在里面。

完整代码

import tkinter as tk
from tkinter import ttk
from datetime import datetime, timedelta
import threading

# 主应用程序类


class CountdownApp:
    def __init__(self, root):
        self.root = root  # 这是一个Tkinter窗口对象
        root.title("Countdown Wizard")  # 设置窗口标题

        # 样式设置
        self.style = ttk.Style()  # 使用ttk模块创建样式对象
        self.style.configure('TLabel', font=('Arial', 12))  # 设置标签的字体
        self.style.configure('TButton', font=('Arial', 12))  # 设置按钮的字体

        # 倒计时列表
        self.countdowns = []

        # 设置用户界面
        self.setup_ui()  # 调用setup_ui方法来构建界面

    def setup_ui(self):
        # 日期和时间输入的框架
        entry_frame = ttk.Frame(self.root, padding="10")
        entry_frame.grid(row=0, column=0, sticky=(tk.W, tk.E))

        # 日期输入
        self.date_entry = ttk.Entry(entry_frame, width=10)  # 创建日期输入框
        self.date_entry.grid(row=0, column=1, padx=5)  # 定位日期输入框
        ttk.Label(entry_frame, text="YYYY-MM-DD").grid(row=0,
                                                       column=0)  # 创建并定位日期格式的标签

        # 时间输入
        self.time_entry = ttk.Entry(entry_frame, width=10)  # 创建时间输入框
        self.time_entry.grid(row=0, column=3, padx=5)  # 定位时间输入框
        ttk.Label(entry_frame, text="HH:MM:SS").grid(
            row=0, column=2)  # 创建并定位时间格式的标签

        # 添加倒计时的按钮
        ttk.Button(entry_frame, text="Add Countdown",
                   command=self.add_countdown).grid(row=0, column=4, padx=10)

        # 显示倒计时的框架
        self.countdown_frame = ttk.Frame(self.root, padding="10")
        self.countdown_frame.grid(row=1, column=0, sticky=(tk.W, tk.E))

        # 座右铭输入
        self.motto_entry = ttk.Entry(self.root, width=30)  # 创建座右铭输入框
        self.motto_entry.grid(row=2, column=0, pady=10)  # 定位座右铭输入框

        # 设置座右铭的按钮
        ttk.Button(self.root, text="Set Motto",
                   command=self.set_motto).grid(row=2, column=1)

        # 显示座右铭的标签
        self.motto_label = ttk.Label(
            self.root, text="", font=('Arial', 14, 'italic'))
        self.motto_label.grid(row=3, column=0, columnspan=2)  # 创建并定位座右铭标签

    def add_countdown(self):
        # 解析日期和时间
        date_str = self.date_entry.get()  # 获取日期输入框的内容
        time_str = self.time_entry.get()  # 获取时间输入框的内容
        try:
            # 将日期和时间字符串转换为datetime对象
            target_datetime = datetime.strptime(
                date_str + ' ' + time_str, '%Y-%m-%d %H:%M:%S')
            countdown_label = ttk.Label(
                self.countdown_frame, text="")  # 创建显示倒计时的标签
            countdown_label.pack()  # 将标签添加到倒计时框架中

            # 将倒计时添加到列表中
            self.countdowns.append((target_datetime, countdown_label))
            self.update_countdown(countdown_label, target_datetime)  # 更新倒计时显示
        except ValueError:
            print("Invalid date/time format")  # 如果日期或时间格式不正确,打印错误信息


    def update_countdown(self, label, target_datetime):
        def countdown():
            now = datetime.now()
            if target_datetime > now:
                delta = target_datetime - now
                hours, remainder = divmod(int(delta.total_seconds()), 3600)
                minutes, seconds = divmod(remainder, 60)
                label.config(
                    text=f"{hours} Hours, {minutes} Minutes, {seconds} Seconds left")
                # 安排下一次更新
                label.after(1000, countdown)
            else:
                label.config(text="Countdown Ended")

        # 在主线程中启动倒计时
        countdown()


    def set_motto(self):
        motto = self.motto_entry.get()  # 获取座右铭输入框的内容
        self.motto_label.config(text=motto)  # 设置座右铭标签的文本


# 创建Tkinter窗口
root = tk.Tk()  # 创建一个Tk窗口实例
app = CountdownApp(root)  # 创建应用程序实例,并将窗口实例传递给它

# 启动应用程序
root.mainloop()  # 启动Tkinter的事件循环,显示窗口并等待用户交互




效果演示

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中的代码是一个使用tkinter库实现的倒计时器。代码中创建了一个继承自Tk的类MyApp,其中初始化了窗口的标题、大小和图标,并创建了一个IntVar变量用于保存倒计时数。通过Label显示倒计时数,并通过Button触发倒计时的逻辑。当按钮被点击时,倒计时数减1,直到倒计时结束。\[1\] 引用\[2\]中的代码也是使用tkinter库实现的倒计时器。代码中创建了一个窗口,并定义了一个全局变量allSeconds用于保存倒计时的总秒数。通过Button触发倒计时的逻辑,每秒更新倒计时的显示。当倒计时结束时,弹出提示框显示倒计时结束的消息。\[2\] 如果你想要显示倒计时,可以使用上述代码中的任意一段。你可以根据自己的需求选择使用哪一段代码,并根据需要进行适当的修改。 #### 引用[.reference_title] - *1* *3* [python,根据tkinter计数器案例,写了个倒计时器](https://blog.csdn.net/qq_29061315/article/details/125400316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [tkinter 实现倒计时(1小时)](https://blog.csdn.net/qq_52722885/article/details/128642899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值