第六节_PySide6基本窗口控件_单行文本框(QLineEdit)
文章目录
- 前言
- 一、单行文本框 QLineEdit 简介
- 1.继承链关系
- 2.QLineEdit 是什么?
- 二、常用函数和信号
- 1.QLineEdit 类中常用的函数介绍
- 2.QLineEdit 类中常用的信号介绍
- 三、核心功能与特性
- 1.基础文本操作
- 2.隐私保护:回显模式(Echo Mode)
- 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.基础文本操作
①设置/获取文本、②清空文本、③设置占位符文本(提示文字)、④设置文字颜色和背景色、⑤
选中文本、⑥移动光标、⑦占位提示符,限制长度、⑧只读文本、⑨槽函数
这些是最基本也是最常用的功能。
# 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) # 设置文本框的当前指针的位置为 2self.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:在编辑时显示字符,负责显示密码类型的输入。
# 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地址、日期、许可证号等,掩码由掩码字符和分隔符字符串组成,后面可以跟一个分号和空白字符,空白字符在编辑后会从文本中删除:
# 掩码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,分别表示整型验证器、浮点型验证器和正则验证器:
# 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),提升用户体验,减少输入错误。
# 创建补全器completer = QCompleter(["apple", "banana", "cherry", "date", "elderberry"])# 设置补全模式(有多种模式可选)completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) # 不区分大小写completer.setFilterMode(Qt.MatchFlag.MatchContains) # 包含匹配(而不仅仅是前缀匹配)# 应用到QLineEditself.ui.Edit_maxLength.setCompleter(completer)
②动作与装饰器功能,在文本框内添加功能按钮(如清除按钮、密码显示切换)。
# 添加清除按钮(非常实用)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)控件来进行适配。
本节源码路径为:Python-QLineEditQTextEdit基本窗口控件-单行文本框(QLineEdit)