• PyQt5 QLineEdit基础



    QLineEdit小部件是一个单行文本编辑器。
    行编辑允许用户使用一组有用的编辑功能输入和编辑纯文本行,包括撤消和重做,剪切和粘贴以及拖放。
    通过更改行编辑的echoMode(),还可以将其用作“只写”字段,以输入密码等输入。

    QLineEdit的常用信号

    名称描述
    textChanged()当文本框中的内容被键盘编辑,被点击就会发出 textChanged 信号
    Qt在调用这个信号处理函数时,传入的参数就是文本框目前的内容字符串。
    returnPressed()用户在文本框中任何时候按下回车键触发
    有时我们需要处理这种情况,比如登录界面,用户输完密码直接按回车键就进行登录处理,比再用鼠标点击登录按钮快捷的多。
    textEdited()当文本被编辑时,就会发出这个信号
    与textChanged()不同,当以编程方式更改文本时,例如,通过调用setText() 不会发出此信号。
    editingFinished()当按返回或者回车键时,或者行编辑失去焦点时,这个信号会被发射。按回车键时会触发两次槽函数。
    cursorPositionChanged()当文本框中的光标位置变动,就会发出 cursorPositionChanged 信号
    inputRejected当用户输入不合法字符时,将发出此信号。前提要 setValidator() 等设置合法字符范围,Qt 5.12 版本新增

    QLineEdit内置函数

    函数说明
    text()返回文本框内容
    setText()设置文本框内容
    setPlaceholderText()设置提示文本内容,即文本框浮显的文字
    setAlignment()按固定值方式对齐文本
    isReadOnly()获取是否设置了只读属性值
    setReadOnly()设置文本框为只读,在只读模式下,用户仍然可以将文本复制到剪贴板,但不能编辑它,且不显示光标
    setMaxLength()设置文本框所允许输入的最大字符数
    setInputMask()设置掩码,setInputMask(‘000.000.000.000;_’),0表明要输入数字,.为分隔符
    setValidator()设置文本框的验证规则
    clear()清除文本框内容
    setEchoMode()设置文本框显示格式
    setDragEnabled()设置文本框是否接受拖动
    selectAll()全选
    cursorPositionAt()返回光标的位置
    selectedText()得到当前被选中的文本,如果没有选中,返回一个空字符串。默认为一个空字符串
    setClearButtonEnabled()设置当行编辑内容不为空时是否显示清除按钮,是最右边的小X。
    setFrame(bool)设置边框,True 存在边框(默认),False 去掉边框
    setCompleter()设置行编辑控件补全模板,相当于是提示信息

    setAlignment()方法

    水平标志

    参数描述
    Qt.AlignLeft水平方向靠左对齐
    Qt.AlignRight水平方向靠右对齐
    Qt.AlignHCenter水平方向居中对齐
    Qt.AlignJustify水平方向调整间距两端对齐

    垂直标志

    参数描述
    Qt.AlignTop垂直方向靠上对齐
    Qt.AlignBottom垂直方向靠下对齐
    Qt.AlignVCenter垂直方向居中对齐
    Qt.AlignBaseline与基线对齐

    水平垂直标志

    参数描述
    Qt.AlignCenter在两个维度上均居中

    setInputMask()

    掩码由掩码字符和分隔符字符串组成,后面可以跟一个分号和用于空白的字符,空白字符在编辑后总是从文本中删除。

    • 常用的掩码
      在这里插入图片描述

    定义输入掩码的字符

    掩码字符说明
    AASCII字母字符是必须输入的(A-Z,a-z)
    aASCII字母字符是允许输入的,但不是必须的,一般使用时和A差不多
    N要求字母或数字类别的字符,例如A-Z,a-z,0-9
    n允许字母或数字类别的字符,但不是必需的
    X任何非空白字符
    x任何字符都是允许输入的,但不是必须输入的
    9需数字类别的字符,例如0-9
    0允许数字类别的字符,但不是必需的
    D需数字类别的字符,且必须大于零,例如1-9
    d允许数字类别的字符,且必须大于零,例如1-9
    #需数字类别的字符,或加号/减号等不是必须
    H必须为十六进制字符。A-F,a-f,0-9
    h允许使用十六进制字符,但不是必需的
    B必须为二进制字符,0-1
    b允许使用二进制字符,但不是必需的
    元字符说明
    >以下所有字母字符均大写
    <以下所有字母字符均小写
    !关闭大小写转换
    ;c终止输入掩码并将空白字符设置为c
    \使用\转义上面列出的特殊字符使用它们作为分隔
    # 本例中使用到了常用的一些掩码方式
    
    
    • 1
    • 2

    QLineEdit回显格式

    QLineEdit的文本有四种显示方式

    参数描述
    Normal正常显示,输入啥,显示啥,这是默认值
    NoEcho输入但不显示任何东西,暗戳戳的执行,不显示任何内容。这可能适用于密码,即使密码的长度也应保密
    Password密码格式显示
    PasswordEchoOnEdit编辑时显示输入的字符,否则显示大圆点。再次编辑会删除之前的内容
    import sys
    from PyQt5.QtWidgets import *
    
    
    class QlineEditClass(QWidget):
        def __init__(self):
            super().__init__()
            form_layout = QFormLayout()
            line_edit1 = QLineEdit()
            line_edit2 = QLineEdit()
            line_edit3 = QLineEdit()
            line_edit4 = QLineEdit()
            line_edit1.setEchoMode(QLineEdit.Normal)
            line_edit2.setEchoMode(QLineEdit.NoEcho)
            line_edit3.setEchoMode(QLineEdit.Password)
            line_edit4.setEchoMode(QLineEdit.PasswordEchoOnEdit)
    
            form_layout.addRow("Normal", line_edit1)
            form_layout.addRow("NoEcho", line_edit2)
            form_layout.addRow("Password", line_edit3)
            form_layout.addRow("PasswordEchoOnEdit", line_edit4)
    
            line_edit1.setPlaceholderText("这是Normal格式的输入")
            line_edit2.setPlaceholderText("这是NoEcho格式的输入")
            line_edit3.setPlaceholderText("这是Password格式的输入")
            line_edit4.setPlaceholderText("这是PasswordEchoOnEdit格式的输入")
            self.setLayout(form_layout)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        widget = QlineEditClass()
        widget.setGeometry(100, 100, 400, 400)
        widget.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    举例

    举例1

    • 使用到editingFinished()信号,setInputMask()及text()方法。
    import sys
    from PyQt5.Qt import *
    
    
    class QlineEditClass(QWidget):
        def __init__(self):
            super().__init__()
            self.line = QLineEdit(self)
            self.lb = QLabel('IP地址', self)
            hbox = QHBoxLayout()
            hbox.addWidget(self.lb, alignment=Qt.AlignLeft)
            hbox.addWidget(self.line, alignment=Qt.AlignRight)
    
            self.line.editingFinished.connect(self.action)
            self.line.setInputMask('000.000.hhh.aaa;_')
            self.setLayout(hbox)
    
        def action(self):
            if len(self.line.text()) > 3:
                QMessageBox.information(self, '提示信息', '这行你完成了哦')
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        widget = QlineEditClass()
        widget.setGeometry(100, 100, 400, 400)
        widget.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    举例2

    • 使用正则表达式判断手机号是否合法
    • textEdited()信号,setText()方法的使用
    • setClearButtonEnabled()的使用
    import sys
    from PyQt5.Qt import *
    import re
    
    
    class QlineEditClass(QWidget):
        def __init__(self):
            super().__init__()
            self.line1 = QLineEdit(self)
            self.line1.setClearButtonEnabled(True)
            self.lb = QLabel('手机号', self)
            self.line2 = QLineEdit(self)
    
            hbox = QHBoxLayout()
            hbox.addWidget(self.lb, alignment=Qt.AlignLeft)
            hbox.addWidget(self.line1, alignment=Qt.AlignRight)
            vbox = QVBoxLayout()
            vbox.addLayout(hbox)
            vbox.addWidget(self.line2)
    
            self.line1.textEdited.connect(self.action_clear)
            self.line1.editingFinished.connect(self.action)
            self.setLayout(vbox)
    
        def action_clear(self):
            if self.line1.text() == "":
                self.line2.setText('')
    
        def action(self):
            regex_phone = r'^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$'
            phone = self.line1.text()
            rr1 = re.compile(regex_phone)
            if rr1.match(phone) is None:
                self.line2.setText('请填写正确的手机号!')
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        widget = QlineEditClass()
        widget.setGeometry(100, 100, 150, 200)
        widget.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述

  • 相关阅读:
    全球名校AI课程库(31)| MIT麻省理工 · 深度学习导论课程『Introduction to Deep Learning』
    kubernetes测试部署一个nginx
    upf低功耗的一个简单的例子
    Eolink 旗下网关产品各版本功能及性能对比
    IT学习笔记--Flink
    手把手教程6-2: F460把debug printf功能改到UART1
    【Qt之QSetting】介绍及使用
    COBOL 程序结构
    《程序员的自我修养》笔记
    python的类属性和实例属性
  • 原文地址:https://blog.csdn.net/weixin_48668114/article/details/126911406