You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何格式化打印tkinter表单数据并实现时间计算功能

依赖安装

pip install tabulate

完整可运行代码

from tkinter import *
from tkinter.ttk import *
from tabulate import tabulate
from datetime import datetime

win = Tk()
win.geometry("500x600")
win.title("Schedule")

# 全局变量存储所有日程记录
schedules = []
# 时间格式化模板
TIME_FMT = "%I:%M%p"

# 日期输入
Label(win, text="Date").pack()
ent1 = Entry(win)
ent1.pack()

# 开始时间选择
Label(win, text="Start time").pack()
cb_list1 = ["8:00am","9:00am","10:00am","11:00am","12:00pm","13:00pm","14:00pm","15:00pm","16:00pm","17:00pm"]
cb1 = Combobox(win)
cb1.config(values = cb_list1)
cb1.pack()

# 结束时间选择
Label(win, text="End time").pack()
cb_list2 = ["9:00am","10:00am","11:00am","12:00pm","13:00pm","14:00pm","15:00pm","16:00pm","17:00pm","18:00pm"]
cb2 = Combobox(win)
cb2.config(values = cb_list2)
cb2.pack()

# 主题输入
Label(win, text="Subject").pack()
ent2 = Entry(win, width = 25)
ent2.pack()

# 地点输入
Label(win, text="Venue").pack()
ent3 = Entry(win, width = 25)
ent3.pack()

# 优先级选择
priority = [("High", "High"),("Medium", "Medium"),("Low", "Low"),]
Label(win, text="Priority").pack()
rv = StringVar()
for text, mode in priority:
    rb1 = Radiobutton(win, text = text, value = mode, variable = rv)
    rb1.pack()

# 提示标签
tip_lab = Label(win, text="", foreground="red")
tip_lab.pack(pady=5)

def click():
    # 获取所有输入值
    date = ent1.get().strip()
    start_str = cb1.get().strip()
    end_str = cb2.get().strip()
    subject = ent2.get().strip()
    venue = ent3.get().strip()
    priority = rv.get().strip()

    # 基础校验
    if not all([date, start_str, end_str, subject, venue, priority]):
        tip_lab.config(text="请填写所有字段后提交")
        return
    try:
        start_time = datetime.strptime(start_str, TIME_FMT)
        end_time = datetime.strptime(end_str, TIME_FMT)
    except ValueError:
        tip_lab.config(text="请选择合法的起止时间")
        return
    if end_time <= start_time:
        tip_lab.config(text="结束时间不能早于等于开始时间")
        return

    # 计算时长
    duration = end_time - start_time
    duration_str = f"{duration.seconds//3600}h {(duration.seconds%3600)//60}m"

    # 追加到日程列表
    schedules.append([date, start_str, end_str, duration_str, subject, venue, priority])
    tip_lab.config(text="提交成功")

    # 打印结构化表格
    headers = ["Date", "Start Time", "End Time", "Duration", "Subject", "Venue", "Priority"]
    print("\n" + tabulate(schedules, headers=headers, tablefmt="grid") + "\n")

# 提交按钮
btn = Button(win, text = "Appointment", command = click)
btn.pack(pady=10)

# 结果展示标签
lab1 = Label(win)
lab1.pack()
lab2 = Label(win)
lab2.pack()
lab3 = Label(win)
lab3.pack()
lab4 = Label(win)
lab4.pack()
lab5 = Label(win)
lab5.pack()
lab6 = Label(win)
lab6.pack()

win.mainloop()

功能说明

  • 每次提交后自动校验输入合法性,错误时展示红色提示
  • 自动计算日程持续时长,添加到表格输出字段
  • 所有提交的日程会累计存储,每次打印全量结构化表格,支持多日程统一展示
  • 表格输出使用grid格式,边界清晰符合结构化展示需求

内容的提问来源于stack exchange,提问作者Sumu Lack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:54:03