如何保存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通常不够坚固,无法充当数据结构和画布,同时兼具两者的作用似乎也不是一个非常优雅的设计。
当然,如果要制作绘图引擎,则腌制椭圆形列表或分层的树状容器可能更有效。都是针对特定用途的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句