当前位置: 首页 > news >正文

ttkbootstrap 实现日期选择器, 开始和结束时间

ttkbootstrap 实现日期选择器, 开始和结束时间

1. 展示

在这里插入图片描述

2. 打印

在这里插入图片描述

3. 源码
from datetime import datetime
import ttkbootstrap as ttk


class DateTimeEntryStart(ttk.Frame):
    def __init__(self, master=None, **kwargs):
        super().__init__(master, **kwargs)
        self.date_entry = ttk.DateEntry(self, bootstyle="secondary", width=8)
        self.date_entry.pack(side="left", padx=2)

        # 创建自定义弹出窗口
        self.popup = ttk.Frame(self.date_entry)
        self.popup.pack(side="top", pady=5)

        # 在弹出窗口中添加小时和分钟的输入框,并设置默认值为23:59
        self.hour_spinbox = ttk.Spinbox(self.popup, from_=0, to=23, width=2)
        self.hour_spinbox.set(23)  # 设置默认小时为23
        self.hour_spinbox.grid(row=0, column=0, padx=2, pady=5)

        self.minute_spinbox = ttk.Spinbox(self.popup, from_=0, to=59, width=2)
        self.minute_spinbox.set(59)  # 设置默认分钟为59
        self.minute_spinbox.grid(row=0, column=1, padx=2, pady=5)

    def get_datetime(self):
        try:
            date = self.date_entry.entry.get()
            hour = self.hour_spinbox.get()
            minute = self.minute_spinbox.get()
            # 将日期和时间组合成字符串
            datetime_str = f"{date} {hour}:{minute}"
            # 解析字符串为 datetime 对象
            dt = datetime.strptime(datetime_str, "%Y/%m/%d %H:%M")
            # 格式化为 %Y-%m-%d %H:%M:%S
            return dt.strftime("%Y-%m-%d %H:%M:%S")
        except ValueError:
            return "Invalid date or time"


class DateTimeEntryEnd(ttk.Frame):
    def __init__(self, master=None, **kwargs):
        super().__init__(master, **kwargs)
        self.date_entry = ttk.DateEntry(self, bootstyle="secondary", width=8)
        self.date_entry.pack(side="left", padx=2)

        # 创建自定义弹出窗口
        self.popup = ttk.Frame(self.date_entry)
        self.popup.pack(side="top", pady=5)

        # 在弹出窗口中添加小时和分钟的输入框,并设置默认值为23:59
        self.hour_spinbox = ttk.Spinbox(self.popup, from_=0, to=23, width=2)
        self.hour_spinbox.set(23)  # 设置默认小时为23
        self.hour_spinbox.grid(row=0, column=0, padx=2, pady=5)

        self.minute_spinbox = ttk.Spinbox(self.popup, from_=0, to=59, width=2)
        self.minute_spinbox.set(59)  # 设置默认分钟为59
        self.minute_spinbox.grid(row=0, column=1, padx=2, pady=5)

    def get_datetime(self):
        try:
            date = self.date_entry.entry.get()
            hour = self.hour_spinbox.get()
            minute = self.minute_spinbox.get()
            # 将日期和时间组合成字符串
            datetime_str = f"{date} {hour}:{minute}"
            # 解析字符串为 datetime 对象
            dt = datetime.strptime(datetime_str, "%Y/%m/%d %H:%M")
            # 格式化为 %Y-%m-%d %H:%M:%S
            return dt.strftime("%Y-%m-%d %H:%M:%S")
        except ValueError:
            return "Invalid date or time"


root = ttk.Window(title="日期时间选择器")
root.geometry("800x600")

# 创建一个 Frame 来包裹控件
frame = ttk.Frame(root)
frame.pack()

# 创建自定义的日期时间选择器并放入 Frame 中
datetime_entry_start = DateTimeEntryStart(frame)
datetime_entry_start.pack(side="left", padx=2)

label_to_time = ttk.Label(frame, text="至")
label_to_time.pack(side="left", padx=2)

datetime_entry_end = DateTimeEntryEnd(frame)
datetime_entry_end.pack(side="left", padx=2)

# 打印获取的日期时间
print(datetime_entry_start.get_datetime())
print(datetime_entry_end.get_datetime())

root.mainloop()

http://www.dtcms.com/a/111909.html

相关文章:

  • OrangePi5Plus开发板不能正确识别USB 3.0 设备 (绿联HUB和Camera)
  • Flutter性能优化细节
  • 分子生成的深层次层次变分自编码器 - DrugHIVE 测评
  • Jetpack Compose CompositionLocal 深入解析:局部参数透传实践
  • Linux信号处理解析:从入门到实战
  • 星途(3)
  • C/C++的条件编译
  • 【Tauri2】014——简单使用listen和emit
  • DuckDB系列教程:如何分析Parquet文件
  • Linux中的调试器gdb与冯·诺伊曼体系
  • 使用MCP方案与Claude实现虚幻引擎自动化游戏开发
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • 【LLM】使用MySQL MCP Server让大模型轻松操作本地数据库
  • JSON-lib考古现场:在2025年打开赛博古董店的奇妙冒险
  • 如何分析 jstat 统计来定位 GC?
  • Navicat17详细安装教程(附最新版本安装包和补丁)2025最详细图文教程安装手册
  • 运算放大器(五)电压比较器
  • WSL使用经验
  • 从代码学习深度学习 - GRU PyTorch版
  • 基于大模型与动态接口调用的智能系统(知识库实现)
  • 动态规划似包非包系列一>组合总和IIV
  • leetcode117 填充每个节点的下一个右侧节点指针2
  • ctfshow VIP题目限免 phps源码泄露
  • LMK04828使用指南-01-简介与引脚功能描述
  • vm虚拟机虚拟出网卡并ping通外网
  • Linux驱动开发练习案例
  • 三、Jenkinsfile 的使用
  • 数字人代言人如何提升品牌信任度?
  • [C/C++]文件输入输出
  • 【YOLO系列(V5-V12)通用数据集-电梯内电动车检测数据集】