[【Hello,PyQt】pyqt5中的QLineEdit控件

news2025/1/10 3:14:31

PyQt5 是一个强大的Python库,用于创建图形用户界面(GUI)。其中,QLineEdit 控件作为一个简单而实用的组件,经常用于接受用户的单行文本输入,甚至可以用来进行输入格式的限制。这篇博客中将介绍 QLineEdit 控件的各种功能和用法,帮助您更好地利用这个神奇的控件。

什么是QLineEdit控件?

QLineEdit是PyQt5中的一个基本控件,主要用于接受用户的单行文本输入。除了基本的文本输入功能外,它还支持一些附加功能,包括回显模式、输入限制和验证、信号与槽机制等。

创建第一个QLineEdit控件

让我们从一个简单的例子开始,创建一个基本的 QLineEdit 控件:

import sys
from PyQt5.QtWidgets import QLineEdit, QWidget,QApplication

app = QApplication(sys.argv)
w=QWidget()
w.setGeometry(300,300,300,300)
lineEdit = QLineEdit(w)
lineEdit.setPlaceholderText('请输入')
w.show()
sys.exit(app.exec_())

在窗口中创建QLineEdit控件的方式主要有两种,第一种是直接将QLineEdit作为窗口的子部件lineEdit = QLineEdit(w);第二种是使用布局管理器,先将QLineEdit控件添加到布局中,然后将布局添加给窗口。

#创建窗口
window = QWidget()
# 创建QLineEdit
lineEdit = QLineEdit()
lineEdit.setPlaceholderText('请输入')
# 创建布局管理器并将QLabel添加到布局中
layout = QVBoxLayout(window)
layout.addWidget(lineEdit)
  • 程序预览
    在这里插入图片描述

QLineEdit的功能

文本输入和文本编辑

通过下面的程序可以直观的了解此功能,该程序创建了一个窗口,包含一个QLabel和一个QLineEdit。当用户在QLineEdit中输入或编辑文本时,QLabel会实时更新显示QLineEdit的文本内容。对QLineEdit控件进行编辑时会触发textChanged信号。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit

class TextInputExample(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('文本输入示例')
        layout = QVBoxLayout()

        # 创建一个QLabel用于显示QLineEdit的文本内容
        self.label = QLabel('QLineEdit文本内容:')
        layout.addWidget(self.label)

        # 创建一个QLineEdit用于文本输入和编辑
        self.line_edit = QLineEdit()
        self.line_edit.textChanged.connect(self.onTextChanged)  # 连接文本改变信号到槽函数
        layout.addWidget(self.line_edit)
        self.setLayout(layout)
    # 文本改变时更新QLabel的文本内容
    def onTextChanged(self, text):
        self.label.setText('QLineEdit文本内容:' + text)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = TextInputExample()
    window.show()
    sys.exit(app.exec_())

在这里插入图片描述

回显模式

在 PyQt 中,QLineEdit 控件的回显模式(EchoMode)用于控制用户在输入文本时显示内容的方式。通过设置不同的回显模式,可以实现不同的效果以适用于不同场景,例如密码输入等敏感信息的保护。 QLineEdit 的回显模式有以下四种:

  1. Normal

    • 这是默认的回显模式,输入的内容会直接显示出来,即用户看到的是他们正在键入的文字。
  2. NoEcho

    • 在这种模式下,用户输入的内容不会被显示出来。这意味着用户在输入框中看不到任何字符,使用过linux系统的用户应该有感受。
  3. Password

    • 密码模式,将用户输入的所有字符替换为星号(*)或其他约定符号。
  4. PasswordEchoOnEdit

    • 当用户正在编辑(输入或删除字符)时会短暂地显示输入的字符,一旦输入框失去焦点后,已输入的内容会被隐藏(如显示为星号),提供一种既让用户能够确认刚刚输入的字符是否正确,又能及时隐藏敏感信息的功能。

通过调用 setEchoMode() 方法更改 QLineEdit 的回显模式,并传入相应的枚举值

  • 程序预览
    在这里插入图片描述

输入限制和验证

验证器

有些时候需要对用户的输入进行限制,就可以使用验证器进行限制,在pyqt5中内置了一些验证器QIntValidator,QDoubleValidatorQRegExpValidator

  • QIntValidator: 限制输入为整数,并可以设置最小值和最大值。
  • QDoubleValidator: 类似于 QIntValidator,但用于验证浮点数。
  • QRegExpValidator: 使用正则表达式进行更复杂的验证。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFormLayout, QLabel, QLineEdit
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator,QValidator
from PyQt5.QtCore import QRegExp
class ValidatorDemo(QWidget):
    def __init__(self):
        super(ValidatorDemo, self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('验证器')
        #lineEdit
        intlineEdit=QLineEdit()
        doubleEdit=QLineEdit()
        regexpEdit=QLineEdit()
        #validator
        intValidator=MyIntValidator(self)
        intValidator.setRange(0,100)
        intlineEdit.setValidator(intValidator)

        doubleValidator=QDoubleValidator(self)
        doubleValidator.setDecimals(2)
        doubleValidator.setRange(0,260)
        doubleEdit.setValidator(doubleValidator)
        regexpValidator=QRegExpValidator(self)
        reg=QRegExp("[a-zA-Z0-9]+$")
        regexpValidator.setRegExp(reg)
        regexpEdit.setValidator(regexpValidator)

        flayout=QFormLayout(self)
        flayout.addRow('IntValidator',intlineEdit)
        flayout.addRow('DoubleValidator',doubleEdit)
        flayout.addRow('RegExpValidator',regexpEdit)
if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=ValidatorDemo()
    demo.show()
    sys.exit(app.exec_())

在使用内置的验证器时(就是上面的代码)发现了一个奇怪的问题,需要对QLineEdit进行输入范围限制(0-100)时发现使用setRange(0,100),没有生效,可以输入的范围居然是0~999。查阅了一些资料发现QIntValidator只是用来验证输入的有效性,但它并不会阻止用户输入不符合规则的值。虽然设置了验证器,但默认情况下,Qt并不会阻止用户输入超出范围的值。如果你想要完全防止用户输入不符合规则的值,你需要重写validate和fixup方法。

  • validate: 这个方法被用于验证输入的文本是否符合要求。你要在这个方法里面实现自定义的验证逻辑,如果输入的文本不符合要求会返回QValidator.Invalid,如果输入的文本是部分符合要求的会返回QValidator.Intermediate,如果输入的文本完全符合要求会返回QValidator.Acceptable。
  • fixup: 输入的文本不符合要求但是可以修正的时候,这个方法会被调用。你可以在这个方法里实现对用户输入修正的逻辑。比如用户输入了一个超出范围的值,你可以在这个方法里将其修正为最接近的合法值。

下面给一个例子,这个是可以实现输入范围的限制的。不过要注意一下,假设限制的范围是0~100,输入111是正常显示在QLineEdit控件上的,但是按下回车键就会进行修正了。

class MyIntValidator(QIntValidator):
    def validate(self, input_text, pos):
        # 首先调用父类的 validate 方法进行基本的验证
        state, input_text, pos = super().validate(input_text, pos)

        # 如果基本验证通过,则进一步检查范围
        if state == QValidator.Acceptable:
            value = int(input_text)
            if value < self.bottom() or value > self.top():
                # 如果超出范围,则返回 Intermediate
                return QValidator.Intermediate, input_text, pos

        # 返回最终的验证结果
        return state, input_text, pos

    def fixup(self, input_text):
        # 如果输入超出范围,修正为最接近的合法值
        value = int(input_text)
        if value < self.bottom():
            return str(self.bottom())
        if value > self.top():
            return str(self.top())
        return input_text

输入掩码

掩码功能允许你限制输入的文本格式。掩码是一个字符串,其中包含了一些特殊字符,用来指定用户输入的格式,例如日期、电话号码、信用卡号等。
下面是一些常用的掩码:

  • ‘0’: 表示任意数字字符
  • ‘9’: 表示可选的数字字符
  • ‘#’: 表示数字字符或空格字符
  • ‘L’: 表示任意字母字符
  • ‘a’: 表示可选的字母字符
  • ‘A’: 表示任意字符
  • ‘N’: 表示任意大写字母字符
  • ‘n’: 表示可选的大写字母字符
  • ‘X’: 表示任意小写字母字符
  • ‘x’: 表示可选的小写字母字符
  • ‘H’: 表示任意十六进制字符
  • ‘h’: 表示可选的十六进制字符
  • ‘B’: 表示任意二进制字符
  • ‘b’: 表示可选的二进制字符
  • ‘>’: 大于符号,表示用户输入的值必须大于掩码中此字符之后的数字。
  • ‘<’: 小于符号,表示用户输入的值必须小于掩码中此字符之后的数字。
  • ‘=’: 等于符号,表示用户输入的值必须等于掩码中此字符之后的数字。
  • ‘!’: 不等于符号,表示用户输入的值必须不等于掩码中此字符之后的数字。
  • ‘&’: 逻辑与符号,表示用户输入的值必须满足掩码中此字符之后的多个条件。
  • ‘|’: 逻辑或符号,表示用户输入的值必须满足掩码中此字符之后的多个条件中的至少一个。
    这个例子是官方的帮助文档中的,下面通过代码实现这个例子
    在这里插入图片描述
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFormLayout, QLabel, QLineEdit
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator,QValidator
class MaskDemo(QWidget):
    def __init__(self):
        super(MaskDemo, self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('掩码控制')
        flayout=QFormLayout(self)
        ipEdit=QLineEdit()
        ipEdit.setInputMask("000:000:000:000;_")#末尾的下划线 _ 表示占位符,当用户在该位置没有输入时,下划线将会被显示。
        macEdit=QLineEdit()
        macEdit.setInputMask("HH:HH:HH:HH:HH:HH;_")
        dateEdit=QLineEdit()
        dateEdit.setInputMask("0000-00-00")
        licenseEdit=QLineEdit()
        licenseEdit.setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#")

        flayout.addRow('ip',ipEdit)
        flayout.addRow('mac',macEdit)
        flayout.addRow('date',dateEdit)
        flayout.addRow('license',licenseEdit)

if __name__=='__main__':
    app=QApplication(sys.argv)
    demo=MaskDemo()
    demo.show()
    sys.exit(app.exec_())
  • 程序预览
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1520433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react-native使用FireBase实现google登陆

一、前置操作 首先下载这个包 yarn add react-native-google-signin/google-signin 二、Google cloud配置 Google Cloud 去google控制台新建一个android项目&#xff0c;这时候需要用到你自己创建的keystore的sha1值&#xff0c;然后会让你下载一个JSON文件&#xff0c;先保…

【电路笔记】-金属氧化物半导体晶体管(MOSFET)

金属氧化物半导体晶体管(MOSFET) 文章目录 金属氧化物半导体晶体管(MOSFET)1、概述2、MOSFET 基本结构和符号2.1 耗尽型 MOSFET2.2 增强型MOSFET3、MOSFET放大器4、总结1、概述 除了结型场效应晶体管 (JFET) 之外,还有另一种类型的场效应晶体管,其栅极输入与主载流通道电绝缘…

计算机网络—VLAN 配置

目录 1.拓扑图 2.实验环境准备 2.关闭不相关接口&#xff0c;并配置 Trunk 3.创建 VLAN 4.为客户端配置 IP地址 5.检测设备连通性&#xff0c;验证 VLAN 配置结果 6.配置 Hybrid 端口 7.配置文件 1.拓扑图 2.实验环境准备 在S1和S2上创建Eth-Trunk 1并配置该Eth-Trunk…

JVM-5

1.选择垃圾收集器 如果你的堆大小不是很大&#xff08;比如 100MB &#xff09;&#xff0c;选择串行收集器一般是效率最高的。 参数&#xff1a; -XX:UseSerialGC 。如果你的应用运行在单核的机器上&#xff0c;或者你的虚拟机核数只有单核&#xff0c;选择串行收集器依然是合…

17-指针(初识)

17-1 内存 内存是电脑上特别重要的存储器&#xff0c;计算机中程序的运行都是在内存中进行的。 为了有效的使用内存&#xff0c;就把内存划分成一个个小的内存单元&#xff0c;每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元&#xff0c;就给内存单元进行…

GraspNet-baseline复现----Linux-Ubuntu

1.基本环境 Ubuntu 20.04Cuda 11.0 、cuDNN 80.0Python 3.7.16PyTorch 1.7.0 2.环境配置 PyTorch的版本对Cuda和Python的版本都有依赖&#xff0c;所以基本步骤是 确定需要安装的PyTorch版本 —> 通过 网站 确定对应的cuda版本和python版本 —> 创建虚拟环境配置环境。…

16.WEB渗透测试--Kali Linux(四)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;15.WEB渗透测试--Kali Linux&#xff08;三&#xff09;-CSDN博客 1.crunch简介与使用 C…

【回归预测】基于SSA-RF(麻雀搜索算法优化随机森林)的回归预测 多输入单输出【Matlab代码#66】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 随机森林RF算法2. 麻雀搜索算法3. 实验模型4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. 随机森林RF算法 …

二进一出模拟量隔离变送器

二进一出模拟量隔离变送器定义&#xff1a; 是两路模拟量信号同时输入&#xff0c;隔离变送器选择其中的一路高信号输入的或者低信号输入的通道进行信号传输及控制&#xff0c;该隔离变送器可以用控制信号来选择A路&#xff0c;B路的输入信号&#xff0c;还可以通过干接点&…

开源堡垒机Jumpserver安装教程

前言:堡垒机的应用场景 公司内有若干台服务器,既有windows的也有linux的, 提供有ERP,OA,Web,报表等等各种服务,往往需要远程登录到服务器上去做运维,但如果给root或者administrator权限,很容易出现不知道谁操作了的问题.如果不同人设置不同账号,又账号过多,权限不足等等其他问题…

5 个适用于 Windows 10 和 11 的最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式&#xff0c;但是此类文件存在一些限制&#xff0c;导致难以修改或编辑。因此&#xff0c;您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器&#xff0c;每种转换器提供的功能略有不同。本…

移远通信亮相AWE 2024,以科技力量推动智能家居产业加速发展

科技的飞速发展&#xff0c;为我们的生活带来了诸多便利&#xff0c;从传统的家电产品到智能化的家居设备&#xff0c;我们的居家生活正朝着更智能、更便捷的方向变革。 3月14日&#xff0c;中国家电及消费电子博览会&#xff08;Appliance&electronics World Expo&#xf…

恒创科技:什么是BGP线路服务器?BGP机房的优点是什么?

在当今的互联网架构中&#xff0c;BGP(边界网关协议)线路服务器和BGP机房扮演着至关重要的角色。BGP作为一种用于在自治系统(AS)之间交换路由信息的路径向量协议&#xff0c;它确保了互联网上的数据能够高效、准确地从一个地方传输到另一个地方。那么&#xff0c;究竟什么是BGP…

【Web】记录CISCN2023国赛初赛DeserBug题目复现

目录 前言 分析 step0 step1 step2 EXP 总结 前言 Hessian的链子审得有点疲劳&#xff0c;不如做做题吧&#xff0c;挑了国赛入手&#xff0c;整体做下来感觉十分丝滑&水到渠成&#xff0c;自然&通透。 仅仅是记录一下菜鸡做题的感受&#xff0c;不会往深入了…

闪电网络协议设计思想剖析

1. 引言 闪电网络可能是比特币之上部署的最受期待的技术创新。闪电网络&#xff0c;为由 Joseph Poon 和 Tadge Dryja 于2015年首次提出的支付层&#xff0c;承诺支持&#xff1a; 用户之间几乎无限数量的链下交易&#xff0c;几乎免费&#xff0c;同时利用比特币提供的安全性…

【CKA模拟题】查询消耗CPU最多的Pod

题干 For this question, please set this context (In exam, diff cluster name) 对于此问题&#xff0c;请设置此上下文&#xff08;在考试中&#xff0c;diff 集群名称&#xff09; kubectl config use-context kubernetes-adminkubernetesFind the pod that consumes the …

Centos7安装ffmpeg

Centos7安装ffmpeg 用到的包压缩并安装 用到的包 压缩并安装 tar xvJf ffmpeg-5.0.1.tar.xz yum install -y gcctar -zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make && make install yasm --versionyum install -y bzip2tar jxvf nasm-2.14.02.tar.bz2 cd n…

体验OceanBase OBD V2.5.0 组件内扩容和组件变更

背景 OBD 是OceanBase的命令行部署工具&#xff0c;在 obd V2.5.0 版本之前&#xff0c;其主要功能主要是部署各类组件&#xff0c;例如 oceanbase-ce,obproxy-ce,obagent 等。然而&#xff0c;它并不支持组件的变更操作以及组件内部的扩缩容调整。具体来说&#xff1a; 1、若…

java操作HBase

创建一个学生信息表&#xff0c;用来存储学生的姓名&#xff08;姓名作为行键&#xff0c;且假设姓名不会重复&#xff09;以及考试成绩&#xff0c;其中考试成绩&#xff08;score&#xff09;是一个列族&#xff0c;存储了各个科目的考试成绩。然后向student中添加数据 1、HB…

MySQL-索引事务

文章目录 前言一、 索引1.1 概念1.2 作用1.3 使用场景1.4 使用1.5 索引的底层数据结构1.5.1 用来查询的数据结构1.5.2 B树1.5.3 B树 二、事务2.1 为什么使用事务2.2 事务的概念2.3 事务的性质&#xff08;ACID&#xff09;2.4 事务的使用 前言 在这里将最近学习的MySQL中索引及…