[英]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.