Пишем конвертер YAML в JSON c графическим интерфейсом на Python

Пишем конвертер YAML в JSON c графическим интерфейсом на Python

Пишем конвертер YAML в JSON c графическим интерфейсом на Python

В данной статье мы создадим приложение с графическим интерфейсом на PySide6,
которое будет преобразовывать текст в формате YAML в JSON формат.

YAML — это распространенный формат хранения данных, подобный JSON.
Этот формат, например, является одним из 3-ех базовых форматов хранения конфигурации в PHP фреймворке Symfony.

Вот простой пример формата YAML:



# комментарии

app_base_config:

    # строка

    base_name: YAML Test App

    config_dir: ./config

    # число

    max_connections: 10

    # список

    example_list:

        - one

        - two

        - three



Для разработки приложения создадим виртуальное окружение с помощью модуля Python venv в папке app и
затем активируем его:

# это вариант для операционных систем на базе Linux, для Windows команды будут немного отличаться

$ python3 -m venv ./app

$ source bin/activate



В результате выполнения приведенных выше команд мы войдем в виртуальное окружение, где уже
сможем ставить все необходимы нам библиотеки в рамках только данного проекта. Это удобно так,
мы не «загрязняем» основную систему.

Теперь установим необходимые Python библиотеки:



pip install pyside6 pyyaml



А теперь напишем сам код приложения (файл yaml2json_gui.py):



#!/usr/bin/python



# импортируем необходимые пакеты

import sys

import yaml

import json



from PySide6 import QtCore

from PySide6.QtCore import Qt

from PySide6.QtGui import QCursor

from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QTextEdit



# главное окно приложения

class MainWidget(QWidget):



    def __init__(self):

        super(MainWidget, self).__init__()

        self.createBaseUI()





    """

    В данном методе создается весь графический интерфейс приложения 

    """

    def createBaseUI(self):



        # два больших текстовых поля

        self.sourceTextEdit = QTextEdit()

        self.destanationTextEdit = QTextEdit()



        # расположим по горизонтали рядом друг с другом

        self.editBox = QHBoxLayout()

        self.editBox.addWidget(self.sourceTextEdit)

        self.editBox.addWidget(self.destanationTextEdit)



        # создадим необходимые кнопки, добавим им стили и обработчики нажатия

        self.convertButton = QPushButton("Конвертировать")

        self.convertButton.setStyleSheet("padding: 3px 5px")

        self.convertButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.convertButton.clicked.connect(self.onConvertButtonClicked)



        self.cancelButton = QPushButton("Очистить")

        self.cancelButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.cancelButton.clicked.connect(self.onClearButtonClicked)



        # кнопки расположим рядом друг с другом 

        self.hbox = QHBoxLayout()

        # в правой стороне

        self.hbox.addStretch(1)

        self.hbox.addWidget(self.convertButton)

        self.hbox.addWidget(self.cancelButton)



        # размещаем все виджеты по вертикали - один над другим

        # при этом они сами займут необходимое им место окна приложения

        self.vbox = QVBoxLayout()

        self.vbox.addLayout(self.editBox)

        self.vbox.addLayout(self.hbox)



        # устанавливаем непосредственно макет приложения

        self.setLayout(self.vbox)    



        # определяем положение и размеры, а также заголовок окна  

        self.setGeometry(300, 300, 800, 550)

        self.setWindowTitle('Yaml2Json Конвертер')    

        self.show()



    # метод, который расположит окно приложения по центру экрана

    def center(self):

        qrect = self.frameGeometry()

        qpoint = self.screen().availableGeometry().center()



        qrect.moveCenter(qpoint)

        self.move(qrect.topLeft())





    # обработчик, срабатывающий при конвертировании YAML в JSON

    @QtCore.Slot()

    def onConvertButtonClicked(self):

        convertedText = yaml2json(self.sourceTextEdit.toPlainText())

        self.destanationTextEdit.setText(convertedText)





    # обработчик кнопки очистки полей ввода

    @QtCore.Slot()

    def onClearButtonClicked(self):

        self.sourceTextEdit.setText("")

        self.destanationTextEdit.setText("")





# преобразуем yaml в json, расставляя отступы 

def yaml2json(yamltext):

    yamlobj = yaml.load(yamltext, Loader=yaml.FullLoader)

    return json.dumps(yamlobj, indent=4, sort_keys=False)





# точка входа в приложения

def main():



    app = QApplication(sys.argv)

    mainWidget = MainWidget()

    mainWidget.center()

    sys.exit(app.exec())





if __name__ == '__main__':

    main()



Запускаем приложения:



$ python ./yaml2json_gui.py



Таким образом, в данной статье мы сделали конвертер yaml в json с графическим интерфейсом на PySide6.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий