Python 如何在撤消历史记录中仅创建一项时替换QLineEdit中的文本?

Python 如何在撤消历史记录中仅创建一项时替换QLineEdit中的文本?,python,pyqt,pyside,qlineedit,Python,Pyqt,Pyside,Qlineedit,备选问题措辞:如何使QLineEdit.clear()跳过撤消历史记录 我已将QLineEdit子类化,以获取拖放到其中的csv路径: 类QLineEditDragDrop(qtwidts.QLineEdit): def uuu init uuu(self,parent=None): super()。\uuuu init\uuuuu() def dragEnterEvent(自身、事件): file_path=path(event.mimeData().url()[0].toLocalFile(

备选问题措辞:如何使
QLineEdit.clear()
跳过撤消历史记录

我已将QLineEdit子类化,以获取拖放到其中的csv路径:

类QLineEditDragDrop(qtwidts.QLineEdit): def uuu init uuu(self,parent=None): super()。\uuuu init\uuuuu() def dragEnterEvent(自身、事件): file_path=path(event.mimeData().url()[0].toLocalFile()) 如果文件_path.suffix==“.csv”: event.accept() 其他: tool\u tip=“请提供一个.csv文件。” QToolTip.showText(self.mapToGlobal(self.rect().topRight()),工具提示, self,self.rect(),1000) event.ignore() def dropEvent(自身,事件): #如果有多个输入,只接受第一个选定的文件 file_path=path(event.mimeData().url()[0].toLocalFile()) 如果文件_path.suffix==“.csv”: event.accept() self.setText(str(文件路径)) 其他: event.ignore() 通过使用setText,事件不会在撤消历史记录中注册,并且用户不能使用Ctrl-Z返回上一个值

所以我换了

self.setText(str(文件路径))

self.clear()
self.insert(str(文件路径))
但这会在撤消历史记录中创建两个事件,一个用于清除,另一个用于插入,因此用户在第一个Ctrl+Z组合键上获得一个空框,并且必须再次点击该框才能实际获取以前的输入

我还尝试使用
self.setText(“”)
而不是
self.clear()
,但这完全消除了撤销历史记录

我怎么能在历史上只发生一件事呢?

n.b:在写问题的时候就想出来了,希望这个解决方案能帮助其他人

一个不完美的解决方案是使用
self.selectAll()
代替
self.clear()
。由于
insert()
将替换任何选定的文本,因此这将替换框中的所有现有文本,同时只创建一个撤消事件。当用户使用撤销时,它确实具有在字段中选择所有文本的副作用,这是我不认为理想的,但仍然比必须命中CTRL+Z两次更好。