在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()
在上面的示例中,广场不会被删除。
答案 0 :(得分:0)
tags
属性应该有一个标签元组。您尝试创建的标记应该是x和y坐标的元组。因此,你需要给它一个元组元组。
请注意在以下示例中使用tags属性中的逗号,这可以保证括号中的数据被视为元组。这不是一个tkinter的事情,它只是元组如何在python中工作。
tag = (x,y)
canvas.create_rectangle(..., tags=(tag,))
话虽如此,您可以使用标记current
获取所点击的商品的商品ID:
the_item = canvas.find_withtag("current")