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