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()
掩码由掩码字符和分隔符字符串组成,后面可以跟一个分号和用于空白的字符,空白字符在编辑后总是从文本中删除。
- 常用的掩码
定义输入掩码的字符
掩码字符 | 说明 |
---|
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
- 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