2013-03-10 4 views
0

Оказывается, проблема была diffrent Теперь у меня есть цикл в Tkinter:Atexit не регистрации в питона

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 в первый раз. Но это в моем коде.

Edit: Orginal код здесь

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

Работает для меня ... Вы не импортировали 'atexit' в свой пример ... – mgilson

ответ

1

OK Оказывается, проблема в том, что мне нужно было atexit.register(save_f) вместо atexit.register(save_f()).

Вы не должны выполнять вызов функции!

+0

Идем дальше и принимаем этот ответ. –

1

Вы базовый скрипт работает для меня, при условии I 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 ...

+0

Это только часть кода. Регистр упоминается в другом месте. – madprogramer

+0

@madprogramer - вы говорите: «atexit не может его зарегистрировать». Что ты имеешь в виду? вызывает ли это исключение? – mgilson

+0

ничего не делает. Даже не исключение. – madprogramer

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

Возможно, проблема заключалась в том, что вы инициализировали atexitпосле запуска основного метода. Поэтому после того, как код будет убит (и перестанет выполняться), вы попытаетесь добавить метод atexit.

+0

Регистрация - это список. Это проблема ? – madprogramer

+0

@madprogramer: до тех пор, пока вы можете разберется, это нормально. Но если в списке есть что-то, что не разберется, чем это не сработает. – Wolph

+0

Теперь я могу сэкономить, набрав save_f в интерпретаторе. Но это не работает автоматически. Вот мой основной список: register = [[theme, 'theme']] – madprogramer