使用python qt创建一个GUI,实现保存json文件功能
下面是一个完整的示例,展示如何使用 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_())
文件选择:
JSON编辑:
验证功能:
保存功能:
用户反馈:
pip install PyQt5如果需要进一步增强这个应用程序,可以考虑: