Как сохранить состояние дочерней формы в PyQt при её повторном открытии?

Как я могу модифицировать вызов внутри метода EnterOS таким образом, чтобы после внесения изменений в любой виджет (например, после ввода текста в LineEdit) форма закрывалась, а затем, когда она была открыта снова, мои изменения сохранялись?
  • 12 февраля 2024 г. 11:18
Ответы на вопрос 2
Для сохранения состояния дочерней формы в PyQt5 при её повторном открытии, вы можете использовать несколько подходов. Один из способов - создать экземпляр дочерней формы один раз и затем просто скрывать его вместо закрытия. Это сохранит все значения виджетов в их текущем состоянии. Вот как это может быть реализовано:

```python
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QLineEdit, QVBoxLayout, QWidget

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

    def initUI(self):
        self.lineEdit = QLineEdit(self)
        self.layout = QVBoxLayout(self)
        self.layout.addWidget(self.lineEdit)

class ParentForm(QMainWindow):
    def __init__(self):
        super().__init__()

        self.child_form = None  # ссылка на дочернюю форму
        self.initUI()

    def initUI(self):
        self.button = QPushButton("Открыть форму", self)
        self.button.clicked.connect(self.enterOS)
        self.setCentralWidget(self.button)

    def enterOS(self):
        if self.child_form is None:
            self.child_form = ChildForm()  # создаем экземпляр дочерней формы
        self.child_form.show()  # отображаем форму, которая уже может содержать введенные данные

if __name__ == '__main__':
    app = QApplication([])
    parent_form = ParentForm()
    parent_form.show()
    app.exec_()
```

В этом примере мы создаем экземпляр дочерней формы `ChildForm` один раз внутри конструктора класса `ParentForm`. В методе `enterOS`, вместо создания нового экземпляра дочерней формы каждый раз, когда мы хотим её открыть, мы просто показываем уже существующий экземпляр, который сохранит все изменения, сделанные ранее.

Если вы подразумеваете, что состояние формы должно сохраняться даже после закрытия приложения, то вам понадобятся дополнительные механизмы для сохранения состояния внешним образом, например, в файле конфигурации или в базе данных. Это может быть реализовано путем сохранения значений виджетов при закрытии и их восстановления при следующем открытии формы.
Надо сохранять в файл и при открытии записывать из него данные
Похожие вопросы