PyQt6实战1

创建一个json处理的小工具

功能:

1.json格式化

2.jsonpath提取数据

3.保存文件

main.py

from PyQt6.QtGui import QFocusEvent
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
import sys
import json
import time
import os
from parse_json_from_file import JsonUtil
        


class JSONParser(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        

    def initUI(self):
        self.showMaximized()
        # 创建一个水平布局
        hlayout = QHBoxLayout(self)

        inVlayout = QVBoxLayout()
        inHlayout = QHBoxLayout()
        jsonLabel = QLabel("jsonPath:")
        self.jsonPath = QComboBox()
        self.jsonPath.addItem("$.res.data[0]")
        self.jsonPath.setEditable(True)
        self.jsonPath.setCurrentText("")
        self.jsonPath.setPlaceholderText("请输入jsonPath")
        inHlayout.setAlignment(Qt.AlignmentFlag.AlignLeft)
        inHlayout.addWidget(jsonLabel)
        inHlayout.addWidget(self.jsonPath)
        inHlayout.setStretchFactor(jsonLabel, 1)
        inHlayout.setStretchFactor(self.jsonPath, 9)
        self.input = QTextEdit()
        self.input.setFocus()
        inVlayout.addLayout(inHlayout)
        inVlayout.addWidget(self.input)

        outVlayout = QVBoxLayout()
        outHlayout = QHBoxLayout()
        dirChoose = QPushButton("选择保存路径:")
        
        dirChoose.clicked.connect(self.chooseDir)
        outHlayout.addWidget(dirChoose)
        self.dirPath = QLabel()
        outHlayout.addWidget(self.dirPath)
        
        outHlayout.setAlignment(Qt.AlignmentFlag.AlignLeft)
        self.output = QTextEdit()
        outVlayout.addLayout(outHlayout)
        outVlayout.addWidget(self.output)

        midVlayout = QVBoxLayout(self)
        filterBtn = QPushButton("filter")
        filterBtn.setToolTip("提取jsonpath")
        filterBtn.clicked.connect(self.filt)
        midVlayout.addWidget(filterBtn)
        formatBtn = QPushButton("format")
        formatBtn.setToolTip("格式化json")
        formatBtn.clicked.connect(self.formatJSON)
        midVlayout.addWidget(formatBtn)
        self.saveBtn = QPushButton("save")
        self.saveBtn.setToolTip("按照上面的路径保存文件")
        self.saveBtn.clicked.connect(self.saveFile)
        midVlayout.addWidget(self.saveBtn)
        midVlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)

        hlayout.addLayout(inVlayout)
        hlayout.addLayout(midVlayout)
        hlayout.addLayout(outVlayout)

        self.setLayout(hlayout)
        self.setWindowTitle('JSON格式化工具')
        self.setWindowIcon(QIcon('tools.png'))


    def chooseDir(self):
        dir = QFileDialog.getExistingDirectory(self, "选择文件夹")
        self.dirPath.setText(dir)
    
    def formatJSON(self):
        inputText = self.input.toPlainText()
        if(inputText):
            try:
                jsonText = self._format(inputText)
                self.output.setText(jsonText)
            except:
                self.output.setText("json 格式有问题")

    def saveFile(self):
        dirPath = self.dirPath.text()
        if(not dirPath):
            QMessageBox.warning(self, "提示", "请先选择文件夹", QMessageBox.StandardButton.Yes)
            return
        filename = time.strftime("%Y%m%d%H%M%S", time.localtime())
        file_path = os.path.join(dirPath, filename)
        if(file_path):
            with open(file_path, "w", encoding="utf-8") as f:
                f.write(self.output.toPlainText())
    
    def loadFile(self):
        fileName, _ = QFileDialog.getOpenFileName(self, "打开文件", "", "JSON Files (*.json)")
        if(fileName):
            with open(fileName, "r", encoding="utf-8") as f:
                self.input.setText(f.read())
        

    def filt(self):
        json = self.input.toPlainText()
        path = self.jsonPath.currentText()
        format_json = JsonUtil.jsonPathStr(json, path)
        self.output.setText(format_json)

    def _format(self, inputText):
        return json.dumps(json.loads(inputText), indent=4, ensure_ascii=False)
        


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = JSONParser()
    demo.show()
    sys.exit(app.exec())


 工具类

import json
from jsonpath import jsonpath


class JsonUtil:


    @staticmethod
    def jsonPathStr(json_str, json_path):
        jsonObj = jsonpath(json.loads(json_str), json_path)
        return json.dumps(jsonObj, indent=4, ensure_ascii=False)

运行main.py即可

运行效果:

format

filter

github:GitHub - chunlaiqingke/Tiny-Tool 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】原油阳谋论

文章目录 石油的属性能源属性各国石油替代 金融属性黄金石油美元 油价历史油价传导路径 石油供需格局与发展供需格局各国状况美国俄罗斯沙特 产油国困境运输 分析格局分析供需平衡分析价差分析价差概念基本面的跨区模型跨区模型下的价差逻辑 长中短三期分析长期视角——供应看投…

2024年腾讯云99元1年服务器_新老同享_续费99元一年

良心腾讯云推出99元一年服务器,新用户和老用户均可以购买,续费不涨价,续费也是99元,配置为轻量2核2G4M、50GB SSD盘、300GB月流量、4M带宽:优惠价格99元一年,续费99元,官方活动页面 txybk.com/g…

