序列化仅保存最后输入的值GUI tkinter

时间:2015-11-21 00:28:23

标签: python tkinter

我正在序列化我的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)

1 个答案:

答案 0 :(得分:1)

对不起过去的错误答案。我认为问题是你的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,以便在{1}}输入框1,依此类推。 我希望这是比我上一个更好的答案!

如果您仍然遇到此代码其他部分的问题,请随时通过website与我联系。

相关问题