欢迎光临散文网 会员登陆 & 注册

日程管理工具源码

2023-07-02 21:05 作者:学术追梦人  | 我要投稿

最近到了假期,时间过得很快,但是效率又不高,于是我想到用Python制作一下日程管理工具,用于提醒我抓紧时间做好重要的事情。软件的图如下:

软件的界面

源码展如如下:

import tkinter as tk

from tkinter import messagebox

from datetime import datetime

import tkinter.font as tkFont

class ScheduleApp:

    def __init__(self, master):

        self.master = master

        self.master.title("日程管理1.0 by Gordon")

        self.font = tkFont.Font(family="楷体", size=13)

        # 创建标签、文本框和按钮

        self.label = tk.Label(master, text="日程:",font=self.font)

        self.label.grid(row=0, column=0, padx=10, pady=10, sticky="e")

        

        self.entry = tk.Entry(master, width=35)

        self.entry.grid(row=0, column=1, padx=10, pady=10, sticky="w",columnspan = 3)

        

        self.time_label = tk.Label(master, text="时间:",font=self.font)

        self.time_label.grid(row=1, column=0, padx=10, pady=10, sticky="e")

        

        # 创建时间选择框

        self.hour_var = tk.StringVar(master)

        self.minute_var = tk.StringVar(master)

        self.second_var = tk.StringVar(master)

        

        self.hour_var.set("08")

        self.minute_var.set("10")

        self.second_var.set("00")

        

        self.hour_option = tk.OptionMenu(master, self.hour_var, *range(24))

        self.minute_option = tk.OptionMenu(master, self.minute_var, *range(60))

        self.second_option = tk.OptionMenu(master, self.second_var, *range(60))

        

        self.hour_option.grid(row=1, column=1, padx=10, pady=10, sticky="w")

        self.minute_option.grid(row=1, column=2, padx=10, pady=10, sticky="w")

        self.second_option.grid(row=1, column=3, padx=10, pady=10, sticky="w")

        

        self.edit_label = tk.Label(master, text="编辑:",font=self.font)

        self.edit_label.grid(row=2, column=0, padx=10, pady=10, sticky="e")

        

        self.add_btn = tk.Button(master, text="添加", font=self.font, command=self.add_schedule)

        self.add_btn.grid(row=2, column=1, ipadx=7,padx=10, pady=10, sticky="w")

        

        self.modify_btn = tk.Button(master, text="修改", font=self.font, command=self.modify_schedule)

        self.modify_btn.grid(row=2, column=2, ipadx=7, padx=10, pady=10, sticky="w")

        

        self.delete_btn = tk.Button(master, text="删除", font=self.font, command=self.delete_schedule)

        self.delete_btn.grid(row=2, column=3, ipadx=7, padx=10, pady=10, sticky="w")

        

        # 创建日程列表框

        self.schedule_listbox = tk.Listbox(master,font=self.font,height=6,width=35)

        self.schedule_listbox.grid(row=3, column=0, columnspan=4, padx=10, pady=10)


        # 添加示例数据

        self.schedule_list = [("制作每日一句", "07:50:00"), ("做Python题", "08:30:00"), ("马上关机睡觉", "12:24:40")]

        for schedule, _ in self.schedule_list:

            self.schedule_listbox.insert(tk.END, schedule+":"+_)

        # 创建Label来显示时间

        self.nowtime_label = tk.Label(root, text="时间", font=("Arial", 16))

        self.nowtime_label.grid(row=4, column=0, columnspan=4, padx=10, pady=1)

        self.update_time()

        # 启动定时器

        self.check_schedule()

    def update_time(self):

        current_time = datetime.now().strftime("%H:%M:%S")

        self.nowtime_label.config(text=f"现在时间:{current_time}")

        self.nowtime_label.after(1000, self.update_time)  # 每隔一秒钟更新时间

    def get_time(self):

        schedule = self.entry.get()

        hour = self.hour_var.get()

        minute = self.minute_var.get()

        second = self.second_var.get()

        time = f"{hour:0>2}:{minute:0>2}:{second:0>2}"

        return schedule,time

    def add_schedule(self):

        schedule,time = self.get_time()

        if schedule and time:

            self.schedule_list.append((schedule, time))

            self.schedule_listbox.insert(tk.END, schedule+":"+time)

            self.entry.delete(0, tk.END)

            self.hour_var.set("08")

            self.minute_var.set("00")

            self.second_var.set("00")

        else:

            messagebox.showwarning("警告", "请输入事件和时间!")


    def modify_schedule(self):

        selected_index = self.schedule_listbox.curselection()

        old_schedule = self.schedule_listbox.get(selected_index)

        if selected_index:

            schedule,time = self.get_time()

            if schedule and time:

                index = selected_index[0]

                self.schedule_list[index] = (schedule, time)

                self.schedule_listbox.delete(index)

                self.schedule_listbox.insert(index, schedule)

                self.entry.delete(0, tk.END)

                self.hour_var.set("08")

                self.minute_var.set("00")

                self.second_var.set("00")

            elif time and not schedule:

                index = selected_index[0]

                self.schedule_list[index] = (old_schedule, time)

                self.schedule_listbox.delete(index)

                self.schedule_listbox.insert(index,old_schedule.split(":")[0]+":"+time)

                #self.schedule_listbox.insert(index,old_schedule.split(":")[0]+":"+time)

#                 print(index,self.schedule_list[index])

            else:

                messagebox.showwarning("警告", "请输入事件和时间!")

        else:

            messagebox.showwarning("警告", "请选择要修改的事件!")


    def delete_schedule(self):

        # 删除日程

        selected_index = self.schedule_listbox.curselection()

        if selected_index:

            index = selected_index[0]

            self.schedule_list.pop(index)

            self.schedule_listbox.delete(index)

            self.entry.delete(0, tk.END)

            self.hour_var.set("00")

            self.minute_var.set("00")

            self.second_var.set("00")

        else:

            messagebox.showwarning("警告", "请选择要删除的事件!")


    def show_custom_info(self,message):

        # 设置自定义的弹窗

        top = tk.Toplevel()

        top.title("提醒")

        

        label = tk.Label(top, text=message, font=("楷体", 18))

        label.pack(padx=100, pady=60)       

        

        button = tk.Button(top, text="OK", width=10, command=top.destroy)

        button.pack(pady=10)

        


    def check_schedule(self):

        now = datetime.now().strftime("%H:%M:%S")


        for schedule, time in self.schedule_list:

            if now == time:

                # 调用自定义消息框

                self.show_custom_info(f"提醒!{schedule}".split(":")[0]+f":{time}")

                #messagebox.showinfo("提醒", f"该事件已到时:{schedule}{time}")

        

        self.master.after(1000, self.check_schedule)  # 每隔一秒钟检查一次日程


# 创建主窗口

root = tk.Tk()


# 实例化日程管理应用程序

app = ScheduleApp(root)


# 运行主循环

root.mainloop()

日程管理工具源码的评论 (共 条)

分享到微博请遵守国家法律