因为最近需要用的日期时间选择框,网上找了一圈发现大多都用不了,自己结合官方库写了一个,在这免费分享出来,供有需要的小伙伴使用。

先看效果图:

 

点击开始时间按钮弹出日期选择框,确定后输出到文本框中。

1. 项目背景

在Python GUI开发中,日期时间选择是一个常见的需求。虽然Python提供了tkinter库用于GUI开发,但其原生的日期时间选择功能相对简单。本文将介绍如何使用tkcalendar库开发一个功能完善的日期时间选择器组件。

2. 功能特点

  • 支持日期选择
  • 支持时间选择(小时和分钟)
  • 可自定义日期范围
  • 支持中文界面
  • 美观的界面设计
  • 可复用的组件化设计

3. 环境准备

首先需要安装必要的库:

pip install tkcalendar

4. 代码实现

4.1 导入必要的库

import tkinter as tk
from tkcalendar import Calendar
from tkinter import ttk
from tkinter import *
import datetime

4.2 日期时间选择器组件

def start_calendar():
    def print_sel():
        start_time_text.configure(state="normal")
        selected_date = str(cal.selection_get())
        selected_time = f"{hour.get()}:{minute.get()}"
        formatted_datetime = f"{selected_date} {selected_time}"
        
        start_time_text.delete(0, END)
        start_time_text.insert("0", formatted_datetime)
        start_time_text.configure(state="disabled")
        top.destroy()  # 选择完成后关闭窗口

    # 创建日期选择窗口
    top = tk.Toplevel()
    top.geometry("300x250")
    top.title("选择日期和时间")

    # 设置日期范围
    today = datetime.date.today()
    mindate = datetime.date(year=2022, month=1, day=1)
    maxdate = today + datetime.timedelta(days=5)

    # 创建日历组件
    cal = Calendar(
        top,
        font="Arial 14",
        selectmode='day',
        locale='zh_CN',
        mindate=mindate,
        maxdate=maxdate,
        background="red",
        foreground="blue",
        bordercolor="red",
        selectbackground="red",
        selectforeground="red",
        disabledselectbackground=False
    )
    cal.place(x=0, y=0, width=300, height=200)

    # 创建时间选择组件
    values_h = [f"{i:02d}" for i in range(24)]  # 小时选项
    values_m = [f"{i:02d}" for i in range(60)]  # 分钟选项

    # 小时选择框
    hour = ttk.Combobox(
        master=top,
        height=15,
        width=3,
        state="normal",
        cursor="arrow",
        font=("", 20),
        values=values_h
    )
    hour.place(x=0, y=200)
    ttk.Label(top, text="时").place(x=60, y=195, width=20, height=40)

    # 分钟选择框
    minute = ttk.Combobox(
        master=top,
        height=15,
        width=3,
        state="normal",
        cursor="arrow",
        font=("", 20),
        values=values_m
    )
    minute.place(x=80, y=200)
    ttk.Label(top, text="分").place(x=140, y=195, width=20, height=40)

    # 确定按钮
    tk.Button(top, text="确定", command=print_sel).place(x=240, y=205)

4.3 主程序

def main():
    root = Tk()
    root.title("日期时间选择器示例")
    
    # 创建开始时间按钮和文本框
    start_time = tk.Button(root, text="开始时间", command=start_calendar)
    start_time.place(x=10, y=10)
    
    start_time_text = tk.Entry(root, width=20)
    start_time_text.place(x=100, y=10)
    
    root.geometry("400x200")
    root.mainloop()

if __name__ == "__main__":
    main()

5. 使用说明

  1. 点击"开始时间"按钮打开日期时间选择器
  2. 在日历中选择日期
  3. 在下拉框中选择小时和分钟
  4. 点击"确定"按钮完成选择

6. 自定义配置

6.1 日期范围设置

mindate = datetime.date(year=2022, month=1, day=1)  # 最小日期
maxdate = today + datetime.timedelta(days=5)        # 最大日期

6.2 界面样式设置

# 日历组件样式
cal = Calendar(
    background="red",          # 背景色
    foreground="blue",         # 前景色
    bordercolor="red",        # 边框颜色
    selectbackground="red",    # 选中背景色
    selectforeground="red"     # 选中前景色
)

7. 注意事项

  1. 确保已正确安装tkcalendar
  2. 日期范围设置要合理,避免出现无效日期
  3. 时间选择范围已限制在24小时制
  4. 界面样式可以根据需求自定义

8. 扩展建议

  1. 可以添加日期时间验证功能
  2. 可以增加日期时间格式化选项
  3. 可以添加多语言支持
  4. 可以增加日期时间范围选择功能

9. 常见问题

  1. Q: 为什么日历显示为英文? A: 确保设置了locale='zh_CN'参数

  2. Q: 如何修改日期范围? A: 修改mindatemaxdate参数

  3. Q: 如何自定义界面样式? A: 修改Calendar组件的样式参数

10. 总结

本文介绍了一个基于tkcalendar的日期时间选择器组件的实现方法。该组件具有界面美观、使用简单、功能完善等特点,可以满足大多数Python GUI应用的日期时间选择需求。通过合理的配置和扩展,可以进一步满足特定场景的需求。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