我是初学者在使用tkinter画布的python 3.6中乱搞并且已经构建了一个使用elipses和随机方法随机生成太阳系的函数。
我希望能够保存这些项目及其所有属性,如标签和绑定,以便我可以清除画布并绘制一个新的随机系统。如果需要,我想回到第一个生成的系统。
我不想将画布保存为图像,因为我将项目绑定到函数。关于如何实现这一点的任何想法?
答案 0 :(得分:1)
据我所知,你只得到物品" id"作为该项目的句柄,虽然您可以删除具有给定ID的项目,但您无法仅使用该ID重新创建它。
您可以做的是将所有这些元素作为常用标记,并使用tag_lower
和tag_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"))