List 如何从转储文件重建对象-Python 3

List 如何从转储文件重建对象-Python 3,list,python-3.x,tkinter,pickle,List,Python 3.x,Tkinter,Pickle,我使用tkinter在Python3中创建了一个绘画应用程序。作为应用程序的一部分,我将保存包含形状(椭圆形、线条、文本等)的小部件。我正在使用pickle模块,save没有问题,但是当我重新加载它时,它只会返回一个包含从1到N的整数的列表。就是这样。没有物体,没有形状。如何重建我的对象? 下面是我的两个保存和加载功能: def save_project(self): output_file = filedialog.asksaveasfilename(filetypes=[('Text

我使用tkinter在Python3中创建了一个绘画应用程序。作为应用程序的一部分,我将保存包含形状(椭圆形、线条、文本等)的小部件。我正在使用pickle模块,save没有问题,但是当我重新加载它时,它只会返回一个包含从1到N的整数的列表。就是这样。没有物体,没有形状。如何重建我的对象? 下面是我的两个保存和加载功能:

def save_project(self):
    output_file = filedialog.asksaveasfilename(filetypes=[('Text', '*.txt')], title='save project as')
    try:
       with open(output_file, 'wb') as output:
        pickle.dump(self.stack, output)
        output.close()
    except FileNotFoundError:
     self.log("Cancelled save or error in filename")

def load_project(self):
     load_file = filedialog.askopenfilename(filetypes=[('Text','*.txt')], title='Load Project')
     if not load_file: return
     pickled_file_object = open(load_file, "rb")
     pickled_file_object.seek(0)
     try:
        self.all_patterns = pickle.load(pickled_file_object)
     except EOFError:
      self.log("Error: End of file")
     pickled_file_object.close()

     try:
      # The problem is here:
      print(self.all_patterns)
      pprint.pprint(self.all_patterns)
     except:
      self.log("Error: Project can not be loaded")
打印输出为: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23]

保存的文本文件为:

8003 5d71 0028 4b01 4b02 4b03 4b04 4b05 4b06 4b07 4b08 4b09 4b0a 4b0b 4b0c 4b0d 4b0e 4b0f 4b10 4b11 4b12 4b14 4b15 4b16
4b17 652e

画布中没有用于保存和加载画布对象的工具。您必须编写代码来迭代这些项,获取它们的坐标和其他属性,并将它们保存为稍后可以解析的格式。然后,您必须编写代码来读取这些数据并重建所有画布对象。

在对其进行pickle之前,
self.stack
是什么样子的?这只是一个列表,我将所有对象添加到其中。实际上,它适用于撤销功能。我可以基于此删除形状。因此,这应该是一种重新创建它们的方法,感谢答案。我的代码已经有400行了,如果我想这样做的话,我想这将是一个巨大的混乱。你还有别的解决办法吗?比如,如果我将画布更改为其他内容,您可以创建一个自定义画布小部件,该小部件具有一个方法,根据您保存的数据,将其绘制到画布。如果行数真的很重要,请使用不同的文件,然后导入它。