繁体   English   中英

保存Tkinter画布对象

[英]Saving Tkinter Canvas object

如何保存Canvas对象,以便以后进行修改(删除工程图,添加工程图等)?

我尝试了泡菜,但给了我一个错误: pickle.PicklingError: Can't pickle 'tkapp' object: <tkapp object at 0x024A7678>

canvas = Canvas()

canvas.create_oval(10, 10, 80, 80, outline="red", fill="green", width=10)

file_name = "test_file"

with open(file_name, 'wb') as file_object:
    pickle.dump(canvas, file_object)

也许有一个更直接的解决方案,但是我通常通过保存指示绘图的对象,并在每次会话时将它们传递给新的画布来解决。 无论如何,这通常都适合设计良好的基础架构-它将图像与数据分开。

例如,无论如何,您可能仍要分别跟踪椭圆,如下所示:

class Oval:

    def __init__( self, x , y ):
        self.x = x 
        self.y = y

   def draw_to_canvas(self,canvas):
       canvas.create_oval( ..., ... )

newoval = Oval(0,0)
pickle.dump(newoval,myfile)

我不确定您需要多久腌制一次真正的tkinter画布-制作其中的新画布很容易。 您需要的是画布上对象的保存版本,您可以通过腌制为跟踪数据而创建的自定义类来获得该版本。 在我看来,Tkinter通常不够坚固,无法充当数据结构和画布,也不能兼具两者的作用。

当然,如果要制作绘图引擎,则腌制椭圆形列表或分层的树状容器可能更有效。 都是针对特定用途的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM