【问题标题】:Python tkinter delete tuple tagPython tkinter 删除元组标签
【发布时间】:2015-11-02 11:29:31
【问题描述】:

在 tkinter 窗口上,我有一个带有网格的设置,每当您单击网格上的一个正方形时,该正方形就会改变颜色。如果再次点击同一个方块,颜色会变回来。

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

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

canvas.create_rectangle(whatever, tags=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()

在上面的例子中,正方形没有被删除。

【问题讨论】:

标签: python canvas tkinter


【解决方案1】:

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

注意在下面的例子中,tags 属性中使用了逗号,这保证了括号中的数据被视为一个元组。这不是 tkinter 的事情,它只是元组在 python 中的工作方式。

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

话虽如此,您可以使用标签current获取被点击的商品的商品id:

the_item = canvas.find_withtag("current")

【讨论】:

  • 谢谢!在 tags=coordinates 的末尾添加一个逗号,成功了!请注意:我在正方形后面有一个网格和背景,所以 current 也会删除网格和背景。
猜你喜欢
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 2022-01-05
  • 2015-06-30
  • 2012-08-04
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多