繁体   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