如何在 tkinter.Text 小部件中格式化 JSON 数据的显示?

How to format the display of JSON data in a tkinter.Text widget?

我创建了一个 Python GUI,允许用户创建和保存文本文件(技术上是日记)。在工作区 (VS Code) 中,我创建了一个包含简单 key/value 对的 JSON 文件(技术上是字典); "word": "definition".

我希望用户能够单击一个按钮打开一个 window 和一个 tk.Text 小部件,其中包含 JSON 数据在一个清晰、可读和按字母顺序排列的列表中形式,但数据打印为由单引号分隔的多行字符串,文本小部件内没有任何空格或换行符。

我想要的结果是 "read-only" 列表 key/value 对,每行一个,没有所有 JSON 语法(双引号、逗号和大括号)。 我找不到任何解决方案来实现此特定偏好,而且我仍在学习 Python 程序中 JSON 数据的功能。如果有更合适或可配置的方法,我愿意接受建议,但我希望有一个简单的配置 Python 语法来指示数据如何在文本小部件中打印。

感谢您提供的任何见解。我认为该代码与解决此问题无关,但如果需要,我可以添加它。

我会使用内置的 json 模块,并使用加载的 json 文件的 dump 方法,或 dumps 中的字符串这个例子:

import json
print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))

导致

{
    "4": 5,
    "6": 7
}

https://docs.python.org/3/library/json.html

因此,您可以通过 json.dumps 传递它,然后将结果添加到您的文本小部件:

,而不是直接打印它
import tkinter as tk
import json

app = tk.Tk()

text = tk.Text(app)

text.pack()

json_val = json.loads('{"a": 5, "b": 7}')

for k in json_val:
    text.insert(tk.END, '{} = {}\n'.format(k,json_val[k]))
text.config(state = tk.DISABLED)
app.mainloop()

上面的代码产生这个: