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

Tkinter中create_rectangle绘制网格的性能优化问题

解决Canvas网格循环绘制的性能问题

直接修改已有矩形颜色(推荐方案)

完全可以不用每次创建新矩形,Tkinter的Canvas提供了itemconfig方法,能直接修改已创建图形对象的属性,包括颜色,这是性能最优的方案。

具体步骤:

  • 初始化网格时,把每个矩形的ID(create_rectangle的返回值)存在一个二维列表里
  • 后续更新时,直接通过ID调用itemconfig修改fill(填充色)或outline(边框色)

示例代码:

import tkinter as tk
import random

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

# 初始化网格并存储每个矩形ID
grid_size = 10
rect_size = 40
rect_ids = []
for i in range(grid_size):
    row = []
    for j in range(grid_size):
        x1, y1 = j * rect_size, i * rect_size
        x2, y2 = x1 + rect_size, y1 + rect_size
        rect_id = canvas.create_rectangle(x1, y1, x2, y2, fill="white")
        row.append(rect_id)
    rect_ids.append(row)

# 模拟循环更新颜色
def update_grid():
    # 随机选一个矩形切换颜色
    i, j = random.randint(0, grid_size-1), random.randint(0, grid_size-1)
    current_color = canvas.itemcget(rect_ids[i][j], "fill")
    new_color = "red" if current_color == "white" else "white"
    canvas.itemconfig(rect_ids[i][j], fill=new_color)
    root.after(100, update_grid)

update_grid()
root.mainloop()

若必须重绘:先删除旧矩形再创建新的

如果因为业务逻辑必须重新创建矩形,那一定要先清理旧的对象——你猜的没错,大量未被清理的矩形对象堆积就是性能下降的核心原因。

清理方式有两种:

  • 用canvas.delete("all")删除画布上所有对象(适合整个画布只有网格的场景)
  • 给每个矩形添加统一标签,比如创建时加tags="grid_rect",之后用canvas.delete("grid_rect")只删除网格矩形,不影响其他画布元素

示例代码:

import tkinter as tk
import random

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

grid_size = 10
rect_size = 40

def redraw_grid():
    # 先删除旧网格
    canvas.delete("grid_rect")
    # 重新绘制带标签的网格
    for i in range(grid_size):
        for j in range(grid_size):
            x1, y1 = j * rect_size, i * rect_size
            x2, y2 = x1 + rect_size, y1 + rect_size
            fill_color = random.choice(["white", "red", "blue", "green"])
            canvas.create_rectangle(x1, y1, x2, y2, fill=fill_color, tags="grid_rect")
    root.after(100, redraw_grid)

redraw_grid()
root.mainloop()

性能说明

  • 修改已有对象的方式内存占用稳定,性能最优,是首选方案
  • 删除重绘的方式比不清理直接创建好很多,但性能略低于直接修改,适合必须重绘的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:30:51