Предыстория:
В настоящее время я разрабатываю программу, которая имеет несколько элементов qComboBox
и qLineEdit
, в которые пользователь может вводить данные или выбирать значение. Когда пользователь выбирает «Новый файл» или «Открыть файл», я хочу проверить, изменились ли какие-либо значения, и предоставить пользователю возможность сохранить свою работу. Выходной файл - XML.
Проблема:
По сути, мне просто нужно знать, отличаются ли какие-либо значения от значений по умолчанию. Меня не интересует, какие именно значения отличаются, мне просто нужно знать, что они разные.
Я попытался использовать xmldiff, создав Дерево элементов, которое содержит начальные значения при запуске программы, а затем сравнил его со вторым Деревом элементов с текущими значениями. Похоже, что он не может просто дать истинное или ложное значение, а второе Дерево Элементов различается по размеру, поэтому я не думаю, что могу просто сделать сравнение 1 к 1.
Второе, что я попробовал, было просто установить логическое значение, когда элемент изменился, но я не мог объяснить сброс элемента к значению по умолчанию. Например, если поле qLineEdit
не имеет значения и пользователь вводит что-то, это установит логическое значение в «true»; однако, если они вернутся и вернут это значение к значению по умолчанию, результатом будет также «true».
Мне было интересно, есть ли «лучшая практика» для таких вещей или кто-то может указать мне правильное направление. Кажется, по большей части это должно быть тривиально, но я не знаю, как к этому подойти.
EDIT… Добавлен пример для второй попытки.
import sys
from PyQt5.QtWidgets import *
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.modified = False
self.edit1 = QLineEdit()
layout = QGridLayout(self)
layout.addWidget(self.edit1)
self.edit1.editingFinished.connect(self.valueChanged)
def valueChanged(self):
print('valueChanged Event')
self.modified = True
def closeEvent(self, event):
if self.modified:
prompt = QMessageBox.warning(
self, 'Save Changes?',
'This document has been modified.\n'
'Do you want to save these changes?',
QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel, QMessageBox.Cancel
)
if prompt == QMessageBox.Yes:
event.accept()
if prompt == QMessageBox.No:
event.accept()
if prompt == QMessageBox.Cancel:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 300, 100)
window.show()
sys.exit(app.exec_())