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

【作品介绍】
由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