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 没有。那么有人可以告诉我我做错了什么吗?

附言

抱歉,第一次忘记写 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 回答