来自文档:
无效 QLineEdit::editingFinished()
当按下 Return 或 Enter 键或行编辑失去焦点时,会发出此信号。请注意,如果在行编辑上设置了 validator() 或 inputMask() 并按下了 enter/return,则仅当输入跟随 inputMask() 并且 validator() 返回 QValidator 时才会发出 editingFinished() 信号: : 可以接受。
并且 QIntValidator 似乎并不认为空字符串是有效的。所以我建议你使用创建自己的验证器QRegExpValidator
下面是接受数字和空字符串的验证器
regexp = QtCore.QRegExp('(^[0-9]+$|^$)')
validator = QtGui.QRegExpValidator(regexp)
完整示例:
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
class MainWidget(QtWidgets.QWidget):
old_val = {'val': '0'}
def __init__(self):
super(MainWidget, self).__init__()
self.setLayout(QtWidgets.QVBoxLayout())
self.setFocusPolicy(QtCore.Qt.ClickFocus)
regexp = QtCore.QRegExp('(^[0-9]+$|^$)')
validator = QtGui.QRegExpValidator(regexp)
number_textbox = QtWidgets.QLineEdit()
number_textbox.setText(self.old_val['val'])
number_textbox.setValidator(validator)
number_textbox.editingFinished.connect(lambda: self.editing_finished_function(number_textbox))
self.layout().addWidget(number_textbox)
def editing_finished_function(self, textbox):
print("FINISHED")
if textbox.text() == '':
textbox.setText(self.old_val['val'])
else:
self.old_val['val'] = textbox.text()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
widget = MainWidget()
widget.show()
sys.exit(app.exec_())