2015-11-05 2 views
0

В настоящее время я пытаюсь обновить мою программу в словаре Pickle, как только пользователь нажмет кнопку. Всякий раз, когда я пытаюсь обновить эту строку, ничего не происходит. Что я делаю не так?Словарь рассола не обновляется - Python 3.4

Save/Load/Defaults:

BACKGROUNDCOLOR = ('#000000') 
FOREGROUNDCOLOR = ('#FFFFFF') 
default = ('default') 
setupcomplete = ('False') 


data = { 
    'background_color' : BACKGROUNDCOLOR, 
    'foreground_color' : FOREGROUNDCOLOR, 
    'complete_setup' : setupcomplete, 
    'user_name' : default 
} 

def load(): 
    print('load') 

    with open("./Minetick_Data/datasave", "rb") as f: 
     data = pickle.load(f) 

def save(): 
    print('save') 

    with open("./Minetick_Data/datasave", "wb") as f: 
     pickle.dump(data, f) 

def update(): 
    setupcomplete = 'True' 
    save() 

Это где я пытаюсь обновить данные [ 'complete_setup']/setupcomplete:

class ProgramSetup(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 

     ProgramSetup.configure(self, background = BACKGROUNDCOLOR) 


     titleLabel = tk.Label(self, text = "Program Setup", font = TITLE_FONT, background = BACKGROUNDCOLOR, foreground = FOREGROUNDCOLOR) 
     finishButton = tk.Button(self, text = "Finish", command = lambda: combine_funcs(update, controller.show_frame(StartPage))) 

     titleLabel.pack(padx = 10, pady = 10) 
     finishButton.pack(padx = 10) 

Всякий раз, когда я запускаю программу, хотя, он начинает с по умолчанию (False вместо True)

+0

Возможно, потому, что вы используете '' False'' вместо 'False'. Первая строка, вторая - логическое значение. То же самое с «Истиной». – Kamejoin

+0

Я не запускаю ваш код, но я думаю, что проблема заключается в том, что вы делаете 'data = pickle.load (f)', этот шаг полностью меняет значение первого словаря данных. Я даже не вижу правильного использования словаря данных в вашем выписке. – Kamejoin

+0

Нажимаете кнопку «Готово»? – saulspatz

ответ

0

Я бы прокомментировал, но мне не хватает репутации.

Anywho, один вопрос, я думаю, что я вижу с этим:

finishButton = tk.Button(self, text = "Finish", command = lambda: combine_funcs(update, controller.show_frame(StartPage))) 

У тебя finishButton запустить команду под названием combine_funcs (который я не вижу функции, перечисленные для нее), которая запускает функцию update (который затем звонит save, кстати), а затем отправляется на StartPage. Насколько я знаю, кнопки Tkinter не может принимать несколько аргументов изначально, так что вы должны двигаться действия finishButton «s к функции, которая могла бы выглядеть следующим образом:

def combine_funcs(): 
    setupcomplete = 'True' 
    print('save') 
    with open("./Minetick_Data/datasave", "wb") as f: 
     pickle.dump(data, f) 
    controller.show_frame(StartPage) 

Это сочетает в update и save функции, а затем возвращает его на StartPage. Надеюсь, я помог некоторым.

+0

comb_funcs() можно найти на моей ссылке PasteBin: http://pastebin.com/q44Kz3TN. Я использовал эту функцию раньше, и она отлично работает. Я знаю, что программа проходит через оба обновления, а затем показывает следующий кадр. У меня проблемы со словарями, больше ничего. – orias

Смежные вопросы