You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python创建支持Canvas绘图、选色及画布清空的GUI程序

基于Python Tkinter的Canvas绘图程序(支持选色与清空)

下面是一个使用Tkinter实现的轻量级绘图程序,满足Canvas绘图、颜色选择和清空画布的需求:

完整代码

import tkinter as tk
from tkinter import colorchooser

class DrawingApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Canvas绘图工具")
        
        # 初始化绘图参数
        self.current_color = "black"
        self.last_x = None
        self.last_y = None
        
        # 创建Canvas组件
        self.canvas = tk.Canvas(root, width=800, height=600, bg="white")
        self.canvas.pack(pady=10)
        
        # 绑定鼠标事件
        self.canvas.bind("<Button-1>", self.start_draw)
        self.canvas.bind("<B1-Motion>", self.draw)
        
        # 创建功能按钮框架
        button_frame = tk.Frame(root)
        button_frame.pack(pady=5)
        
        # 颜色选择按钮
        color_btn = tk.Button(button_frame, text="选择颜色", command=self.choose_color)
        color_btn.grid(row=0, column=0, padx=5)
        
        # 清空画布按钮
        clear_btn = tk.Button(button_frame, text="清空画布", command=self.clear_canvas)
        clear_btn.grid(row=0, column=1, padx=5)
    
    def start_draw(self, event):
        # 记录鼠标按下的起点坐标
        self.last_x = event.x
        self.last_y = event.y
    
    def draw(self, event):
        # 绘制连续线条
        if self.last_x and self.last_y:
            self.canvas.create_line(
                self.last_x, self.last_y,
                event.x, event.y,
                fill=self.current_color,
                width=2,
                capstyle=tk.ROUND,
                smooth=tk.TRUE
            )
            # 更新最后坐标
            self.last_x = event.x
            self.last_y = event.y
    
    def choose_color(self):
        # 调用系统颜色选择器
        color = colorchooser.askcolor(title="选择绘图颜色")[1]
        if color:
            self.current_color = color
    
    def clear_canvas(self):
        # 清空Canvas所有内容
        self.canvas.delete("all")

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

功能说明

  • 绘图功能:按住鼠标左键在Canvas上拖动即可绘制线条,线条末端采用圆角处理,绘制过程平滑
  • 颜色选择:点击「选择颜色」按钮,打开系统自带的颜色选择器,选中颜色后即可用该颜色绘图
  • 清空画布:点击「清空画布」按钮,Canvas上的所有绘图内容会被一次性清除

实现细节

  • 使用Tkinter的Canvas组件作为绘图区域,通过绑定<Button-1>(鼠标左键按下)和<B1-Motion>(鼠标左键拖动)事件实现连续绘图
  • 借助colorchooser模块调用系统原生颜色选择器,简化颜色选择逻辑
  • 通过canvas.delete("all")实现清空画布的功能,该方法会删除Canvas中所有可见元素

内容的提问来源于stack exchange,提问作者Nisrin Dhoondia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:46:08