文章目录
- 前言
- [一、单行文本框 QLineEdit 简介](#一、单行文本框 QLineEdit 简介)
-
- 1.继承链关系
- [2.QLineEdit 是什么?](#2.QLineEdit 是什么?)
- 二、常用函数和信号
-
- [1.QLineEdit 类中常用的函数介绍](#1.QLineEdit 类中常用的函数介绍)
- [2.QLineEdit 类中常用的信号介绍](#2.QLineEdit 类中常用的信号介绍)
- 三、核心功能与特性
-
- 1.基础文本操作
- [2.隐私保护:回显模式(Echo Mode)](#2.隐私保护:回显模式(Echo Mode))
- [3.限制输入:掩码(Input Mask)](#3.限制输入:掩码(Input Mask))
- 4.限制输入:验证器(Validator)
- 5.实用小功能
- 6.整体界面
- 总结
前言
本节主要介绍基本窗口控件中的 单行文本框(QLineEdit)
一、单行文本框 QLineEdit 简介
1.继承链关系
QLineEdit 直接继承 QWidget:

2.QLineEdit 是什么?
定义:QLineEdit 是一个允许用户输入和编辑单行纯文本的控件。它是用户与应用程序交互最基础的组件之一,常用于:
1)表单填写(用户名、密码、电话号码等) ;
2)数据过滤和搜索框 ;
3)命令输入 ;
4)任何需要用户输入简短文本的场景;
其核心设计目标是高效、轻量级地处理单行文本。
二、常用函数和信号
1.QLineEdit 类中常用的函数介绍
函数 | 功能描述 |
---|---|
setText() | 设置文本框中的内容 |
text() | 返回文本框中的内容 |
clear() | 清除文本框中的内容 |
setPlaceholderText() | 设置文本框浮显文字 |
setAlignment() | 按固定值方式对齐文本 |
selectAll() | 选中全部文本 |
setSelection(a, b) | 选中设置范围的文本 |
setFocus() | 获取焦点 |
setMaxLength() | 设置文本框允许输入的最大字符数 |
setReadOnly() | 设置文本框是只读的 |
setEchoMode() | 设置文本框的显示格式 |
setInputMask() | 设置掩码 |
setValidator() | 设置文本框的验证器(验证规则),将限制任意可能输入的文本 |
2.QLineEdit 类中常用的信号介绍
信号 | 功能描述 |
---|---|
selectionChanged | 只要选择发生变化,就会发射这个信号 |
textChanged | 当修改文本内容时,就会发射这个信号 |
editingFinished | 当编辑文本结束时,就会发射这个信号 |
textEdited(text) | 每当编辑文本时,都会发射此信号,text 参数是新文本 |
cursorPositionChanged(int oldPos,int newPos) | 每当指针移动时,就会发射这个信号 |
returnPressed | 当按 Enter 键时,就会发射这个信号 |
三、核心功能与特性
1.基础文本操作
①设置/获取文本、②清空文本、③设置占位符文本(提示文字)、④设置文字颜色和背景色、⑤
选中文本、⑥移动光标、⑦占位提示符,限制长度、⑧只读文本、⑨槽函数
这些是最基本也是最常用的功能。
python
# 1. 设置/获取文本
self.ui.btn_normal.clicked.connect(self.Text_normal)
# 2. 清空文本
self.ui.btn_clear.clicked.connect(lambda: self.ui.Edit_clear.clear())
# 3. 设置占位符文本(提示文字)
self.ui.btn_holder.clicked.connect(self.Text_holder)
# 4. 设置颜色
self.ui.btn_Set.clicked.connect(self.Text_Set)
# 5. 选择文本
self.ui.Edit_select.setText("zheshi我随意输入的文本!!")
self.ui.btn_select.clicked.connect(self.Text_select)
# 6. 移动光标
self.ui.Edit_cursor.setText("点击左边按钮向右移动光标")
self.ui.Edit_cursor.setFocus() # 获取焦点
self.ui.Edit_cursor.setCursorPosition(2) # 设置文本框的当前指针的位置为 2
self.ui.btn_cursor.clicked.connect(self.Text_cursor)
# 7. 占位提示符,限制长度
self.ui.Edit_maxLength.setMaxLength(6)
self.ui.Edit_maxLength.setPlaceholderText("最多输入6个字符")
self.ui.Edit_maxLength.keyPressEvent = self.keyPressEvent
# 8. 只读文本
self.ui.Edit_readOnly.setReadOnly(True)
self.ui.Edit_readOnly.setText("只读文本,不能编辑")
# 9. 槽函数
self.ui.Edit_change.setPlaceholderText("输入文本框会改变左侧标签")
self.ui.Edit_change.textChanged.connect(lambda: self.ui.label_change.setText('更新标签:' + self.ui.Edit_change.text()))
def Text_normal(self):
self.ui.Edit_normal.setText("初始化文本!!!")
print(f"当前获取的文本为:{self.ui.Edit_normal.text()}")
def Text_normal(self):
self.ui.Edit_normal.setText("初始化文本!!!")
print(f"当前获取的文本为:{self.ui.Edit_normal.text()}")
def Text_holder(self):
self.ui.Edit_holder.clear()
self.ui.Edit_holder.setPlaceholderText("请输入你想输入的内容!!!")
def Text_Set(self):
self.ui.Edit_Set.setText("显示红色背景白色字体并且居中对齐!!")
self.ui.Edit_Set.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(QPalette.ColorRole.Base, Qt.GlobalColor.red)
palette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.white)
self.ui.Edit_Set.setPalette(palette)
self.ui.Edit_Set.setAlignment(Qt.AlignmentFlag.AlignCenter)
def Text_select(self):
self.ui.Edit_select.selectAll() # 全选
# 或通过代码选择部分文本
#self.ui.Edit_select.setSelection(0, 5) # 选择从0开始的前5个字符
# 获取选中的文本
print(f"输出选中的文本:{self.ui.Edit_select.selectedText()}")
def Text_cursor(self):
self.ui.Edit_cursor.cursorForward(True, 2) #移动指针使用cursorForward,如果 mark 为 True 则将每个移出的字符添加到选择中
print(f"输出选中的文本:{self.ui.Edit_cursor.selectedText()}")
#self.ui.Edit_cursor.cut() #剪切选中文本的内容

2.隐私保护:回显模式(Echo Mode)
控制文本的显示方式,特别适用于密码输入等敏感场景。允许输入的文本框显示格式的值可以是以下几个:
1)QLineEdit.EchoMode.Normal:正常显示所输入的字符,此为默认选项;
2)QLineEdit.EchoMode.NoEcho:不显示任何输入的字符,常用于密码类型的输入,并且其密码长度需要保密;
3)QLineEdit.EchoMode.Password:显示与平台相关的密码掩码字符,而不是实际输入的字符;
4)QLineEdit.EchoMode.PasswordEchoOnEdit:在编辑时显示字符,负责显示密码类型的输入。
python
# 1. 默认模式,正常显示
self.ui.Edit_Normal.setPlaceholderText("Normal (默认)")
# 2. 密码模式 - 最常用
self.ui.Edit_Password.setEchoMode(QLineEdit.EchoMode.Password)
self.ui.Edit_Password.setPlaceholderText("Password模式")
# 3. 无回显模式 - 输入时什么都不显示(适用于高度敏感信息)
self.ui.Edit_NoEcho.setEchoMode(QLineEdit.EchoMode.NoEcho)
self.ui.Edit_NoEcho.setPlaceholderText("NoEcho模式")
# 4. 密码编辑模式 - 只在失去焦点时隐藏
self.ui.Edit_PasswordEchoOnEdit.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit)
self.ui.Edit_PasswordEchoOnEdit.setPlaceholderText("PasswordEchoOnEdit模式")

