1、QLineEdit自动补全联想:根据用户已经输入的字符串、快速补全联想。(补全字符会通过一个下拉菜单显示)
①:账号对象设置补全项(补全内容,父对象)
completer = QCompleter(["sz", "shunzi", "wangzhe"])
self.account_le.setCompleter(completer)
2、QLineEdit文本内容限制:长度和只读限制
①:长度和只读限制(只读限制不存在焦点,可以通过文本输入,但不能超过给定长度)
# 最大长度限制
le_a.setMaxLength(3)
# 获取最大长度
print(le_a.maxLength())
# 只读限制,不存在焦点
le_a.setReadOnly(True)
# 可以通过文本输入,但不能超过给定长度
le_a.setText("dhajkhf")
②:通过规则限定用户输入的内容。
验证器:用户验证用户输入数据的合法性。
当一个输入框设置了验证器,输入文本不会直接显示在文本框内,他会首先进行验证。
valid验证过程的, 返回参数中:第一个是标识验证状态的(验证通过、验证不通过、两者都没有的中间值),第二个参数就是向外界传递显示文本、第三个参数是光标所在位置。
如果输入框结束输入后,上述的验证状态并非有效、则会调用修补方法。
QValidator是一个抽象类,使用前必须进行子类化操作。
QValidator的基本使用:
3、文本验证器案例:
每次验证器只能输入一个字符,所以我们需要一个中间状态进行过度。
方式一:自定义子类的方法:
from PyQt5.Qt import *
class AgeValidator(QValidator):
def validate(self, input_str, input_pos):
print(input_str, input_pos)
# 判断,结果字符串应该是由一些数字组成,return
try:
if 18 <= int(input_str) <= 180:
return (QValidator.Acceptable, input_str, input_pos)
elif 1 <= int(input_str) <= 17:
return (QValidator.Intermediate, input_str, input_pos)
else:
return (QValidator.Invalid, input_str, input_pos)
except:
if len(input_str) == 0:
return (QValidator.Intermediate, input_str, input_pos)
return (QValidator.Invalid, input_str, input_pos)
# 当处于非正常验证通过状态(通过或无效),在进行处理一遍
def fixup(self, input_str):
print("xxxx", input_str)
try:
if int(input_str) < 18:
return "18"
else:
return "180"
except:
return "18"
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QLineEdit的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
le = QLineEdit(self)
le.move(100, 100)
# 验证器要求输入年龄,且为18-88之间的数字
# 创建一个QValidator类型的对象,抽象类不能直接使用,需要先进行实例化
# 自定义一个类,继承QValidator
validator = AgeValidator()
le.setValidator(validator)
# le2创建是为了使le结束编辑状态
le2 = QLineEdit(self)
le2.move(200, 200)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
方式二:通过系统自定义的子类实现:QintValidator(限制整型数据范围),
# 使用自带的方法,但他无法限定最小值 validator = QIntValidator(18, 180)
# 自定义修复方法 validator = MyAgeValidator(18, 180)
le.setValidator(validator)
from PyQt5.Qt import *
class AgeValidator(QValidator):
def validate(self, input_str, input_pos):
print(input_str, input_pos)
# 判断,结果字符串应该是由一些数字组成,return
try:
if 18 <= int(input_str) <= 180:
return (QValidator.Acceptable, input_str, input_pos)
elif 1 <= int(input_str) <= 17:
return (QValidator.Intermediate, input_str, input_pos)
else:
return (QValidator.Invalid, input_str, input_pos)
except:
if len(input_str) == 0:
return (QValidator.Intermediate, input_str, input_pos)
return (QValidator.Invalid, input_str, input_pos)
# 当处于非正常验证通过状态(通过或无效),在进行处理一遍
def fixup(self, input_str):
print("xxxx", input_str)
try:
if int(input_str) < 18:
return "18"
else:
return "180"
except:
return "18"
class MyAgeValidator(QIntValidator):
def fixup(self, p_str):
print("xxxx", p_str)
if len(p_str) == 0 or int(p_str) < 18:
return "18"
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QLineEdit的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
le = QLineEdit(self)
le.move(100, 100)
# 验证器要求输入年龄,且为18-88之间的数字
# 创建一个QValidator类型的对象,抽象类不能直接使用,需要先进行实例化
# 自定义一个类,继承QValidator
#validator = AgeValidator()
# 使用自带的方法,但他无法限定最小值
#validator = QIntValidator(18, 180)
# 自定义修复方法
validator = MyAgeValidator(18, 180)
le.setValidator(validator)
# le2创建是为了使le结束编辑状态
le2 = QLineEdit(self)
le2.move(200, 200)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())