序列化只保存最后输入的值

2024-04-19 19:04:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在序列化GUI以保存信息。但是问题是它只保存最后输入的值,而不是保存所有值。 所以现在的问题是,当我点击+按钮时,行会递增,但只保存输入的姓氏。我想救他们所有人

def increment(self):
    current_row=1
    MoreButton=Button(self.listFrame,text="+",command=entry_1(self))
    MoreButton.grid(column=1,row=0)
def entry_1(self):
    self.entryName=Entry(self.listFrame)
    self.entryName.grid(column=1,row=current_row,sticky="EW")
    self.entryName.get()
    nameLabel=Label(self.listFrame,text="NAME")
    nameLabel.grid(column=0,row=current_row)
    save_button=Button(self.listFrame,text="save",command=save_data(self))
    save_button.grid(column=2,row=0)
    current_row=current_row+1

def save_data(self):
    data={
        "Name":self.entryName.get(),
        }
    with open("test.json","wb") as f:
        dill.dump(data,f)

def load_data(self):
    with open("test.json","rb") as f:
        data=dill.load(f)

Tags: textselfdatasavedefcolumnbuttoncurrent
1条回答
网友
1楼 · 发布于 2024-04-19 19:04:03

对不起,过去的回答不正确。我认为问题在于entry_1函数创建了同名的输入框。这意味着当你尝试获取其中的文本时,它只获取最后一个文本。下面是我创建的完整代码,用于创建具有不同名称的条目。它在一个班级里,但我不知道你想让他们怎么出发。你知道吗

from Tkinter import *
import dill
import sys
boxes=[]
no_of_boxes=0
root=Tk()
current_row=1
current_box=0
data={}

class Main(object):
#this is used every time a new entry is created
    def save_data(self):
        global current_box
        global current_row
        global no_of_boxes
        ###this it the key. It creates the entries
        ###in a list so that we can access them
        ###without the name
        boxes.append(Entry(root))
        boxes[-1].grid(column=1, row=current_row)
        ###
        try:
            data["Name"+str(current_box)]=boxes[-2].get()
        except:
            data["Name"+str(current_box)]=boxes[-1].get()
        current_row+=1
        current_box+=1
        no_of_boxes+=1
        print no_of_boxes
        print boxes
        print data
        with open("test.json","wb") as f:
            dill.dump(data,f)
    #to save when closing
    def save_close(self):
        global current_box
        global current_row
        boxes.append(Entry(root))
        boxes[-1].grid(column=1, row=current_row)
        data["Name"+str(current_box)]=boxes[-2].get()
        with open("test.json","wb") as f:
            dill.dump(data,f)
        print no_of_boxes
        print boxes
        print data
        sys.exit()


    def load_data(self):
        with open("test.json","rb") as f:
            data=dill.load(f)

    def entry_1(self):
        global current_row
        global no_of_boxes
        nameLabel=Label(root,text="NAME")
        nameLabel.grid(column=0,row=current_row)
        self.save_data()

app=Main()
MoreButton=Button(root,text="+",command=app.entry_1)
MoreButton.grid(column=1,row=0)
CloseButton=Button(root, text="Close and save", command=app.save_close)
CloseButton.grid(column=2, row=0)

root.mainloop()

保存的数据被保存为"Name"加上current_boxdata中,这样就可以把它转到data["Name1"]输入框1,依此类推。 我希望这是一个比我上一个更好的答案!你知道吗

另外,如果你对这段代码的其他部分仍然有问题,请随时通过我的website与我联系。你知道吗

相关问题 更多 >