美洲狮优化算法(Puma Optimizar Algorithm ,POA)求解机器人栅格地图最短路径规划(提供MATLAB代码)

一、美洲狮优化算法 美洲狮优化算法(Puma Optimizar Algorithm ,POA)由Benyamin Abdollahzadeh等人于2024年提出,其灵感来自美洲狮的智慧和生活。在该算法中,在探索和开发的每个阶段都提出了独特而强大的机制&#xf…

【JavaSE】抽象类与接口

Object 类 类 java.lang.Object是类层次结构的根类,即所有类的父类。 除Object类之外的任何一个Java类,全部直接或间接的继承于Object类。由此,Object类也被称为根父类。Object类中声明的成员具有通用性,并且Object类中没有声明…

Linux 理解进程

目录 一、基本概念 二、描述进程-PCB 1、task_struct-PCB的一种 2、task_ struct内容分类 三、组织进程 四、查看进程 1、ps指令 2、top命令 3、/proc文件系统 4、在/proc文件中查看指定进程 5、进程的工作目录 五、通过系统调用获取进程标示符 1、getpid()/get…

消息队列 MQ

文章目录 1. MQ 相关概念1.1 什么是 MQ1.2 为什么要用 MQ1.3 MQ 分类1.4 MQ 的选择 1. MQ 相关概念 1.1 什么是 MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已&#x…

选修-单片机作业第1/2次

第一次作业 第二次作业 1、51 系列单片机片内由哪几个部分组成?各个部件的最主要功能是什么? 51系列单片机的内部主要由以下几个部分组成,每个部件的主要功能如下: 1. **中央处理器(CPU)**:这是…

uniapp隐藏状态栏并强制横屏

uniapp隐藏状态栏并强制横屏 1.manifest.json中: "screenOrientation": ["landscape-primary", //可选,字符串类型,支持横屏"landscape-secondary" //可选,字符串类型,支持反向横屏]…

算法 环形数组是否存在循环 力扣执行速度击败100%

目录 题目 leetcode 457 求解思路 代码 结果 题目 leetcode 457 存在一个不含 0 的 环形 数组 nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数: 如果 nums[i] 是正数,向前(下标递增方向&#xff0…

每日一题 — 三数之和

15. 三数之和 - 力扣(LeetCode) 思路: 双指针思想先给数组排序然后固定一个数、再设left、right指针,nums[left] nums[right] -nums[a]大于的话right--,小于的话left每次处理完left、right之后需要判断去重i也需要判…

计算机网络(五)

网络层 网络层的主要目的是实现网络互连,进而实现数据包在各网络之间的传输。 要实现网络层,主要解决三个问题: ①网络层向运输层提供怎样的服务?(“可靠传输“、”不可靠传输“) ②网络层寻址 ③路由选择…

乡村治理深度解析:策略、挑战与解决方案

毋庸置疑,在今天这个崭新的时代,乡村治理的过程已然向我们发出了挑战。为了迎难而上,我们必须摒弃陈旧观念,勇敢迎接并大胆尝试探索与实践新的思路!为了达到这一宏伟目标,我们需要首先廓清如下关键概念&…

第九个实验:一维数组和二维字符串数组的输入而输出

实验内容: 新建一维数组 新建二维字符串数组 输入内容,运行结果,在输出界面中显示输入的内容 第一步:新建项目 第二步:编程 添加一个INT数控件和字符串控件 修改控件: 复制前面板控件

Linux 之九:CentOS 上 Tomcat 安装、SpringBoot 项目打包和部署

安装 Tomcat 下载 a. 方式一:可以在windows 真机上下载后,再上传到服务器 b. 方式二:可以在服务器端使用 wget 下载命令来下载 登录官网https://tomcat.apache.org/download-90.cgi,选择 linux 版本 右键,获取下载链接…

有点炫酷有点diao的免费wordpress模板主题

这是一款经典的免费wordpress主题,被广泛应用于多个行业的网站。 https://www.wpniu.com/themes/189.html

Vue 监听器:让你的应用实时响应变化

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Python 一步一步教你用pyglet制作汉诺塔游戏

目录 汉诺塔游戏 1. 抓取颜色 2. 绘制圆盘 3. 九层汉塔 4. 绘制塔架 5. 叠加圆盘 6. 游戏框架 汉诺塔游戏 汉诺塔(Tower of Hanoi),是一个源于印度古老传说的益智玩具。这个传说讲述了大梵天创造世界的时候,他做了三根金刚…

【刷题】Leetcode 415 字符串相加 和 34 字符串相乘

刷题 Leetcode 415 字符串相加题目描述 思路一(模拟大法版!!!)Leetcode 34 字符串相乘题目描述 思路一(模拟大法版)Thanks♪(・ω・)ノ谢谢阅读!&…

Angular基础---HelloWorld---Day3

文章目录 0.ng-model 的几种不同的class属性1.ng-model 的引用与属性的调用2.表单验证: (模版引用变量、ngModel 、ngif一起使用)3.根据class属性的值ng-invalid ,设置动态变化的样式 0.ng-model 的几种不同的class属性 引用ng-model 元素的c…

2024年软件测试怎么自我提升?“我“该如何做?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、掌握基本的测试…