<MyRusakov.ru />

Программирование на C++ с Нуля до Гуру

Программирование на C++ с Нуля до Гуру

Данный курс научит Вас программировать на языке C++, который, несмотря на свой почтенный возраст, необычайно сильно востребован. Курс состоит из 6 разделов, посмотрев которые и выполнив все упражнения, Вы с нуля освоите этот язык и сможете создавать самые разные проекты любой сложности на C++.

Для закрепления материала из уроков к ним идёт множество упражнений.

Дополнительно к курсу идёт вспомогательная система, которая не даст Вам забросить начатое на полпути.

Также вместе с курсов Вы получаете Бонус "Программирование на C++ в Unreal Engine", в котором Вы научитесь создавать игры на C++ с использованием этого движка.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Пишем конвертер 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.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.