0

Tkinterにループがあります:

def main():
    #Global Variables
    windows = []
    buttons = []
    labels = []
    messageboxes = []
    global theme
    theme = 0
    listboxes = []
    global register
    register = []
    global path
    path = ""
    # Lotsa' Code
    Tkinter.mainloop()

if __name__ == "__main__":
    main()

def save_f():
    global register
    outFile = open('FobbySave.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()
global register     
#At Quit
atexit.register(save_f)

atexitは失敗します。しかし、レジスターを印刷しようとしても問題はありません。save_fはTkinterループに入れると機能しましたが、atexitは機能しませんでした。それで、誰かが私が間違っていることを教えてもらえますか?

PS

初めてatexitを書くのを忘れてすみません。しかし、それは私のコードにあります。

編集:元のコードはここにあります

import pickle
import atexit
def save_f():
    global register
    outFile = open('Something.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()
atexit.register(save_f)
4

3 に答える 3

3

問題は、のatexit.register(save_f)代わりに必要だったことがわかりましたatexit.register(save_f())

あなたは関数呼び出しをすることになっていない!

于 2013-03-11T17:59:43.490 に答える
1

あなたの基本的なスクリプトは、私が何かimport atexitに設定されていれば、私のために機能しregisterます。例えば:

import pickle
import atexit

def save_f():
    outFile = open('Something.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()

register = 1
atexit.register(save_f)

global(これも必要ではないことに注意してください)。atexit.pyこのような場合は、現在のディレクトリまたは他の場所に名前が付けられた別のファイルがないことを確認する必要がありますPYTHONPATH...

于 2013-03-10T18:15:10.570 に答える
1

あなたのコードを見て、代わりにこれを試すことをお勧めします:

def main():
    # ... everything in main ...
    Tkinter.mainloop()

def save_f():
    outFile = open('FobbySave.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()

#At Quit
atexit.register(save_f)

if __name__ == "__main__":
    main()

問題は、mainメソッドを実行したatexit 後にを初期化することであった可能性があります。したがって、コードが強制終了された後(そして実行を停止した後)、atexitメソッドを追加しようとします。

于 2013-03-10T18:16:09.537 に答える