【问题标题】:How to reconstruct objects from a dump file - Python 3如何从转储文件重建对象 - Python 3
【发布时间】:2023-04-03 00:08:02
【问题描述】:

我使用 tkinter 在 python 3 中创建了一个绘图应用程序。作为应用程序的一部分,我将保存包含形状(椭圆、线条、文本……)的小部件。并重新加载它们。我使用的是pickle模块,保存没有问题,但是当我重新加载它时,它只返回一个包含从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

【问题讨论】:

  • self.stack 在你腌制之前是什么样子的?
  • 这只是一个我添加所有对象的列表。实际上它适用于撤消功能。我可以基于此删除形状。那么它应该是一种再次创建它们的方法

标签:
list
python-3.x
tkinter
pickle