如何删除Tkinter画布中已创建的形状?

14 投票
2 回答
76160 浏览
提问于 2025-04-18 06:43

考虑一下:

from Tkinter import *


a = Tk()

canvas = Canvas(a, width = 500, height = 500)
canvas.pack()

canvas.create_rectangle(0, 0, 100, 100)

我们怎么才能删除这个已经创建的矩形呢?

这是我正在制作的一个游戏的相关问题。这个游戏很简单,当球碰到方块时,方块应该消失。但是如果我这样做:

class Block:
    def __init__(self,canvas,color):
        self.canvas = canvas
        self.id = canvas.create_rectangle(10, 10, 110, 20, fill=color )
        self.id1 = canvas.create_rectangle(115, 10, 215, 20, fill=color)
        self.id2 = canvas.create_rectangle(220, 10, 320, 20, fill=color)
        self.id3 = canvas.create_rectangle(325, 10, 425, 20, fill=color)
        self.id4 = canvas.create_rectangle(430, 10, 530, 20, fill=color)
        self.id5 = canvas.create_rectangle(100, 150, 200, 160, fill=color)
        self.id6 = canvas.create_rectangle(350, 150, 450, 160, fill=color)
        self.x = 0

然后:

    def hit_block(self,pos):
        block_pos = self.canvas.coords(self.block.id)
        List = [block_pos]
        for i in List:
            if pos[0] >= i[0] and pos[2] <= i[2]:
                if pos[1] >= i[1] and pos[1] <= i[3]:
                    canvas.delete(block.id)
                    self.score()
                    global a
                    a += 1
                    return True
        return False

这样并不奏效。我该怎么做才能在球碰到方块时把方块删除呢?

2 个回答

3

在我看来,更好的选择是给函数 create_rectangle() 添加一个选项 tags=,这样你就可以避免创建新的变量了。

from Tkinter import *
a = Tk()
canvas = Canvas(a, width = 500, height = 500)
canvas.pack()

canvas.create_rectangle(0,0,100,100, tags="square")
canvas.delete("square") #Deletes the rectangle wchich have tags option named "square"

myrect = canvas.create_rectangle(0,0,100,100)

顺便说一下,当你从 myrect 中“删除”一个对象,然后再用同一个变量“创建”它时,这会是个问题。

27

create_rectangle() 这个函数的结果赋值给一个变量,然后在这个变量上调用 canvas.delete() 方法:

from Tkinter import *


a = Tk()

canvas = Canvas(a, width = 500, height = 500)
canvas.pack()

myrect = canvas.create_rectangle(0,0,100,100)
canvas.delete(myrect) #Deletes the rectangle

删除之前的窗口:

删除之前的图片

删除之后的窗口:

删除之后的图片

撰写回答