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
相关产品推荐
相关产品推荐

