import tkinter as tk
from tkinter import ttk, filedialog
from PIL import Image, ImageDraw

class DrawBoard:
    def __init__(self, root):
        self.root = root
        self.root.title("简易画图板")
        self.root.geometry("900x650")

        # 画笔基础参数
        self.pen_color = "black"
        self.pen_size = 3
        self.is_drawing = False
        self.last_x = 0
        self.last_y = 0

        # 内存画布（用于保存图片）
        self.img = Image.new("RGB", (800, 550), "white")
        self.img_draw = ImageDraw.Draw(self.img)

        # 顶部工具栏
        tool_frame = tk.Frame(root, height=60, bg="#f0f0f0")
        tool_frame.pack(fill=tk.X, padx=5, pady=5)

        # 颜色选择按钮
        colors = ["black", "red", "green", "blue", "orange", "purple"]
        for c in colors:
            btn = tk.Button(tool_frame, bg=c, width=3, height=2, command=lambda col=c: self.set_color(col))
            btn.pack(side=tk.LEFT, padx=3)

        # 画笔粗细滑块
        ttk.Label(tool_frame, text="画笔粗细:").pack(side=tk.LEFT, padx=(10, 2))
        self.size_slider = ttk.Scale(tool_frame, from_=1, to=30, orient=tk.HORIZONTAL,
                                     command=self.change_size, length=120)
        self.size_slider.set(3)
        self.size_slider.pack(side=tk.LEFT, padx=5)

        # 功能按钮
        tk.Button(tool_frame, text="橡皮擦", command=self.use_eraser, bg="#cccccc").pack(side=tk.LEFT, padx=8)
        tk.Button(tool_frame, text="清空画布", command=self.clear_canvas, bg="#ff6666", fg="white").pack(side=tk.LEFT, padx=5)
        tk.Button(tool_frame, text="保存图片", command=self.save_image, bg="#66bb66", fg="white").pack(side=tk.LEFT, padx=5)

        # 绘图画布区域
        self.canvas = tk.Canvas(root, bg="white", width=800, height=550, relief=tk.SUNKEN, bd=2)
        self.canvas.pack(pady=5)

        # 绑定鼠标事件
        self.canvas.bind("<ButtonPress-1>", self.start_draw)
        self.canvas.bind("<B1-Motion>", self.draw_line)
        self.canvas.bind("<ButtonRelease-1>", self.stop_draw)

    # 设置画笔颜色
    def set_color(self, color):
        self.pen_color = color

    # 修改画笔粗细
    def change_size(self, val):
        self.pen_size = int(float(val))

    # 橡皮擦（白色画笔）
    def use_eraser(self):
        self.pen_color = "white"

    # 鼠标按下，开始绘制
    def start_draw(self, event):
        self.is_drawing = True
        self.last_x = event.x
        self.last_y = event.y

    # 鼠标拖动绘制线条
    def draw_line(self, event):
        if self.is_drawing:
            x1, y1 = self.last_x, self.last_y
            x2, y2 = event.x, event.y
            # 屏幕画布绘制
            self.canvas.create_line(x1, y1, x2, y2, fill=self.pen_color, width=self.pen_size, capstyle=tk.ROUND)
            # 内存图像同步绘制（用于保存）
            self.img_draw.line([x1, y1, x2, y2], fill=self.pen_color, width=self.pen_size)
            self.last_x, self.last_y = x2, y2

    # 松开鼠标结束绘制
    def stop_draw(self, event):
        self.is_drawing = False

    # 清空画布
    def clear_canvas(self):
        self.canvas.delete(tk.ALL)
        self.img = Image.new("RGB", (800, 550), "white")
        self.img_draw = ImageDraw.Draw(self.img)

    # 保存画布为png图片
    def save_image(self):
        path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG图片", "*.png"), ("所有文件", "*.*")])
        if path:
            self.img.save(path)

if __name__ == "__main__":
    root = tk.Tk()
    app = DrawBoard(root)
    root.mainloop()