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()

基本的に、私たちは try の後に来るものを見ています。つまり、すべてのグローバルなものをユーザーが選択したファイルに保存する場所です。今、私は Tkinter ウィジェットを保存できないことを知っていますが、誤ってウィジェットを作成し、次のように同じ行にグリッド化しました:

ldrones_e = Label(frame_drones, text = "Number of drones:").grid(row = 3, column = 1, columnspan = 2)

これにより、シェルビング関数は、ウィジェットではなく None として読み取りました! そのため、何もできないと言う代わりに、なしとして保存しました。今、私がそのファイルを開くと、ウィジェット変数を取り、それを none に設定します。別の行に.gridを付けて保存することはできません。保存されないからです。別のファイルにあるため、変数を削除するために del を使用することはできません。(実際、私はおそらくそうすることができます、私はそれを行う方法について無知です)

したがって、私の質問は、厄介な ldrones_e 変数を pickle ファイルから削除して、.grid が添付されていない新しい ldrones_e 変数をプログラムが使用するようにするにはどうすればよいかということです。

4

1 に答える 1