存储的Tkinter Canvas项目已清除并被召回

时间:2018-02-14 13:49:13

标签: python tkinter tkinter-canvas

我是初学者在使用tkinter画布的python 3.6中乱搞并且已经构建了一个使用elipses和随机方法随机生成太阳系的函数。

我希望能够保存这些项目及其所有属性,如标签和绑定,以便我可以清除画布并绘制一个新的随机系统。如果需要,我想回到第一个生成的系统。

我不想将画布保存为图像,因为我将项目绑定到函数。关于如何实现这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

据我所知,你只得到物品" id"作为该项目的句柄,虽然您可以删除具有给定ID的项目,但您无法仅使用该ID重新创建它。

可以做的是将所有这些元素作为常用标记,并使用tag_lowertag_raise来隐藏和显示"下方和上方的项目。背景"窗格。对象仍在画布上,但无法看到,也不会对例如鼠标事件。

import tkinter, random
root = tkinter.Tk()
canvas = tkinter.Canvas(root)
canvas.pack()

space = canvas.create_rectangle(0, 0, 200, 200, fill="#000000")
for _ in range(10):
    x, y = random.randint(0, 200), random.randint(0, 200)
    s = canvas.create_oval(x, y, x+10, y+10, fill="#ffff00", tags="star")
    canvas.tag_bind(s, "<Button>", lambda e: print("twinkle"))

root.after(3000, lambda: canvas.tag_lower("star", space))
root.after(6000, lambda: canvas.tag_raise("star", space))
root.mainloop()

更新:根据OP in comments的建议,您也可以设置项目&#39;状态为hidden,可能是更清晰的选项,不需要一些模糊的( - )背景项。

root.after(3000, lambda: canvas.itemconfig("star", state="hidden"))
root.after(6000, lambda: canvas.itemconfig("star", state="normal"))