You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5读取JSON文件QTextEdit仅展示最后一条记录问题排查

解决QTextEdit仅显示最后一条JSON记录的问题

我猜你大概率是在循环里用了setText()方法更新QTextEdit内容——这个方法会完全覆盖控件里已有的文本,所以循环结束后自然只剩最后一条记录;而控制台的print()是每次追加输出,所以能正常显示所有内容。

咱们来修改你的代码,两种方案任选其一:

方案1:循环中追加文本(推荐)

直接用append()方法(自动添加换行),或者insertPlainText()自定义分隔符:

import json
import os
from PyQt5.QtWidgets import QTextEdit

def displayReport(self, item):
    searchRes = os.path.join(os.getcwd(), "search_result")
    path = os.listdir(searchRes)
    
    # 先清空文本框(如果需要的话)
    self.textEdit.clear()
    
    try:
        for file in path:
            file_path = os.path.join(searchRes, file)
            with open(file_path, 'r', encoding='utf-8') as f:
                json_data = json.load(f)
                # 控制台正常打印
                print(json_data)
                
                # 用append追加,自动换行,格式化JSON更易读
                self.textEdit.append(json.dumps(json_data, indent=4, ensure_ascii=False))
                # 或者用insertPlainText自定义分隔,比如加空行分隔不同文件内容
                # self.textEdit.insertPlainText(json.dumps(json_data, indent=4, ensure_ascii=False) + '\n\n')
    except Exception as e:
        print(f"读取文件出错:{e}")

方案2:先拼接所有内容再一次性设置

如果需要更灵活的内容排版,可以先把所有JSON内容拼接成一个字符串,最后再设置到QTextEdit里:

import json
import os
from PyQt5.QtWidgets import QTextEdit

def displayReport(self, item):
    searchRes = os.path.join(os.getcwd(), "search_result")
    path = os.listdir(searchRes)
    all_content = []
    
    try:
        for file in path:
            file_path = os.path.join(searchRes, file)
            with open(file_path, 'r', encoding='utf-8') as f:
                json_data = json.load(f)
                print(json_data)
                # 把每个文件的JSON格式化后加入列表
                all_content.append(json.dumps(json_data, indent=4, ensure_ascii=False))
        
        # 用换行+分隔线拼接所有内容,再设置到文本框
        self.textEdit.setText('\n---\n'.join(all_content))
    except Exception as e:
        print(f"读取文件出错:{e}")

额外优化点

用json.dumps(json_data, indent=4, ensure_ascii=False)可以把JSON内容格式化输出,比直接转字符串更易读,还能正常显示中文。

内容的提问来源于stack exchange,提问作者Propy Propy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:19:29