【问题标题】:How to avoid Null or empty value in Lineedit of Pyqt5Pyqt5的Lineedit中如何避免Null或空值
【发布时间】:2019-03-15 05:09:42
【问题描述】:

我使用 python 使用 PyQT5 创建了一个表单,我通过 QLineEdit 从用户那里获取价值。

我的问题是用户不应该在表单中将任何字段留空。

如何避免空Lineedit?

【问题讨论】:

标签: python pyqt5 qlineedit isnullorempty


【解决方案1】:

一个简单的解决方案是使用自定义 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_())

【讨论】:

    【解决方案2】:

    扩展 eyllanesc 的回答:

    如果您想让用户暂时清空该字段(例如删除所有文本并写入全新内容),则不应将空字段返回为Invalid,而应返回为Intermediate。如果只剩下一个字母,但空的QLineEdit 将是Invalid,则可能会阻止用户删除最后一个字母,而必须采取某种解决方法。此外,下面的代码在检查是否为空之前会删除可能的空白。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多