QLineEdit---自动补全、文本内容限制、

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

。七十二。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值