from tkinter import *
from tkinter import ttk

class DrawBoard:
    def __init__(self, root):
        self.root = root
        self.root.title("简易画图板")
        # 画笔默认参数
        self.color = "black"
        self.pen_size = 3
        self.eraser_mode = False

        # 记录鼠标上一次坐标
        self.last_x = None
        self.last_y = None

        # 顶部工具栏
        tool_frame = Frame(root, padx=5, pady=5)
        tool_frame.pack(fill=X)

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

        # 画笔粗细调节
        Label(tool_frame, text="粗细:").pack(side=LEFT, padx=(10, 2))
        self.size_var = IntVar(value=3)
        size_combo = ttk.Combobox(tool_frame, textvariable=self.size_var, width=5, values=[1,2,3,5,8,10,15])
        size_combo.pack(side=LEFT)
        size_combo.bind("<<ComboboxSelected>>", self.change_size)

        # 橡皮擦按钮
        eraser_btn = Button(tool_frame, text="橡皮擦", command=self.toggle_eraser)
        eraser_btn.pack(side=LEFT, padx=10)

        # 清空画布按钮
        clear_btn = Button(tool_frame, text="清空画布", command=self.clear_canvas)
        clear_btn.pack(side=LEFT, padx=5)

        # 画布区域
        self.canvas = Canvas(root, bg="white", width=800, height=500)
        self.canvas.pack(pady=5, padx=5, fill=BOTH, expand=True)

        # 绑定鼠标事件
        self.canvas.bind("<Button-1>", self.start_draw)    # 按下鼠标
        self.canvas.bind("<B1-Motion>", self.drawing)      # 拖拽绘制
        self.canvas.bind("<ButtonRelease-1>", self.stop_draw) # 松开鼠标

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

    # 修改画笔粗细
    def change_size(self, event):
        self.pen_size = self.size_var.get()

    # 切换橡皮擦
    def toggle_eraser(self):
        self.eraser_mode = not self.eraser_mode

    # 清空画布
    def clear_canvas(self):
        self.canvas.delete(ALL)

    # 鼠标按下，开始记录起点
    def start_draw(self, event):
        self.last_x = event.x
        self.last_y = event.y

    # 拖拽画线
    def drawing(self, event):
        if self.last_x and self.last_y:
            # 橡皮擦：白色粗线条覆盖
            if self.eraser_mode:
                draw_color = "white"
                width = self.pen_size * 3
            else:
                draw_color = self.color
                width = self.pen_size
            # 绘制连续线段
            self.canvas.create_line(
                self.last_x, self.last_y, event.x, event.y,
                fill=draw_color, width=width, capstyle=ROUND
            )
            self.last_x = event.x
            self.last_y = event.y

    # 松开鼠标结束绘制
    def stop_draw(self, event):
        self.last_x = None
        self.last_y = None

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