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两次更好。