我用PyQT5创建了一个表单,在这个表单中,我通过QLineEdit从用户那里获取值。我的问题是用户不应该在表单中留下任何字段为空。如何避免空的Lineedit?
omtl5h9j1#
一个简单的解决方案是使用自定义QValidator:
from PyQt5 import QtGui, QtWidgets class NotEmptyValidator(QtGui.QValidator): def validate(self, text, pos): state = QtGui.QIntValidator.Acceptable if bool(text) else QtGui.QIntValidator.Invalid return state, text, pos if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) w = QtWidgets.QLineEdit("Hello World") validator = NotEmptyValidator(w) w.setValidator(validator) w.show() sys.exit(app.exec_())
l0oc07j22#
对ellanesc的回答进行了扩展:如果要使用户可以临时清空字段(例如删除所有文本并写入全新内容),则不应返回空字段Invalid,而应返回Intermediate。如果只剩下一个字母,而QLineEdit为空,则返回Invalid。那么用户可能会被阻止删除最后一个字母,而不得不做一些变通。2同样,下面的代码会在检查空格之前去掉可能的空格。
Invalid
Intermediate
QLineEdit
class NotEmptyValidator(QValidator): def validate(self, text: str, pos): if bool(text.strip()): state = QValidator.Acceptable else: state = QValidator.Intermediate # so that field can be made empty temporarily return state, text, pos
vh0rcniy3#
您可以先使用将其转换为文本
name = lineEdit.text()
使用if语句检测空值,如下所示
if name == "": print("Empty")
更多详情here
3条答案
按热度按时间omtl5h9j1#
一个简单的解决方案是使用自定义QValidator:
l0oc07j22#
对ellanesc的回答进行了扩展:
如果要使用户可以临时清空字段(例如删除所有文本并写入全新内容),则不应返回空字段
Invalid
,而应返回Intermediate
。如果只剩下一个字母,而QLineEdit
为空,则返回Invalid
。那么用户可能会被阻止删除最后一个字母,而不得不做一些变通。2同样,下面的代码会在检查空格之前去掉可能的空格。vh0rcniy3#
您可以先使用将其转换为文本
使用if语句检测空值,如下所示
更多详情here