如何将捕获的输入从 tkinter 条目小部件写入 json 文件
Posted
技术标签:
【中文标题】如何将捕获的输入从 tkinter 条目小部件写入 json 文件【英文标题】:How to write captured input from a tkinter entry widget to a json file 【发布时间】:2018-08-21 13:34:38 【问题描述】:感谢您的宝贵时间。我简化了这个问题的结构,使其尽可能简单地解决。我正在与 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( )
这段代码正是我想做的,除了文本打印在 shell 终端而不是单独的 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 文件。之前的问题专门针对捕获文本。
【问题讨论】:
看起来你可能对print
的作用感到困惑。方法print
只会打印到控制台。这就是它的用途。它永远不会在其他任何地方写入数据。当您在执行f.write()
时,这是专门写入文本文件的。对于json
文件,您需要使用json.dump
,并且您需要使用与json 兼容的数据结构。
【参考方案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"
【讨论】:
是的,那好多了!谢谢!!【参考方案2】:此代码有效!使用 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( )
【讨论】:
这不会创建有效的 json 数据。 这里您只是将原始文本写入文件。这不是 json 格式。以上是关于如何将捕获的输入从 tkinter 条目小部件写入 json 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 tkinter 按钮在 python 中写入文件?