在 Python 方面,我并不十分熟练,但我真的让自己陷入了困境。除了双关语,我正在使用 Tkinter,并且我有一个特殊的功能,可以让我轻松保存所有全局变量:
def start_save(globals_=None) :
global quick_save_file, options
if globals_ is None:
globals_ = globals()
the_file = tkFileDialog.asksaveasfilename(**file_opt)
my_shelf = shelve.open(the_file,'c') # 'n' for new
for key, value in globals_.items():
if not key.startswith('__'):
try:
my_shelf[key] = globals()[key]
add_line( "Saved %r" % key)
except TypeError:
# __builtins__, my_shelf, and imported modules can not be shelved.
add_line(('ERROR shelving: {0}'.format(key)))
except :
add_line( "Cannot pickle %r" % key)
quick_save_file = the_file
options['initialfile'] = quick_save_file
my_shelf.close()
基本上,我们正在查看尝试后会发生什么:它将我所有的全局内容保存到用户选择的文件中。现在,我知道 Tkinter 小部件无法保存,但我不小心创建了一个小部件,并将其网格化在同一行,如下所示:
ldrones_e = Label(frame_drones, text = "Number of drones:").grid(row = 3, column = 1, columnspan = 2)
这导致我的搁置功能将其读取为 None 而不是小部件!因此,它没有说它不能用它做任何事情,而是将它保存为 None。现在,当我打开所述文件时,它会获取我的小部件变量并将其设置为无。我无法保存它,将 .grid 放在单独的一行上,因为那样它就不会被保存。我不能使用 del 来摆脱变量,因为它在不同的文件中。(实际上,我可能可以,我只是不知道如何做到这一点)
所以我的问题是如何从我的 pickle 文件中删除那个讨厌的 ldrones_e 变量,以便我的程序将使用没有附加 .grid 的新 ldrones_e 变量。