3.限制输入:掩码(Input Mask)
强制用户按照特定格式输入,可以使用掩码,常见的有 IP 地址、MAC地址、日期、许可证号等,掩码由掩码字符和分隔符字符串组成,后面可以跟一个分号和空白字符,空白字符在编辑后会从文本中删除:
python
# 掩码
self.ui.Edit_IP.setInputMask("000.000.000.000; ")
self.ui.Edit_MAC.setInputMask("HH:HH:HH:HH:HH:HH; ")
self.ui.Edit_Data.setInputMask("0000-00-00")
self.ui.Edit_License.setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA#")
# 气泡提示
self.ui.Edit_IP.setToolTip("ip: 192.168.10.5")
self.ui.Edit_MAC.setToolTip("mac: ac:be:ad:ab:cd:op")
self.ui.Edit_Data.setToolTip("date: 2020-01-01")
self.ui.Edit_License.setToolTip("许可证: HDFG-ADDB-BDFB-QDDB-HGDB")

4.限制输入:验证器(Validator)
提供更灵活的输入验证,可以限制字符类型、范围等,验证器由 QValidator 控制,有 3 个子类,即 QDoubleValidator、QIntValidator 和 QRegularExpressionValidator,分别表示整型验证器、浮点型验证器和正则验证器:
python
# 1. 整数验证器(限制0-100之间的整数)
int_validator = QIntValidator(self)
int_validator.setRange(1, 99)
self.ui.Edit_Int.setValidator(int_validator)
self.ui.Edit_Int.setPlaceholderText("输入整数")
# 2. 浮点数验证器(限制-999.99到999.99,保留2位小数)
double_validator = QDoubleValidator(self)
double_validator.setRange(-100.0, 100.0)
double_validator.setNotation(QDoubleValidator.Notation.StandardNotation)
double_validator.setDecimals(2)
self.ui.Edit_Double.setValidator(double_validator)
self.ui.Edit_Double.setPlaceholderText("输入浮点数")
# 3. 正则表达式验证器(最强大灵活)
#email_regex = QRegularExpression("[a-zA-Z0-9]+$") #字符和数字
email_regex = QRegularExpression(r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")
email_validator = QRegularExpressionValidator(self)
email_validator.setRegularExpression(email_regex)
self.ui.Edit_Validator.setValidator(email_validator)
self.ui.Edit_Validator.setPlaceholderText("输入邮箱地址")
注意点:实操中发现输入的数据范围并不是跟输入的数字相关,反而是跟格式或者说跟数值位数有关,这一点不知道是不是这个版本的BUG,这一点需要注意一下。
5.实用小功能
①自动补全功能(Auto-Completion),提升用户体验,减少输入错误。
python
# 创建补全器
completer = QCompleter(["apple", "banana", "cherry", "date", "elderberry"])
# 设置补全模式(有多种模式可选)
completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) # 不区分大小写
completer.setFilterMode(Qt.MatchFlag.MatchContains) # 包含匹配(而不仅仅是前缀匹配)
# 应用到QLineEdit
self.ui.Edit_maxLength.setCompleter(completer)
②动作与装饰器功能,在文本框内添加功能按钮(如清除按钮、密码显示切换)。
python
# 添加清除按钮(非常实用)
self.ui.Edit_Password.setClearButtonEnabled(True) # 输入内容后右侧会出现清除按钮
# 自定义动作按钮(如在左侧添加搜索或者其他图标)
self.search_action = self.ui.Edit_Password.addAction(QIcon(':/res/Resources/image/5.jpeg'), QLineEdit.ActionPosition.LeadingPosition)
self.search_action.triggered.connect(self.toggle_password_visibility)
def toggle_password_visibility(self):
if self.ui.Edit_Password.echoMode() == QLineEdit.EchoMode.Password:
self.ui.Edit_Password.setEchoMode(QLineEdit.EchoMode.Normal)
self.search_action.setIcon(QIcon(':/res/Resources/image/3.jpeg'))
else:
self.ui.Edit_Password.setEchoMode(QLineEdit.EchoMode.Password)
self.search_action.setIcon(QIcon(':/res/Resources/image/5.jpeg'))

6.整体界面

总结
QLineEdit 是一个功能极其丰富的单行文本输入控件,其核心优势包括:
功能领域 | 关键特性 | 应用场景 |
---|---|---|
基础操作 | 文本获取/设置、占位符、选择 | 所有基础输入场景 |
回显控制 | 密码模式、无回显模式 | 登录表单、敏感信息输入 |
输入验证 | 掩码、验证器、最大长度 | 数据格式约束(电话、邮箱、数字) |
用户体验 | 自动补全、动作按钮 | 搜索框、命令输入、快速选择 |
掌握 QLineEdit 的各种特性,能够帮助你构建出更加健壮、用户友好、功能丰富的桌面应用程序界面。但是当我们遇到①需要多行文本输入、②需要丰富的文本格式等场景时,就需要用到多行文本框(QTextEdit/QPlainTextEdit)控件来进行适配。