关于Trae插件
一、自动化编码优势
Trae - 插件 Trae 插件的 Builder 模式是一大亮点。它能够自动化完成编码任务,例如可以轻松生成像贪吃蛇游戏、To - Do list 应用这类项目。对于开发者来说,从项目的构建到代码实现,这个过程往往繁琐且耗时,Builder 模式却能大幅简化,让开发者从繁琐的基础搭建中解脱出来,将更多精力投入到功能优化和业务逻辑完善上 ,极大提升开发效率。
自动化编码功能真的强大,快速生成代码,只有你想不到的,没有他做不到的
选中特定的代码实现单元评测
还能根据我们选中的函数进行注释的编写,快速方便,还能一键Apply
对于不懂的代码还能选中代码进行代码解析和分析当前函数的功能
二、智能代码辅助功能
在 Chat 模式下,Trae 提供了丰富且实用的代码相关功能。比如能生成代码,像生成冒泡排序算法,这对于新手理解算法实现,或是老手快速获取代码模板都非常有帮助。同时,解释代码功能(如/explain
指令),可以快速解析选中函数功能,方便开发者阅读和理解复杂代码。注释代码(/doc
指令)和生成单测(/test
指令)功能,也都是开发流程中提高代码质量和可维护性的得力助手,减少了手动操作的工作量。
三、选用原因
作为开发者,时间和效率是非常宝贵的资源。Trae 插件的自动化构建和智能代码辅助功能,恰好能满足高效开发的需求。在日常开发中,无论是新项目的搭建,还是对已有代码的完善,Trae 都能提供有力支持。其便捷的快捷键交互(如 Ctrl + U),也让操作更加流畅,无缝融入 VS Code 开发环境,这也是我选择使用它的重要原因。
Trae插件安装和使用步骤
我们先打开vscode里面的拓展,输入trae进行我们插件搜索,点击安装
按照好了之后,我们就可以在左侧打开我们的trae的插件了
切换至 Builder 模式:点击顶部 Tab,从 Chat 模式切换至 Builder 模式,开始协作。这里一定要将版本更新到最新才能进行Builder功能的使用操作
使用trae进行实战操作打造高颜值桌面便签工具
选择 Trae 插件开发高颜值桌面便签工具,源于它强大的功能能极大提升开发效率与质量。Trae 的 Builder 模式可自动化搭建项目框架,省去大量基础开发时间;Chat 模式下,生成代码、解释代码等功能,能快速实现便签的各种交互与美化逻辑,让开发更顺畅。
而当下桌面便签工具普遍存在不少痛点。功能单一,多数仅支持基础的文字记录,缺乏个性化设置与交互体验;颜值不足,界面设计陈旧简陋,无法满足用户对美观的追求;使用不便,操作流程繁琐,比如添加、编辑便签步骤复杂;稳定性欠佳,存在数据丢失、软件崩溃等问题,严重影响使用体验 。
我们这里准备了一个关于这个小项目的README文件的相关介绍,但是文件不是很详细,我们这里直接让Trae帮我们进行优化下
这个效果还是不错的
我们直接和ai对话让它根据我们这个README文件进行这款应用的开发操作
他的分析功能很全面,每个文件都有对应的目标
并且他还会根据新生成的功能进行README文件的更新操作
这里我们很快就完成了开发操作,我们运行下程序体验下
只经过了一轮的代码生成
这里我们直接运行代码文件 我们这里直接添加了两个待办事项
并且这里还有提醒的小页面,相当于闹钟吧
页面上还有准确的时间提示
整体的完成效果还是不错的,Trae这款插件效率还是很高效的 代码效果如下,大家可以参考下在本地试试,这个安装的依赖不是很多
import tkinter as tk
from tkinter import messagebox
import csv
import os
from datetime import datetime
class TodoApp:
def __init__(self, root):
self.root = root
self.root.title("桌面便签工具")
self.root.geometry("390x600")
self.root.configure(bg="#f0f0f0")
self.tasks_by_date = {}
self.group_states = {}
self.create_widgets()
self.load_tasks()
self.check_alarms_on_startup()
self.update_time() # 启动时间更新
def create_widgets(self):
# 标题
title_label = tk.Label(self.root, text="待办事项", font=("SimSun", 16, "bold"), bg="#f0f0f0", fg="#333333")
title_label.pack(pady=10)
# 输入框架
input_frame = tk.Frame(self.root, bg="#f0f0f0")
input_frame.pack(pady=5)
# 当前时间显示
self.time_label = tk.Label(input_frame, text="", font=("SimSun", 12), bg="#f0f0f0", fg="#333333")
self.time_label.pack(pady=(0, 5))
# 输入框
self.entry = tk.Entry(input_frame, width=40, font=("SimSun", 12), bd=2, relief="flat")
self.entry.pack(pady=(0, 5)) # 修改为垂直布局
self.entry.focus_set()
# 添加按钮
add_button = tk.Button(input_frame, text="添加", command=self.add_task,
font=("SimSun", 10), bg="#4CAF50", fg="white", bd=0, padx=10, pady=5)
add_button.pack() # 放在输入框下方
# 任务显示框架
self.task_frame = tk.Frame(self.root, bg="#ffffff", bd=1, relief="solid")
self.task_frame.pack(pady=10, padx=10, fill=tk.BOTH, expand=True)
self.canvas = tk.Canvas(self.task_frame, bg="#ffffff", highlightthickness=0)
self.scrollbar = tk.Scrollbar(self.task_frame, orient="vertical", command=self.canvas.yview)
self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.inner_frame = tk.Frame(self.canvas, bg="#ffffff")
self.canvas.create_window((0, 0), window=self.inner_frame, anchor="nw")
self.inner_frame.bind("<Configure>", lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")))
self.canvas.bind_all("<MouseWheel>", self._on_mousewheel)
def update_time(self):
"""更新当前时间显示"""
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.time_label.config(text=f"当前时间: {current_time}")
self.root.after(1000, self.update_time) # 每秒更新一次
def _on_mousewheel(self, event):
self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")
def toggle_group(self, date, button):
is_expanded = self.group_states.get(date, True)
self.group_states[date] = not is_expanded
button.config(text=f"{'▼' if not is_expanded else '▶'} {date}")
self.refresh_display()
self.save_tasks(silent=True)
def update_completion_time(self, var, time_label, task_text, add_time, date):
alarm_time_str = "无"
alarm_message = "无"
for task in self.tasks_by_date[date]:
if task[0] == task_text and task[2] == add_time:
alarm_time_str = task[4]
alarm_message = task[5]
break
if var.get():
completion_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if alarm_time_str != "无":
try:
alarm_time = datetime.strptime(alarm_time_str, "%Y-%m-%d %H:%M:%S")
completion_datetime = datetime.strptime(completion_time, "%Y-%m-%d %H:%M:%S")
if alarm_time > completion_datetime:
var.set(False)
messagebox.showinfo("提示", f"任务 '{task_text}' 的提醒时间晚于完成时间,已取消完成状态并保留提醒")
completion_time = "未完成"
time_label.config(text=f"添加时间: {add_time}\n完成时间: {completion_time}", fg="#757575")
for i, (t_text, _, a_time, _, at, am) in enumerate(self.tasks_by_date[date]):
if t_text == task_text and a_time == add_time:
self.tasks_by_date[date][i] = (task_text, False, add_time, completion_time, at, am)
self.set_alarm_timer(alarm_time, alarm_message, task_text, add_time, date)
break
self.save_tasks(silent=True)
self.refresh_display()
return
except ValueError:
pass
time_label.config(text=f"添加时间: {add_time}\n完成时间: {completion_time}", fg="#2E7D32")
for i, (t_text, _, a_time, _, at, am) in enumerate(self.tasks_by_date[date]):
if t_text == task_text and a_time == add_time:
self.tasks_by_date[date][i] = (task_text, True, add_time, completion_time, at, am)
break
else:
time_label.config(text=f"添加时间: {add_time}\n完成时间: 未完成", fg="#757575")
for i, (t_text, _, a_time, _, at, am) in enumerate(self.tasks_by_date[date]):
if t_text == task_text and a_time == add_time:
self.tasks_by_date[date][i] = (task_text, False, add_time, "未完成", at, am)
if alarm_time_str != "无":
try:
alarm_time = datetime.strptime(alarm_time_str, "%Y-%m-%d %H:%M:%S")
if alarm_time > datetime.now():
self.set_alarm_timer(alarm_time, alarm_message, task_text, add_time, date)
except ValueError:
pass
break
self.save_tasks(silent=True)
self.refresh_display()
def edit_task(self, task_text, add_time, date, label):
edit_window = tk.Toplevel(self.root)
edit_window.title("编辑任务")
edit_window.geometry("300x100")
edit_window.configure(bg="#f0f0f0")
tk.Label(edit_window, text="任务内容:", bg="#f0f0f0").pack(pady=5)
entry = tk.Entry(edit_window, width=40, font=("SimSun", 11))
entry.pack(pady=5)
entry.insert(0, task_text)
def save_edit():
new_text = entry.get().strip()
if new_text:
for i, (t_text, completed, a_time, c_time, at, am) in enumerate(self.tasks_by_date[date]):
if t_text == task_text and a_time == add_time:
self.tasks_by_date[date][i] = (new_text, completed, a_time, c_time, at, am)
break
self.refresh_display()
self.save_tasks(silent=True)
edit_window.destroy()
else:
messagebox.showwarning("警告", "任务内容不能为空!")
tk.Button(edit_window, text="保存", command=save_edit, bg="#4CAF50", fg="white", bd=0).pack(pady=5)
# 删除功能2025.4.2已修改
def delete_task(self, task_text, add_time, date):
if messagebox.askyesno("确认", "确定删除此任务吗?"):
for i, (t_text, _, a_time, _, _, _) in enumerate(self.tasks_by_date[date]):
if t_text == task_text and a_time == add_time:
del self.tasks_by_date[date][i]
break
if not self.tasks_by_date[date]:
del self.tasks_by_date[date]
del self.group_states[date]
self.refresh_display()
self.save_tasks(silent=True)
def add_task(self):
task_text = self.entry.get().strip()
if task_text:
add_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
date = add_time.split()[0]
if date not in self.tasks_by_date:
self.tasks_by_date[date] = []
self.group_states[date] = True
self.tasks_by_date[date].insert(0, (task_text, False, add_time, "未完成", "无", "无"))
self.refresh_display()
self.entry.delete(0, tk.END)
self.save_tasks(silent=True)
else:
messagebox.showwarning("警告", "请输入任务内容!")
def set_alarm(self, task_text, add_time, date):
alarm_window = tk.Toplevel(self.root)
alarm_window.title("设置提醒")
alarm_window.geometry("400x300")
alarm_window.configure(bg="#f0f0f0")
tk.Label(alarm_window, text="提醒日期 (格式: YYYYMMDD, 留空默认当天):", bg="#f0f0f0").pack(pady=5)
date_entry = tk.Entry(alarm_window, width=40, font=("SimSun", 11))
date_entry.pack(pady=5)
tk.Label(alarm_window, text="提醒时间 (格式: HHMMSS或HHMM, 无秒默认为00):", bg="#f0f0f0").pack(pady=5)
time_entry = tk.Entry(alarm_window, width=40, font=("SimSun", 11))
time_entry.pack(pady=5)
tk.Label(alarm_window, text="提醒信息:", bg="#f0f0f0").pack(pady=5)
message_entry = tk.Entry(alarm_window, width=40, font=("SimSun", 11))
message_entry.pack(pady=5)
def save_alarm():
alarm_date_str = date_entry.get().strip()
alarm_time_str = time_entry.get().strip()
alarm_message = message_entry.get().strip()
if not alarm_date_str:
alarm_date_str = datetime.now().strftime("%Y%m%d")
try:
if len(alarm_time_str) == 4:
alarm_time_str += "00"
alarm_datetime_str = f"{alarm_date_str} {alarm_time_str}"
alarm_time = datetime.strptime(alarm_datetime_str, "%Y%m%d %H%M%S")
if alarm_time < datetime.now():
messagebox.showwarning("警告", "提醒时间不能早于当前时间!")
return
for i, (t_text, completed, a_time, c_time, _, _) in enumerate(self.tasks_by_date[date]):
if t_text == task_text and a_time == add_time:
if completed and c_time != "未完成":
completion_datetime = datetime.strptime(c_time, "%Y-%m-%d %H:%M:%S")
if alarm_time > completion_datetime:
completed = False
c_time = "未完成"
messagebox.showinfo("提示", f"任务 '{task_text}' 的提醒时间晚于完成时间,已取消完成状态")
self.tasks_by_date[date][i] = (task_text, completed, add_time, c_time,
alarm_time.strftime("%Y-%m-%d %H:%M:%S"), alarm_message)
break
if not completed:
self.set_alarm_timer(alarm_time, alarm_message, task_text, add_time, date)
self.save_tasks(silent=True)
self.refresh_display()
alarm_window.destroy()
except ValueError:
messagebox.showwarning("警告", "时间格式不正确,请使用 YYYYMMDD HHMMSS 或 YYYYMMDD HHMM 格式!")
tk.Button(alarm_window, text="保存", command=save_alarm, bg="#4CAF50", fg="white", bd=0).pack(pady=5)
def set_alarm_timer(self, alarm_time, alarm_message, task_text, add_time, date):
delay = (alarm_time - datetime.now()).total_seconds() * 1000
self.root.after(int(delay), lambda: self.show_alarm(alarm_message, task_text, add_time, date))
def show_alarm(self, alarm_message, task_text, add_time, date):
for task in self.tasks_by_date[date]:
if task[0] == task_text and task[2] == add_time and not task[1]:
messagebox.showinfo("提醒", f"任务: {task_text}\n信息: {alarm_message}")
break
def check_alarms_on_startup(self):
current_time = datetime.now()
for date in self.tasks_by_date:
for i, (task_text, completed, add_time, completion_time, alarm_time_str, alarm_message) in enumerate(self.tasks_by_date[date]):
if alarm_time_str != "无":
try:
alarm_time = datetime.strptime(alarm_time_str, "%Y-%m-%d %H:%M:%S")
if completed and completion_time != "未完成":
completion_datetime = datetime.strptime(completion_time, "%Y-%m-%d %H:%M:%S")
if alarm_time > completion_datetime:
self.tasks_by_date[date][i] = (task_text, False, add_time, "未完成", alarm_time_str, alarm_message)
messagebox.showinfo("提示", f"任务 '{task_text}' 的提醒时间晚于完成时间,已取消完成状态")
if alarm_time <= current_time:
self.show_alarm(alarm_message, task_text, add_time, date)
else:
self.set_alarm_timer(alarm_time, alarm_message, task_text, add_time, date)
elif not completed:
if alarm_time <= current_time:
self.show_alarm(alarm_message, task_text, add_time, date)
else:
self.set_alarm_timer(alarm_time, alarm_message, task_text, add_time, date)
except ValueError:
continue
self.refresh_display()
self.save_tasks(silent=True)
def create_task_frame(self, task_text, completed, add_time, completion_time, date):
task_frame = tk.Frame(self.inner_frame, bg="#fafafa", bd=1, relief="solid", padx=8, pady=8)
var = tk.BooleanVar(value=completed)
checkbox = tk.Checkbutton(task_frame, variable=var, bg="#fafafa")
checkbox.pack(side=tk.LEFT, padx=(0, 5))
content_frame = tk.Frame(task_frame, bg="#fafafa")
content_frame.pack(side=tk.LEFT, fill=tk.X, expand=True)
label = tk.Label(content_frame, text=task_text, font=("SimSun", 11, "bold"),
bg="#fafafa", fg="#333333", wraplength=300, justify="left")
label.pack(anchor="w")
alarm_time = "无"
alarm_message = "无"
for t in self.tasks_by_date[date]:
if t[0] == task_text and t[2] == add_time and len(t) >= 6:
alarm_time = t[4]
alarm_message = t[5]
break
time_text = f"添加时间: {add_time}\n完成时间: {completion_time if completed else '未完成'}"
if alarm_time != "无" and not completed:
time_text += f"\n提醒时间: {alarm_time}\n提醒信息: {alarm_message}"
time_label = tk.Label(content_frame, text=time_text,
font=("SimSun", 9), bg="#fafafa",
fg="#2E7D32" if completed else "#757575",
height=4, justify="left")
time_label.pack(anchor="w", pady=2)
button_frame = tk.Frame(task_frame, bg="#fafafa")
button_frame.pack(side=tk.RIGHT, padx=5)
edit_button = tk.Button(button_frame, text="编辑", font=("SimSun", 11), bg="#2196F3", fg="white", bd=0,
command=lambda: self.edit_task(task_text, add_time, date, label))
edit_button.pack(side=tk.TOP, pady=2)
delete_button = tk.Button(button_frame, text="删除", font=("SimSun", 11), bg="#F44336", fg="white", bd=0,
command=lambda: self.delete_task(task_text, add_time, date))
delete_button.pack(side=tk.TOP, pady=2)
alarm_button = tk.Button(button_frame, text="提醒", font=("SimSun", 11), bg="#FF9800", fg="white", bd=0,
command=lambda: self.set_alarm(task_text, add_time, date))
alarm_button.pack(side=tk.TOP, pady=2)
var.trace("w", lambda *args: self.update_completion_time(var, time_label, task_text, add_time, date))
return task_frame
def refresh_display(self):
for widget in self.inner_frame.winfo_children():
widget.destroy()
for date in sorted(self.tasks_by_date.keys(), reverse=True):
group_frame = tk.Frame(self.inner_frame, bg="#e0e0e0")
task_count = len(self.tasks_by_date[date])
toggle_button = tk.Button(group_frame, text=f"{'▼' if self.group_states.get(date, True) else '▶'} {date} ({task_count} 项)",
font=("SimSun", 10, "bold"), bg="#e0e0e0", fg="#333333", bd=0,
command=lambda d=date, btn=group_frame: self.toggle_group(d, btn.winfo_children()[0]))
toggle_button.pack(side=tk.LEFT, padx=5, pady=2)
group_frame.pack(fill=tk.X, pady=5)
if self.group_states.get(date, True):
for i, (task_text, completed, add_time, completion_time, _, _) in enumerate(self.tasks_by_date[date]):
task_frame = self.create_task_frame(task_text, completed, add_time, completion_time, date)
task_frame.pack(fill=tk.X, pady=2 if i > 0 else (5, 2))
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
def load_tasks(self):
if os.path.exists('tasks.csv'):
with open('tasks.csv', 'r', encoding='utf-8', newline='') as file:
reader = csv.reader(file)
for row in reader:
if row and len(row) >= 3:
task_text = row[0]
completed = row[1] == 'True'
add_time = row[2]
completion_time = row[3] if len(row) > 3 else "未完成"
alarm_time = row[4] if len(row) > 4 else "无"
alarm_message = row[5] if len(row) > 5 else "无"
date = add_time.split()[0]
if date not in self.tasks_by_date:
self.tasks_by_date[date] = []
self.group_states[date] = True
self.tasks_by_date[date].append((task_text, completed, add_time, completion_time,
alarm_time, alarm_message))
def save_tasks(self, silent=False):
with open('tasks.csv', 'w', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
for date in sorted(self.tasks_by_date.keys(), reverse=True):
for task in self.tasks_by_date[date]:
writer.writerow(list(task) if len(task) == 6 else list(task) + ["无", "无"])
if not silent:
messagebox.showinfo("成功", "任务已保存!")
def run(self):
self.root.mainloop()
if __name__ == "__main__":
root = tk.Tk()
app = TodoApp(root)
app.run()
用 Trae 插件开发桌面便签工具,不仅让开发过程丝滑顺畅,还能打造出高颜值、超实用的作品,真的是相见恨晚,有了它,开发之路轻松又有趣
感兴趣的可以去试试呢