2016-08-04 2 views
0

вот часть моего кода из недавней игры я пытаюсь сделатьPython Рассол не может обновить в Tkinter

Я запутался о данных, загруженных из [рассол] не может применяться к метке в [ Tkinter]

это работает, когда я буду сохранения и загрузки данных

from tkinter import * 
import pickle 

Prvs_controll = [3,3,3,3,3] 
Prvs_size = [1,1,1,1,1] 
GameData= [Prvs_controll, Prvs_size] 

class MainGame(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent   
     self.initUI() 

    def initUI(self): 
     global canvas 
     self.parent.title('PythonEuropaGame') 
     self.pack(fill=BOTH, expand=1) 
     tkframe = Frame(self) 
     canvas = Canvas(self) 
     canvas.pack(fill = BOTH, expand = 1) 
     canvas.update() 

def save(): 
    global GameData 
    with open('Save_01.pickle', 'wb') as handle: 
     pickle.dump(GameData, handle) 
     print(GameData) 
def load(): 
    global canvas 
    global GameData 
    with open('Save_01.pickle', 'rb') as handle: 
     GameData = pickle.load(handle) 
     Label_size_b.configure(text = Prvs_size[0]) 
     print(GameData) 

def change_controll(): 
    global GameData 
    GameData[0] = [9,9,9,9,9] 

def change_size(): 
    global GameData 
    GameData[1][0] += 150 
    Label_size_b.configure(text = Prvs_size[0]) 

root = Tk() 
ex = MainGame(root) 
root.geometry('900x650') 

Label_size_a = Label(root, text = 'Size') 
Label_size_b = Label(root, text = '---') 
Label_size_a.place(x = 700, y = 195) 
Label_size_b.place(x = 750, y = 195) 


Button_save = Button(root, text = 'Save', command = save) 
Button_load = Button(root, text = 'Load', command = load) 
Button_size_add = Button(root, text = 'Upgrade', command = change_size) 
Button_save.place(x = 700, y = 500) 
Button_load.place(x = 750, y = 500) 
Button_size_add.place(x = 800, y = 225) 

Сначала я назвал change_size() и сохранить(),

напечатанное «[3, 3, 3 , 3, 3], [151, 1, 1, 1, 1]] "

и ярлык [Label_size_b] показал изменение размера (оно напечатано «151») и оно сохраняется.

Однако, когда я перезапускаю модуль и вызываю load(), он все еще печатает данные выше «[3, 3, 3, 3, 3], [151, 1, 1, 1, 1]]».

Но главная проблема в том, этикетка [Label_size_b] печатается как «1», но не «151» , что означает, что я что-то изменилось, и загрузить его, но этикетка все еще напечатать исходные данные! (См сверху на коде)

Я думаю, что это может быть «глобальная» проблема, но я не могу найти способ ее исправить.

ответ

2

Проблема эта строка в функции load():

Label_size_b.configure(text = Prvs_size[0]) 

Здесь Prvs_size относится к глобальной переменной, которая инициализируется [1,1,1,1,1] при запуске сценария, и никогда не обновляется. Вам нужно получить доступ к значениям, загруженным из файла рассола в GameData так:

Label_size_b.configure(text = GameData[1][0]) 

Это обращается к первому элементу второго списка в GameData списке, как загруженные из маринованных данных.

Аналогичная проблема существует в функции change_size().

+0

Спасибо, решено – Montague27

+0

@ Montague27: не уверен, что вы заметили мое последнее обновление, но в 'change_size()' есть аналогичная проблема. – mhawke

+0

Да, я знал это. : D – Montague27