如何将捕获的输入从 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

获取 Tkinter Entry 小部件的内容

如何使用 tkinter 按钮在 python 中写入文件?

从 Tkinter Text 小部件中获取所有内容 [重复]

如何使用 tkinter 创建多行条目?

如何将变量连接到 Entry 小部件?