如何将腌制的数据保存到tkinter Entry框并从中重新加载它们?

时间:2019-02-13 17:44:14

标签: python tkinter save pickle

我正在寻找一种方法来保存在Tkinter GUI上键入到package.json框中的数据,然后在程序打开后立即将其重新加载到Entry框中已被关闭。我进行了一些研究,发现Entry模块是执行此类操作的最佳方法。到目前为止,这是我的代码:

Pickle

基本上,我的代码只是在单击 save 按钮后将数据保存到from tkinter import* import pickle root = Tk() root.geometry("200x100") cooltext = StringVar() entry1 = Entry(root, textvariable=cooltext) entry1.pack() def save(): text = cooltext.get() pickle.dump(text, open("savedtext.dat", "wb")) btn = Button(root, text="save", command=save).pack() root.mainloop() 文件中。我将如何加载相同的数据,因此,如果我键入“ test”并关闭程序,然后打开它,它仍会显示“ test”?

这可能是加载数据的代码,但是我不知道如何在此处合并它:

.dat

2 个答案:

答案 0 :(得分:2)

首先,您提供的代码存在语法错误。

text = pickle.load(open("savedtext.dat", "rb"))而非

text = pickle.load(open("savedtext.dat"), "rb"))

如果您想在Entry小部件中插入文本,则可以使用entry1.insert("end", text)。它将在Entry小部件中所写内容的末尾将字符串插入text中。您可以打开该文件(如果存在),然后在创建Entry小部件后检查是否有要插入的东西,然后插入。

编辑:正如@martineau所说,我们应该避免在交互后打开文件而不关闭文件。您可以使用下面的代码来读取文件内容,然后将其插入小部件中。

with open("savedtext.dat", "rb") as file:
        text = pickle.load(file)

答案 1 :(得分:1)

可以使用pickle来完成此操作,

from tkinter import *
import pickle


root = Tk()
root.geometry("200x100")

cooltext = StringVar()

entry1 = Entry(root, textvariable=cooltext)
entry1.pack()


def save():
    text = cooltext.get()
    with open("savedtext.dat", "wb") as pickle_file:
        pickle.dump(text, pickle_file, pickle.HIGHEST_PROTOCOL)

def clear():
    cooltext.set('')

def load():
    with open("savedtext.dat", "rb") as pickle_file:
        text = pickle.load(pickle_file)
    cooltext.set(text)


Button(root, text="Save", command=save).pack()
Button(root, text="Clear", command=clear).pack()
Button(root, text="Load", command=load).pack()

root.mainloop()

我添加了 Clear Load Button以及类似命名的函数,以使事情更易于使用(和测试)。

注意:由于您的代码中包含诸如btn = Button(root, text="save", command=save).pack()之类的语句,将导致btn被赋值为None,因为pack()不返回任何东西。这不会造成任何伤害,但这仅仅是因为btn再也没有被引用过,但是通常,您将需要像单独处理一样在单独的语句中调用pack()(或grid())。 Entry小部件entry1