PyQt5实现JSON保存GUI工具

Vibe Coding 使用 AI 回答

代码问题:

使用python qt创建一个GUI,实现保存json文件功能

代码解决方案:

使用 Python 和 PyQt 创建 JSON 文件保存 GUI

下面是一个完整的示例,展示如何使用 PyQt5 创建一个简单的 GUI 应用程序,用于保存数据到 JSON 文件。

完整代码

import sys
import json
from PyQt5.QtWidgets import (
    QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
    QLabel, QLineEdit, QTextEdit, QPushButton, QFileDialog, QMessageBox
)


class JsonEditorApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("JSON 文件编辑器")
        self.setGeometry(100, 100, 600, 400)
        
        # 主部件和布局
        self.main_widget = QWidget()
        self.setCentralWidget(self.main_widget)
        self.layout = QVBoxLayout(self.main_widget)
        
        # 创建 UI 元素
        self.create_ui()
        
    def create_ui(self):
        # 文件名输入
        file_layout = QHBoxLayout()
        file_layout.addWidget(QLabel("文件名:"))
        self.filename_edit = QLineEdit()
        self.filename_edit.setPlaceholderText("输入文件名或使用浏览按钮")
        file_layout.addWidget(self.filename_edit)
        
        browse_btn = QPushButton("浏览...")
        browse_btn.clicked.connect(self.browse_file)
        file_layout.addWidget(browse_btn)
        self.layout.addLayout(file_layout)
        
        # JSON 数据编辑区域
        self.layout.addWidget(QLabel("JSON 数据:"))
        self.json_edit = QTextEdit()
        self.json_edit.setPlaceholderText('输入 JSON 数据,例如:\n{"name": "John", "age": 30, "city": "New York"}')
        self.layout.addWidget(self.json_edit)
        
        # 按钮区域
        btn_layout = QHBoxLayout()
        save_btn = QPushButton("保存")
        save_btn.clicked.connect(self.save_json)
        btn_layout.addWidget(save_btn)
        
        clear_btn = QPushButton("清空")
        clear_btn.clicked.connect(self.clear_fields)
        btn_layout.addWidget(clear_btn)
        
        self.layout.addLayout(btn_layout)
    
    def browse_file(self):
        """打开文件对话框选择保存位置"""
        filename, _ = QFileDialog.getSaveFileName(
            self, "保存 JSON 文件", "", "JSON 文件 (*.json);;所有文件 (*)"
        )
        if filename:
            if not filename.endswith('.json'):
                filename += '.json'
            self.filename_edit.setText(filename)
    
    def save_json(self):
        """将数据保存为 JSON 文件"""
        filename = self.filename_edit.text().strip()
        json_text = self.json_edit.toPlainText().strip()
        
        if not filename:
            QMessageBox.warning(self, "警告", "请指定文件名!")
            return
        
        if not json_text:
            QMessageBox.warning(self, "警告", "JSON 数据不能为空!")
            return
        
        try:
            # 验证 JSON 格式
            json_data = json.loads(json_text)
            
            # 保存文件
            with open(filename, 'w', encoding='utf-8') as f:
                json.dump(json_data, f, indent=4, ensure_ascii=False)
            
            QMessageBox.information(self, "成功", f"文件已保存到: {filename}")
        except json.JSONDecodeError as e:
            QMessageBox.critical(self, "错误", f"无效的 JSON 格式:\n{str(e)}")
        except Exception as e:
            QMessageBox.critical(self, "错误", f"保存文件时出错:\n{str(e)}")
    
    def clear_fields(self):
        """清空输入字段"""
        self.filename_edit.clear()
        self.json_edit.clear()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = JsonEditorApp()
    window.show()
    sys.exit(app.exec_())

功能说明

  1. 文件选择

    • 可以直接输入文件名
    • 也可以通过"浏览"按钮选择保存位置
    • 自动为文件名添加.json扩展名
  2. JSON编辑

    • 提供文本编辑区域输入JSON数据
    • 支持格式化输入(缩进等)
  3. 验证功能

    • 检查文件名是否为空
    • 检查JSON数据是否为空
    • 验证JSON格式是否正确
  4. 保存功能

    • 将有效JSON数据保存到指定文件
    • 使用4个空格缩进格式化输出
    • 支持非ASCII字符(ensure_ascii=False)
  5. 用户反馈

    • 操作成功/失败的消息提示
    • 详细的错误信息

使用方法

  1. 确保已安装PyQt5:pip install PyQt5
  2. 运行上述代码
  3. 输入文件名或使用浏览按钮选择保存位置
  4. 在文本框中输入有效的JSON数据
  5. 点击"保存"按钮

扩展建议

如果需要进一步增强这个应用程序,可以考虑:

  1. 添加文件打开功能,编辑现有JSON文件
  2. 实现JSON数据的树形视图展示
  3. 添加JSON格式化和验证的专门按钮
  4. 支持拖放文件到窗口直接打开
  5. 添加最近打开文件的历史记录