PyQt5 QLineEdit基础

PyQt5 QLineEdit基础

  • QLineEdit的常用信号
  • QLineEdit内置函数
    • setAlignment()方法
      • 水平标志
      • 垂直标志
      • 水平垂直标志
    • setInputMask()
      • 定义输入掩码的字符
  • QLineEdit回显格式
  • 举例
    • 举例1
    • 举例2

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

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

  • 常用的掩码
    PyQt5 QLineEdit基础_第1张图片

定义输入掩码的字符

掩码字符 说明
A ASCII字母字符是必须输入的(A-Z,a-z)
a ASCII字母字符是允许输入的,但不是必须的,一般使用时和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
\ 使用\转义上面列出的特殊字符使用它们作为分隔
# 本例中使用到了常用的一些掩码方式

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

  • 使用到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_())

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

PyQt5 QLineEdit基础_第2张图片

你可能感兴趣的:(PyQt5,qt,开发语言)