2016-08-04 1 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]] "

であり、ラベル[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リストの2番目のリストの最初の要素にアクセスします。

change_size()機能にも同様の問題があります。

+0

ありがとうございました。 – Montague27

+0

@ Montague27:私の最後のアップデートに気づいたのかどうかは分かりませんが、 'change_size()'にも同様の問題があります。 – mhawke

+0

はい、私はそれを知っていました。 :D – Montague27

関連する問題