您可以使用
QLineEdit.textEdited
处理来自用户的文本更改的信号,但它是在每次按键时发出的,而不是在失去焦点时发出的。在失去焦点的情况下,您可以存储编辑状态并在稍后使用它
editingFinished
处理程序。
import sys
from PyQt6.QtWidgets import QApplication,QWidget,QVBoxLayout,QPushButton,QLineEdit,QSpinBox
from PyQt6.QtCore import pyqtSignal
class LineEdit(QLineEdit):
userEditingFinished = pyqtSignal(str)
def __init__(self, parent = None):
super().__init__(parent)
self._edited = False
self.editingFinished.connect(self.onEditingFinished)
self.textEdited.connect(self.onTextEdited)
def onTextEdited(self):
self._edited = True
def onEditingFinished(self):
if self._edited:
self.userEditingFinished.emit(self.text())
self._edited = False
class Foo(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout(self)
self.spinBox = QSpinBox()
self.spinBox.setValue(0)
layout.addWidget(self.spinBox)
self.lineEdit = LineEdit('text')
self.lineEdit.userEditingFinished.connect(self.onUserEditingFinished)
layout.addWidget(self.lineEdit)
button = QPushButton('setText')
button.clicked.connect(self.onButtonClicked)
layout.addWidget(button)
def onUserEditingFinished(self, text):
self.spinBox.setValue(self.spinBox.value()+1)
def onButtonClicked(self):
self.lineEdit.setText(self.lineEdit.text()+'+')
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = Foo()
mainWindow.show()
sys.exit(app.exec())