1

在 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 变量。

4

1 回答 1

1
于 2015-10-01T15:19:42.787 回答