вернуть отклоненный диалог / форму, чтобы отобразить последние принятые значения при повторном открытии - PullRequest
0 голосов
/ 20 июня 2019

Я настраиваю диалоговое окно «Параметры» в программе, где я могу изменить некоторые значения и закрыть диалог с помощью кнопок «ОК / Отмена», чтобы принять отклонение моих изменений.После закрытия диалога с отменой и повторного его открытия я бы хотел, чтобы отображались последние принятые значения, однако я точно знаю, как это реализовать.

Ниже приведена очень упрощенная версия моего кода.Я решил создать диалоговое окно только один раз (в отличие от создания нового экземпляра каждый раз, когда я вызываю диалоговое окно), главным образом, чтобы избежать необходимости вызывать __init__ и импортировать данные из файлов сохранения каждый раз, когда я открываю диалоговое окно.

from PyQt5.QtWidgets import QMainWindow, QPushButton,\
    QApplication, QTextEdit, QDialog, QDialogButtonBox


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        btn = QPushButton('open text 1', self)
        btn.move(10, 10)
        btn.clicked.connect(self.open_dlg)

        self.txtdlg = TextDialog()

    def open_dlg(self):
        if self.txtdlg.exec_() == QDialog.Accepted:
            print(self.txtdlg.preferences)


class TextDialog(QDialog):
    def __init__(self):
        super().__init__()

        self.preferences = "text here"

        self.resize(200, 150)
        self.textedit = QTextEdit(self)
        self.textedit.resize(200, 100)
        self.textedit.setText(self.preferences)
        btns = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
        btns.move(20, 100)
        btns.accepted.connect(self.save_and_close)
        btns.rejected.connect(self.reject)

    def save_and_close(self):
        self.preferences = self.textedit.toPlainText()
        self.accept()


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    MW = MainWindow()
    MW.show()
    sys.exit(app.exec_())

Как есть, после нажатия кнопки «Отмена» диалоговое окно сохраняет все несохраненные изменения в своих виджетах, если я снова его открою.Моя первая идея заключалась в том, чтобы подключить кнопку отмены к методу close_without_saving, который обновляет диалог до последних сохраненных значений перед закрытием, но отображаемые значения не будут обновляться, если preferences по какой-то причине изменяется, а диалог невидим.Могу ли я запустить какой-нибудь код, когда я звоню exec_?Или логика моей реализации как-то не так?

1 Ответ

1 голос
/ 20 июня 2019

Вы должны реализовать метод, который устанавливает значения диалога в значения по умолчанию:

# ...
class MainWindow(QMainWindow):
    # ...

    def open_dlg(self):
        self.txtdlg.reset()
        if self.txtdlg.exec_() == QDialog.Accepted:
            print(self.txtdlg.preferences)


class TextDialog(QDialog):
    # ...

    def reset(self):
        self.preferences = "text here"
        self.textedit.setText(self.preferences)

    def save_and_close(self):
        self.preferences = self.textedit.toPlainText()
        self.accept()
# ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...