python 如何避免Pyqt5中Lineedit的空值

tyg4sfes  于 2023-02-15  发布在  Python
关注(0)|答案(3)|浏览(516)

我用PyQT5创建了一个表单,在这个表单中,我通过QLineEdit从用户那里获取值。
我的问题是用户不应该在表单中留下任何字段为空。
如何避免空的Lineedit?

omtl5h9j

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_())
l0oc07j2

l0oc07j22#

对ellanesc的回答进行了扩展:
如果要使用户可以临时清空字段(例如删除所有文本并写入全新内容),则不应返回空字段Invalid,而应返回Intermediate。如果只剩下一个字母,而QLineEdit为空,则返回Invalid。那么用户可能会被阻止删除最后一个字母,而不得不做一些变通。2同样,下面的代码会在检查空格之前去掉可能的空格。

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
vh0rcniy

vh0rcniy3#

您可以先使用将其转换为文本

name = lineEdit.text()

使用if语句检测空值,如下所示

if name == "":
     print("Empty")

更多详情here

相关问题