首页 文章

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

提问于
浏览
0

感谢您的时间 . 我减少了这个问题的结构,使其尽可能简单地解决 . 我正在使用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( )

这段代码正是我想要做的, except that the text is printed in the shell terminal instead of a separate json file. 要在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'文件中打印输入到条目小部件中的文本 . 虽然我能够从终端shell中的条目小部件打印文本(参见第一个示例),但我找不到打开json文件并在该文件中打印文本的函数 . 谢谢!

这与任何其他问题不同,因为此问题具体询问如何将捕获的文本导出到json文件 . 以前的问题特别涉及捕获文本 .

2 回答

  • 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

    这段代码有效!使用open(“文件名”,“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( )
    

相关问题