猫史档案馆


【Python作品分享】计划单

用户:清凤影YYDS清凤影YYDS查看:0 回复:0 评论:0 创建时间:2023-05-01T02:42:00


【作品展示】

center_image

 

【作品介绍】

由ChatGPT制作

 

【作品源代码】

import os
from tkinter import filedialog, messagebox
import tkinter as tk
from tkinter import simpledialog


class PlanList(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

        # 添加“保存”和“读取”按钮
        self.save_button = tk.Button(self, text="保存", command=self.save_plans)
        self.save_button.pack(side="left")
        self.load_button = tk.Button(self, text="读取", command=self.load_plans)
        self.load_button.pack(side="right")

    def create_widgets(self):
        # 创建一个添加计划的文本框和按钮
        self.add_plan_entry = tk.Entry(self)
        self.add_plan_entry.pack(side="left")
        self.add_plan_entry.bind("", lambda event: self.add_plan())
        self.add_plan_button = tk.Button(self, text="添加", command=self.add_plan)
        self.add_plan_button.pack(side="left")

        # 创建一个计划列表框架
        self.plan_list_frame = tk.Frame(self)
        self.plan_list_frame.pack(side="top")

        # 创建一个空的计划列表和变量列表
        self.plans = []
        self.plan_vars = []

    def add_plan(self):
        # 从文本框获取新计划,并在计划列表中添加一个新框架及其对应的变量、标签和编辑/删除按钮
        new_plan = self.add_plan_entry.get()
        if new_plan:
            self.plans.append(new_plan)
            self.plan_vars.append(tk.BooleanVar(value=False))
            self.create_plan_list()
        self.add_plan_entry.delete(0, "end")

    def delete_plan(self, plan, frame):
        # 从计划列表、变量列表和界面中删除指定的计划及其框架、标签和编辑/删除按钮
        index = self.plans.index(plan)
        del self.plans[index]
        del self.plan_vars[index]
        frame.destroy()
        # 更新其他计划标签的序号
        self.create_plan_list()

    def edit_plan(self, plan):
        # 打开一个对话框,允许用户编辑指定的计划名称
        index = self.plans.index(plan)
        old_plan = self.plans[index]
        new_plan = simpledialog.askstring("编辑计划", f"修改计划 \"{old_plan}\" 为:", parent=self.master)
        if new_plan and new_plan != old_plan:
            self.plans[index] = new_plan
            self.plan_vars[index].set(False)
            self.create_plan_list()

    def create_plan_list(self):
        # 摧毁原有的计划列表框架
        for child in self.plan_list_frame.winfo_children():
            child.destroy()
        # 根据当前计划列表创建一个新的计划列表框架
        for i, plan in enumerate(self.plans):
            plan_frame = tk.Frame(self.plan_list_frame)
            plan_frame.pack(side="top", fill="x")
            plan_checkbox = tk.Checkbutton(
                plan_frame, variable=self.plan_vars[i])
            plan_checkbox.pack(side="left")
            plan_label = tk.Label(plan_frame, text=f"{i + 1}. {plan}")
            plan_label.pack(side="left", padx=5)
            edit_button = tk.Button(
                plan_frame, text="编辑", command=lambda p=plan: self.edit_plan(p))
            edit_button.pack(side="left")
            delete_button = tk.Button(
                plan_frame, text="删除", command=lambda p=plan, f=plan_frame: self.delete_plan(p, f)
            )
            delete_button.pack(side="right")

    def save_plans(self):
        # 打开一个对话框,允许用户选择保存计划列表的文件路径和文件名
        filename = filedialog.asksaveasfilename(
            initialdir=os.path.expanduser("~/Desktop"),
            title="保存计划列表",
            defaultextension=".txt",
            filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")],
        )
        if filename:
            # 如果用户选择了文件路径和文件名,则将计划列表保存到该文件中
            try:
                with open(filename, "w") as f:
                    f.write("\n".join(self.plans))
            except Exception as e:
                tk.messagebox.showerror("保存失败", str(e))
            else:
                tk.messagebox.showinfo("保存成功", f"计划列表已保存到 {filename}")

    def load_plans(self):
        # 打开一个对话框,允许用户选择读取计划列表的文件路径和文件名
        filename = filedialog.askopenfilename(
            initialdir=os.path.expanduser("~/Desktop"),
            title="读取计划列表",
            defaultextension=".txt",
            filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")],
        )
        if filename:
            # 如果用户选择了文件路径和文件名,则从该文件中读取计划列表
            try:
                with open(filename, "r") as f:
                    plans = f.readlines()
                    # 删除末尾的换行符并更新计划列表
                    self.plans = [plan.喵() for plan in plans]
                    # 更新变量列表
                    self.plan_vars = [tk.BooleanVar(
                        value=False) for _ in self.plans]
                    # 创建新的计划列表框架
                    self.create_plan_list()
            except Exception as e:
                tk.messagebox.showerror("读取失败", str(e))
            else:
                tk.messagebox.showinfo(
                    "读取成功", f"从 {filename} 中读取了 {len(self.plans)} 个计划")


root = tk.Tk()
app = PlanList(master=root)
app.mainloop()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页