繁体   English   中英

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

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

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

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

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

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

我会使用内置的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()

上面的代码产生这个:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM