GUI编程--PyQt5--QLineEdit

news2024/11/23 20:24:21

文章目录

  • 键盘文本输入框
  • 文本占位符
  • 密码显示与隐藏
  • 自动补全
  • 输入限制
  • 掩码字符
  • 光标移动
  • 设置文本区域
  • 常用编辑功能

输入控件,用于捕获用户的信息

键盘文本输入框

QLineEdit, 单行,纯文本输入框

# 实例化 文本输入框
le = QLineEdit("默认值", window)
le.setText("重新设置输入框文本")
le.text()   # 获取输入框内的真实文本
le.insert("xxx") # 在光标前插入
le.displayText()  # 获取用户看到的内容  如密码****

 
 
文本的输出模式:
在这里插入图片描述

# 在输入内容时,输入框 不显示
# le.setEchoMode(QLineEdit.EchoMode.NoEcho)
#  在输入内容时,输入框 正常显示
# le.setEchoMode(QLineEdit.EchoMode.Normal)
# le.setEchoMode(QLineEdit.EchoMode.Password)
le.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit) # 编辑时显示文本,然后密码形式

# 获取输出模式
le.echoMode()
# 用来保护用户的隐私信息

纯文本的登录案例:

  1. 创建一个窗口,用户输入框、密码输入框、登录按钮,并且输入框和按钮水平居中显示;
  2. 点击“登录”,可以获取用户信息,并验证用户名、密码;
  3. 用户名错误,则清空 名称、密码且用户名输入框自动获取焦点!!
  4. 密码错误,则清空密码且重新获取焦点
  5. 登录成功,则打印成功
# __author__ = "laufing"
# class_based_qt
# laufing_qt

# __author__ = "laufing"

from PyQt5.QtGui import QIcon, QPixmap, QCursor, QKeyEvent
from PyQt5 import QtGui
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QDesktopWidget, QPushButton, QLineEdit, QCheckBox
import sys


# 封装一个工具类
class Util(object):
    USERNAME_ERROR = 1
    PASSWORD_ERROR = 2
    SUCCESS = 3

    @staticmethod
    def check_user(username, password):
        if username != "admin":
            return Util.USERNAME_ERROR

        if password != "admin":
            return Util.PASSWORD_ERROR

        return Util.SUCCESS


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        # 窗口标题
        self.setWindowTitle("laufing[*]")
        # 窗口图标
        pixmap = QPixmap("./imgs/dog.jpg").scaled(50, 50)
        icon = QIcon(pixmap)
        # icon.addPixmap(pixmap, QIcon.Normal, QIcon.Off)
        self.setWindowIcon(icon)

        # 设置宽高
        self.resize(500, 600)

        # 窗口居中
        desktop_geo = QDesktopWidget().geometry()
        width, height = desktop_geo.width(), desktop_geo.height()
        self.move(width / 2 - self.width() / 2, height / 2 - self.height() / 2)

        # 设置窗口的最小尺寸   最大尺寸
        self.setMinimumSize(300, 200)
        self.setMaximumSize(600, 500)

        # 设置文本
        # self.label = QLabel(self)
        # self.label.setText("测试按钮被按下")
        # self.label.resize(200, 200)
        # self.label.move(100, 100)

        self.set_ui()

    def set_ui(self):
        # 自定义控件的宽高
        self.le_width = 150
        self.le_height = 40

        # 实例化输入控件
        self.username = QLineEdit(self)
        self.username.resize(self.le_width, self.le_height)

        self.password = QLineEdit(self)
        self.password.resize(self.le_width, self.le_height)
        self.password.setEchoMode(QLineEdit.EchoMode.Password)

        self.login_btn = QPushButton("登录", self)
        self.login_btn.resize(self.le_width, self.le_height)

        # 登录按钮的信号与槽
        self.login_btn.pressed.connect(self.do_login)

    def do_login(self):
        # 获取用户名、密码
        username = self.username.text()
        password = self.password.text()

        result = Util.check_user(username, password)

        if result == Util.USERNAME_ERROR:
            self.username.setText("")
            self.password.setText("")
            self.username.setFocus()
            print("用户名错误")
            return

        if result == Util.PASSWORD_ERROR:
            # 清空
            self.password.setText("")
            # 获取焦点
            self.password.setFocus()
            print("密码错误")
            return

        if result == Util.SUCCESS:
            print("登录成功")



    # 窗口大小变化,子控件也变化
    def resizeEvent(self, a0: QtGui.QResizeEvent):
        # move 需要整数
        self.username.move(self.width() // 2 - self.le_width // 2, self.height() // 4)
        self.password.move(self.width() // 2 - self.le_width // 2, self.username.y() + self.le_height + 60)
        self.login_btn.move(self.width() // 2 - self.le_width // 2, self.password.y() + self.le_height + 60)


if __name__ == '__main__':
    import time
    # 窗口应用程序
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    status_code = app.exec_()
    sys.exit(status_code)

 
 

文本占位符

提示用户输入信息
le.setPlaceholderText(“请输入用户名:”)
le.setClearButtonEnable(True) # 清空按钮
在这里插入图片描述

密码显示与隐藏

# 添加action 动作
# 添加action
action = QAction(self.password)
action.setIcon(QIcon("./imgs/close.png"))
def switchPwd():
    if self.password.echoMode() == QLineEdit.EchoMode.Password:
        # 显示密码
        self.password.setEchoMode(QLineEdit.EchoMode.Normal)
        action.setIcon(QIcon("./imgs/open.png"))
    else:
        self.password.setEchoMode(QLineEdit.EchoMode.Password)
        action.setIcon(QIcon("./imgs/close.png"))

# action触发
action.triggered.connect(switchPwd)

# 密码控件  添加action  并指定位置
self.password.addAction(action, QLineEdit.ActionPosition.TrailingPosition)

 

自动补全

from PyQt5.QtWidgets import QCompleter

# 设置用户名的自动补全
completer = QCompleter(["laufing", "tom", "jack"], self.username)
self.username.setCompleter(completer)

输入限制

在这里插入图片描述

  1. setMaxLength(3) 输入字符的个数
  2. setReadOnly(True) 用户无法输入,可以通过命令setText(“xxxx”)
  3. QValidator 抽象类,必须定义子类
    在这里插入图片描述
    验证用户名案例:
    在这里插入图片描述
# 自定义验证器类
class NameValidtor(QValidator):
    # 1. 用户输入的值 立即传给验证器的validate方法   !!输入值 即传给验证器验证,此时输入框还看不到!!
    def validate(self, a0: str, a1: int):
        # a0 输入的文本
        # a1 光标位置
        print("验证的值:", a0)
        print("光标位置:", a1)

        # 2.判断逻辑  大写字母开头 包含字母、数字、下划线,长度为5-12
        if re.findall("[A-Z]\w*", a0):
            # 验证成功,将返回值再次传入输入框
            self.errorLabel.setText("验证成功") # 设置文本后
            self.errorLabel.adjustSize()   # 自适应大小
            self.errorLabel.setStyleSheet("color: green")
            return QValidator.Acceptable, a0, a1  # 有效 则传给 输入框  展示

        # 空值
        elif not a0:
            print("暂时不验证")
            # 暂时不验证,失去焦点时调用fixup  做一次修复(必须给有效值)
            return QValidator.Intermediate, a0, a1

        else:
            # 验证失败, 不再传给输入框
            print("验证失败....")
            self.errorLabel.setText("验证失败")
            self.errorLabel.adjustSize()
            self.errorLabel.setStyleSheet("color: red;")
            return QValidator.Invalid, a0, a1   # 无效 则无法传入输入框,所以不会发生变化

    # 不验证时,失去焦点触发一次修复
    def fixup(self, a0: str):
        # a0  输入框的值
        print("正在修改....", a0)
        return "Lauf"  # 修正后的值 传给输入框, 再次触发一次验证



# 用户名 输入框  设置验证器
nameValidator = NameValidator()
nameValidator.errorLabel = QLabel(self)
nameValidator.errorLabel.move(self.width()//2 - self.le_width//2, 80)
self.username.setValidator(nameValidator) 

另外,还有几个系统自带的验证器,如QIntValidator…

 
 

掩码字符

xxx-xxx; x

# 设置掩码  大写字母  数字  #占位符
self.username.setInputMask(">AAA-999; #")

在这里插入图片描述

在这里插入图片描述

光标移动

在这里插入图片描述
在这里插入图片描述

设置文本区域

# 设置文本的边距
le.setTextMargins(10020000)  # 左 上 右 下
le.getTextMargins()

# 设置文本输入区域的边距
le.setContentsMargins()

# 文本对齐
le.setAlignment(Qt.AlignmentFlag.AlignRight)

在这里插入图片描述
 

常用编辑功能

在这里插入图片描述

le.cursorBackword(True, 3) # 选中三个字符  鼠标选中则不行
le.backspace()  # 删除

le.del_()
le.clear()

# 复制
le.cursorBackword(True, 3) # 向左选三个字符
le.copy()  # 复制到系统剪贴板
le.setCursorPosition(3)
le.paste()
le.setFocus() # 获取焦点

le.undo()
le.redo()
le.setDragEnabled(True) # 文本可以拖拽

在这里插入图片描述
在这里插入图片描述

textEdited,用户编辑文本时,发送信号

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

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

相关文章

Material Design之CoordinatorLayout 与AppbarLayout与CollapsingToolbarLayout

Material Design 之 CoordinatorLayout 第一次接触CoordinatorLayout 你可能有这些疑问,CoordinatorLayout 到底是个什么玩意儿呢?它到底能帮我们做什么?我们要了解它,肯定是先看官方文档了。文档的第一句话就非常醒目&#xff1a…

高职网络系统管理比赛实例

同一交换机不同端口配置不同vlan,实现同一交换机内不同业务部门隔离。 在路由器中配置斜面的内容 1 输入enableRuijie>enable 2 第一次使用该交换机时,需要设置密码,然后再次确认密码 Please Set the password:*** Please check the pass…

掌握这10个Pandas函数,助你彻底了解数据集

10个帮助你完全理解数据集的Pandas 函数 长按关注《Python学研大本营》,加入读者群,分享更多精彩 扫码关注《Python学研大本营》,加入读者群,分享更多精彩 Pandas是用于探索性数据分析 (EDA)的最佳 Python 模块。 许多初级数据科…

如何在liunx下实现一个简单的程序?

目录:安装nano写代码保存退出查看文件内容生成可执行程序控制台输出你的代码博后小知识(gcc -g -o -c分别是什么意思?)安装nano [rootVM-8-11-centos ~]# yum install -y nano 写代码 [rootVM-8-11-centos ~]# nano no_die.c 保存…

向量加权平均算法附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

【C++学习第八讲】简单变量(二)

目录:简单变量(二)一、无符号类型二、选择整型类型三、 char类型:字符和小整数一、无符号类型 前面介绍的4种整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。 例如,如果…

软件测试---

一 : 主要内容 二 : 什么是软件测试 在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程.上面这是官话 . 在我们日常生活中 , 就有许多测试的行为 , 比如地铁站的金属检测仪 , 用于检测旅客…

深度学习——损失函数推导过程(三个方面诠释损失函数的由来意义)

三个维度诠释损失函数 我们在学习机器学习的过程中,通常利用损失函数来衡量模型所做出的预测离真实值之间的偏离程度。 损失函数大致分为3类方法 最小二乘法极大似然估计法交叉熵 1.最小二乘法 这个方法是最显而易懂的,假设x是真实值,y是…

【PyTorch】Neural Network 神经网络

文章目录四、Neural Network 神经网络1、Containers - Module2、Convolution Layers - functional.conv2d2.1 stride2.2 padding3、Convolution Layers - Conv2d3.1 in_channels out_channels4、Pooling layers - MaxPool2d4.1 ceil_mode4.2 TensorBoard5、Non-linear Activati…

Eclipse启动SpringBoot无法读取application.properties或者application.yml文件内容

原因 eclipse配置源代码excludes过滤掉了application.properties或application.yml造成的 解决 2.1 右键项目,选Build Path --> Configure Build Path 2.2 找到 Source --> resources --> Excluded,点击Edit 2.3 点击Edit 2.4 将**改成Non…

【Java八股文总结】之多线程

文章目录Java多线程一、线程1、什么是线程?什么是进程?二者的区别1、给线程起别名的3种方式2、this关键字3、守护线程和用户线程4、并发和并行的区别?5、线程间通信的方式2、synchronized关键字补充:snchronized底层实现原理3、vo…

如何用FMEA方法排除架构隐患

FMEA介绍 定义 FMEA(Failure mode and effects analysis,故障模式与影响分析)又称为失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等,本文采用“故障模式与影响分析” 历史 FMEA 最早是在美国军方开始应用的&a…

2022-11-20-使用BeatuifulSoup进行页面内容的获取

一、什么是DOM树 DOM树是一种结构,树是由DOM元素和属性节点组成的,DOM的本质是把html结构化成js可识别的树模型,有了树模型,就有了层级结构,层级结构是指的是元素和元素之间的关系父子、兄弟。 实例: 标题…

Java语法之多态

上次给大家分享了Java的继承,今天小编给大家分享面向对象三大特性的第三大特性,也就是多态,fighting~~ 目录 🎈一. 多态 🎈1.1多态的概念 🎈1.2多态的实现条件 🎈1.3向上转型和向下转型 &a…

HDFS 的 shell操作

文章目录前言一、基本语法二、创建目录三、上传moveFromLocal-copyFromLocal-put-appendToFile四、下载-copyToLocal-get五、HDFS直接操作-ls-cat-chgrp、-chmod、-chown-mkdir-cp-mv-tail-rmrm -r-du-setrep前言 HDFS的shell操作很多跟linux的shell语法是比较相近&#xff0c…

Python学习基础笔记八——字典

字典: 1)字典中的元素是通过键来存储的,而不是通过偏移来存取的。字典是唯一内置的映射类型(键映射到值的对象) 2)是无序集合; 3)字典是作为散列表(支持快速检索的数据…

html网页设计期末大作业_网页设计平时作业(诗词网页 4页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | 等网站的设计与制作 | HTML期末大学生网页设计作业,…

39-Docker-部署Jenkins

部署Jenkins前言部署Jenkins1. 下载镜像2. 创建挂载目录3. 创建并启动Jenkins容器使用Jenkins1. 访问Jenkins2. 输入密码3. 配置Jenkins前言 本篇来学习使用Jenkins镜像部署Jenkins 部署Jenkins 1. 下载镜像 docker pull jenkins/jenkins2. 创建挂载目录 # 创建挂载目录 m…

Oracle PrimaveraUnifier成本管理器(Cost Manager)简要介绍

目录 一:标准成本管理器(Standad Cost Manager) 二:通用成本管理器(General Cost Manager) 成本管理器(Cost Manager)是Unifier管理和聚焦汇总成本的主要组成部分,财务最关系的Cost Sheet 成本表将通过 成本管理器制定模板 在Oracle Pirma…

第三章:高精度算法(加、减、乘、除)

高精度算法高精度的整体思路:一、加法1、思路:2、模板:(1)C版:(2)C语言版:二、减法1、思路:2、模板:CC三、乘法1、思路:2、模板&#…