我正在寻找一种方法来保存在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
答案 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
。