【发布时间】:2019-03-15 05:09:42
【问题描述】:
我使用 python 使用 PyQT5 创建了一个表单,我通过 QLineEdit 从用户那里获取价值。
我的问题是用户不应该在表单中将任何字段留空。
如何避免空Lineedit?
【问题讨论】:
-
你的代码在哪里?
标签: python pyqt5 qlineedit isnullorempty
我使用 python 使用 PyQT5 创建了一个表单,我通过 QLineEdit 从用户那里获取价值。
我的问题是用户不应该在表单中将任何字段留空。
如何避免空Lineedit?
【问题讨论】:
标签: python pyqt5 qlineedit isnullorempty
一个简单的解决方案是使用自定义 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_())
【讨论】:
扩展 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
【讨论】: