Альтернативный вопрос: как мне заставить QLineEdit.clear()
пропустить историю отмен?
Я подкласс QLineEdit, чтобы взять путь к CSV, который сбрасывается на него:
class QLineEditDragDrop(QtWidgets.QLineEdit):
def __init__(self, parent=None):
super().__init__()
def dragEnterEvent(self, event):
file_path = Path(event.mimeData().urls()[0].toLocalFile())
if file_path.suffix == ".csv":
event.accept()
else:
tool_tip = "Please provide a .csv file."
QToolTip.showText(self.mapToGlobal(self.rect().topRight()), tool_tip,
self, self.rect(), 1000)
event.ignore()
def dropEvent(self, event):
# Only accept the first selected file in case of multiple input
file_path = Path(event.mimeData().urls()[0].toLocalFile())
if file_path.suffix == ".csv":
event.accept()
self.setText(str(file_path))
else:
event.ignore()
Используя setText, событие не регистрируется в истории отмены, и пользователь не может использовать Ctrl-Z, чтобы вернуть предыдущее значение.
Поэтому я заменил
self.setText(str(file_path))
с
self.clear()
self.insert(str(file_path))
, но это создает два события в истории отмены, одно для очистки и одно для вставки, так что пользователь получает пустое поле на первом Ctrl + Z и должен нажать его снова, чтобы фактически вернуть предыдущий ввод.
Я также пытался использовать self.setText('')
вместо self.clear()
, но это полностью стирает историю отмены.
Как я могу иметь только одно событие в истории?