如何将捕获的输入从tkinter条目小部件写入json文件

时间:2018-08-21 13:34:38

标签: python json tkinter

谢谢您的时间。我简化了此问题的结构,以使其尽可能简单地解决。我正在与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文件。先前的问题专门用于捕获文本。

2 个答案:

答案 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( )