Как сохранить данные в моем коде, Pyqt5?

В приложении добавляю новые LineEdit и Pushbutton в созданный Gridlayout и необходимо чтобы при закрытии данные сохранялись и загружались для следующего сеанса. Подскажите как это реализовать
__________________________________________________________________________________________________________________________________
import sys

from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QLabel, QGridLayout, QLineEdit, QPushButton, \
    QMessageBox

from Designer.designerTest import Ui_MainWindow  # Импорт класса Ui_MainWindow из другого модуля


#################################################################################################

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()  # Создание экземпляра класса Ui_MainWindow
        self.ui.setupUi(self)  # Инициализация UI элементов

        self.layout = QVBoxLayout()
        self.ui.widget_2.setLayout(self.layout)  # Установка QVBoxLayout как layout для виджета widget_2

        self.ui.btnSaveTopic.clicked.connect(
        self.create_new_label)  # Подключение функции create_new_label при нажатии на кнопку btnSaveTopic

###########################

    def create_new_label(self):  # Создание новой метки и вызов функции new_grid
        if self.ui.lineTopic.text() != "":
            text = self.ui.lineTopic.text()
            label = QLabel(text)
            label.setStyleSheet('color: white; font: 14pt;')
            self.layout.addWidget(label)

            self.new_grid()  # Создание нового grid

            self.ui.lineTopic.clear()
        else:
            QMessageBox.warning(None, "Ошибка", "Введите тему")  # Показ предупреждающего сообщения

###########################

    def new_grid(self):  # Создание нового grid layout с элементами
        grid = QGridLayout()
        self.layout.addLayout(grid)

        line_edit = self.create_new_line_edit()
        grid.addWidget(line_edit, 0, 0)

        plus_right = QPushButton()
        plus_right.setFixedSize(20, 20)
        plus_right.setIcon(QIcon("icons/iconPlus.svg"))
        plus_right.setIconSize(QSize(14, 14))

        plus_down = QPushButton()
        plus_down.setFixedSize(20, 20)
        plus_down.setIcon(QIcon("icons/iconPlus.svg"))
        plus_down.setIconSize(QSize(14, 14))

        grid.addWidget(plus_right, 0, 1)
        grid.addWidget(plus_down, 1, 0)

        plus_right.clicked.connect(lambda: self.create_new_btn_right(grid))
        plus_down.clicked.connect(lambda: self.create_new_btn_down(grid))

        self.column_stretch(grid)  # Установка растягиваемости колонок и строк

###########################

    def create_new_btn_down(self, grid):  # Создание новой строки при нажатии на кнопку вниз
        clicked_widget = self.sender()

        # Получение позиции нажатого виджета в сетке
        for i in range(grid.count()):
            item = grid.itemAt(i)
            if item.widget() == clicked_widget:
                row, column = grid.getItemPosition(i)[:2]
                break
        else:
            return

        line_edit = self.create_new_line_edit()
        plus_right = self.create_new_button(lambda: self.create_new_btn_right(grid))
        plus_down = self.create_new_button(lambda: self.create_new_btn_down(grid))

        grid.addWidget(line_edit, row, column)
        grid.addWidget(plus_down, row + 1, column)
        grid.addWidget(plus_right, row, column + 1)

###########################

    def create_new_btn_right(self, grid):  # Создание новой колонки при нажатии на кнопку вправо
        clicked_widget = self.sender()

        # Получение позиции нажатого виджета в сетке
        for i in range(grid.count()):
            item = grid.itemAt(i)
            if item.widget() == clicked_widget:
                row, column = grid.getItemPosition(i)[:2]
                break
        else:
            return

        line_edit = self.create_new_line_edit()
        plus_right = self.create_new_button(lambda: self.create_new_btn_right(grid))

        grid.addWidget(line_edit, row, column)
        grid.addWidget(plus_right, row, column + 1)

        self.column_stretch(grid)

###########################

    @staticmethod
    def column_stretch(grid):  # Установка растягиваемой колонок и строк сетки
        grid.setColumnStretch(grid.columnCount(), 1)
        grid.setRowStretch(grid.rowCount(), 1)

    @staticmethod
   def create_new_line_edit():  # Создание нового QLineEdit
        line_edit = QLineEdit()
        line_edit.setFixedSize(30, 30)
        line_edit.setStyleSheet("background-color: white; color: black; font: 10pt;")
        line_edit.setAlignment(Qt.AlignCenter)
        return line_edit

    @staticmethod
    def create_new_button(callback):  # Создание новой кнопки
        button = QPushButton()
        button.setFixedSize(20, 20)
        button.setIcon(QIcon("icons/iconPlus.svg"))
        button.setIconSize(QSize(14, 14))
        button.clicked.connect(callback)
        return button

#################################################################################################

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


Вот пример интерфейса
65c8c5d05b3a8267019451.jpeg
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
@flexpc
при закрытие программы сохраняй информацию в файл (txt, json или xml), а при открытии считывай его и записывай нужные данные. По факту, это обычный файл сохранения, если играешь в игры, то слышал о таких.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы