谢谢您的时间。我简化了此问题的结构,以使其尽可能简单地解决。我正在与GUI开发人员tkinter一起使用python工作。我想捕获来自tkinter中的条目小部件的文本输入,并将其打印/写入json文件中。到目前为止,我有一个示例,该示例捕获条目小部件中的文本并将其打印在shell终端中。
from tkinter import *
def show_entry_fields():
print("First Name: %s\nLast Name: %s" % (e1.get(), e2.get()))
e1.delete(0,END)
e2.delete(0,END)
master = Tk()
Label(master, text="First Name").grid(row=0)
Label(master, text="Last Name").grid(row=1)
e1 = Entry(master)
e2 = Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)
mainloop( )
此代码完全符合我的要求,除了文本在外壳程序终端中打印而不是在单独的json文件中。要在json文件中打印文本,我尝试了替代方法功能方法如:
def show_entry_fields():
f = open('name.json', 'a', encoding = 'utf8')
print("First Name: %s\nLast Name: %s" % (e1.get(), e2.get()))
e1.delete(0,END)
e2.delete(0,END)
在这里,我希望该函数将打开json文件'name.json'并以与第一个示例在shell终端中打印文本相同的方式打印该文件中的文本。这不成功。
并且:
def show_entry_fields():
f = open('name.json', 'a', encoding = 'utf8')
f.write("First Name: %s\nLast Name: %s" % (e1.get(), e2.get()))
e1.delete(0,END)
e2.delete(0,END)
在这里,我希望可以实现相同的目标,但同样没有成功。
最终,目标是将输入到条目小部件中的文本打印在“ name.json”文件中。虽然我已经能够从终端外壳中的入口小部件中打印文本(请参见第一个示例),但我仍无法找到打开json文件并在该文件中打印文本的功能。谢谢!
这与任何其他问题都不同,因为此问题专门询问如何将捕获的文本导出到json文件。先前的问题专门用于捕获文本。
答案 0 :(得分:1)
如果要编写json,第一步是创建一个可以转换为json的数据结构。然后,您可以使用json.dump
函数将数据写入文件。
示例:
import json
...
data = {
"first_name": e1.get(),
"last_name": e2.get()
}
with open('name.json', 'w') as f:
json.dump(data, f, indent=4)
执行该代码时,输入名字“ Foo”和名字“ Bar”,文件将包含以下内容:
{
"first_name": "Foo",
"last_name": "Bar"
}
答案 1 :(得分:-1)
此代码有效!使用open(“ file name”,“ a”)然后写入,将输入内容从条目标签导出到文件中!
from tkinter import *
def show_entry_fields():
f = open("name.json", "a")
f.write("First Name: %s\nLast Name: %s" % (e1.get(), e2.get()))
e1.delete(0,END)
e2.delete(0,END)
master = Tk()
Label(master, text="First Name").grid(row=0)
Label(master, text="Last Name").grid(row=1)
e1 = Entry(master)
e2 = Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
e1.config(relief=SUNKEN)
e2.config(relief=SUNKEN)
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)
mainloop( )