第六节_PySide6基本窗口控件_单行文本框(QLineEdit)

文章目录


前言

本节主要介绍基本窗口控件中的 单行文本框(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)控件来进行适配。

本节源码路径为:Python-QLineEditQTextEdit基本窗口控件-单行文本框(QLineEdit)

相关推荐
C嘎嘎嵌入式开发7 小时前
(13)100天python从入门到拿捏《目录操作》
windows·python·microsoft
kalvin_y_liu15 小时前
智能体框架大PK!谷歌ADK VS 微软Semantic Kernel
人工智能·microsoft·谷歌·智能体
刀客Doc1 天前
刀客doc:亚马逊广告再下一城,拿下微软DSP广告业务
大数据·人工智能·microsoft
mit6.8241 天前
[C# starter-kit] Domain Entities | `AuditableEntity`基类 | 跟踪变化 | 软删除
数据库·microsoft·c#
Leinwin1 天前
微软发布Azure容器存储v2.0.0国际版
microsoft·azure
鹿鸣天涯1 天前
仍可绕过:新变通方案可实现微软 Win11 装机 OOBE 创建本地账号
microsoft
FreeBuf_2 天前
微软警告:攻击者将Microsoft Teams武器化用于勒索软件、间谍活动及社会工程攻击
microsoft
熊思宇2 天前
ASP.NET Core Web API 发布到 IIS 服务器
服务器·microsoft·asp.net
2301_790994993 天前
仿神秘海域/美末环境交互的程序化动画学习
学习·microsoft·交互