Python tkinter删除元组标记

时间:2015-11-01 22:08:31

标签: python canvas tkinter

在tkinter窗口中,我有一个具有网格的设置,每当您点击网格上的方块时,方块都会改变颜色。如果再次单击相同的方块,颜色会再次变回。

然而,为了做到这一点,我只是在同一个正方形上使用相同的2种颜色进行绘画,在经过足够的点击后创建了数千张图像。

为了识别每个网格方块,我使用网格方块的左上角坐标。我尝试使用tkinter标记,将两个坐标(x,y)的元组传递给create_rectangle函数,然后调用canvas.delete(coords)。但是,这似乎根本不起作用。好像在使用

canvas.create_rectangle(whatever, tags=coords)

无论我使用什么数据类型制作coords,或者我用它们做什么,tkinter似乎都会为他们做一些奇怪的事情让我无法用任何变体删除它们

canvas.delete(coords)

有人有解决方法吗?我一直在搜索最小的tkinter文档。 我想要的只是删除网格上的彩色方块,而不是再次绘制它。

以下是一些代码,用于说明尝试使用相同的原理删除正方形:

from tkinter import *
master = Tk()
canvas_width = 850
canvas_height = 650

tCanvas = Canvas(master,
        width=canvas_width,
        height=canvas_height)

coordinates = (562, 130)
tkinterObject = tCanvas.create_rectangle(0, 0, 100, 100, fill='black', tags=(coordinates))
tCanvas.delete(coordinates)

tCanvas.pack()
mainloop()

在上面的示例中,广场不会被删除。

1 个答案:

答案 0 :(得分:0)

tags属性应该有一个标签元组。您尝试创建的标记应该是x和y坐标的元组。因此,你需要给它一个元组元组。

请注意在以下示例中使用tags属性中的逗号,这可以保证括号中的数据被视为元组。这不是一个tkinter的事情,它只是元组如何在python中工作。

tag = (x,y)
canvas.create_rectangle(..., tags=(tag,))

话虽如此,您可以使用标记current获取所点击的商品的商品ID:

the_item = canvas.find_withtag("current")