簡體   English   中英

Python Pickle的數據無法在Tkinter中更新

[英]Python pickle's data can't update in 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()和save(),

它打印了“ [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,1]]”上打印數據。

但是主要問題是label [Label_size_b]打印為“ 1”而不是“ 151”,這表示我更改了某些內容並加載了它,但是Label仍然打印原始數據!(請參見代碼頂部)

我想這可能是“全局”問題,但我找不到任何糾正方法。

問題是load()函數中的這一行:

Label_size_b.configure(text = Prvs_size[0])

這里Prvs_size指的是腳本啟動時初始化為[1,1,1,1,1]且從未更新的全局變量。 您需要像這樣訪問從pickle文件加載到GameData的值:

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

這將訪問從腌制數據中加載的GameData列表中第二個列表的第一個元素。

change_size()函數中存在類似的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM