import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.title("🎨 加强版画图板")
root.geometry("700x580")
root.resizable(False, False)
root.configure(bg="#ECEFF1")

# 全局画笔设置
pen_color = "#000000"
pen_size = 4
is_erase = False

# 画布
cv = tk.Canvas(root, bg="white", width=700, height=480, highlightthickness=1)
cv.pack()

last_x = 0
last_y = 0

# 鼠标按下
def mouse_down(event):
    global last_x, last_y
    last_x = event.x
    last_y = event.y

# 鼠标拖动绘画
def mouse_drag(event):
    global last_x, last_y
    x, y = event.x, event.y
    draw_color = "white" if is_erase else pen_color
    # 圆角线条，更顺滑
    cv.create_line(last_x, last_y, x, y,
                   fill=draw_color, width=pen_size,
                   capstyle=tk.ROUND, smooth=True)
    last_x, last_y = x, y

# 选颜色
def choose_color(c):
    global pen_color, is_erase
    is_erase = False
    pen_color = c

# 画笔粗细滑块
def size_change(val):
    global pen_size
    pen_size = int(val)

# 橡皮擦模式
def set_eraser():
    global is_erase
    is_erase = True

# 清空画布
def clear_canvas():
    cv.delete("all")

# 保存画布为图片
def save_pic():
    try:
        from PIL import Image, ImageGrab
        x = root.winfo_rootx() + cv.winfo_x()
        y = root.winfo_rooty() + cv.winfo_y()
        x1 = x + cv.winfo_width()
        y1 = y + cv.winfo_height()
        im = ImageGrab.grab((x, y, x1, y1))
        path = filedialog.asksaveasfilename(
            defaultextension=".png",
            filetypes=[("PNG图片","*.png"),("所有文件","*.*")]
        )
        if path:
            im.save(path)
    except:
        tk.messagebox.showwarning("提示", "请先安装PIL：pip install pillow")

# 绑定鼠标事件
cv.bind("<Button-1>", mouse_down)
cv.bind("<B1-Motion>", mouse_drag)

# 底部工具栏
tool_frame = tk.Frame(root, bg="#CFD8DC")
tool_frame.pack(fill=tk.X, padx=5, pady=5)

# 常用颜色块
colors = ["#000000","#FF0000","#0000FF","#00AA00","#FF9900","#9900FF","#FF0099"]
idx = 0
for c in colors:
    tk.Button(tool_frame, bg=c, width=3, height=2,
              command=lambda col=c:choose_color(col)).grid(row=0,column=idx,padx=2,pady=3)
    idx += 1

# 画笔粗细滑块
tk.Label(tool_frame, text="粗细", bg="#CFD8DC").grid(row=0,column=idx,padx=5)
scale = tk.Scale(tool_frame, from_=1, to=30, orient=tk.HORIZONTAL,
                 command=size_change, length=120, bg="#CFD8DC")
scale.set(4)
scale.grid(row=0,column=idx+1)

# 功能按钮
tk.Button(tool_frame, text="橡皮擦", command=set_eraser, width=6).grid(row=0,column=idx+3,padx=4)
tk.Button(tool_frame, text="清空", command=clear_canvas, width=6, bg="#ff5555", fg="white").grid(row=0,column=idx+4,padx=4)
tk.Button(tool_frame, text="保存图片", command=save_pic, width=8, bg="#2196F3", fg="white").grid(row=0,column=idx+5,padx=4)

root.mainloop()