GUI编程--PyQt5--QLineEdit


输入控件,用于捕获用户的信息
默认颜色为#a0a0a0

键盘文本输入框

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,用户编辑文本时,发送信号

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
PyQt5Python语言中一个非常流行的GUI编程工具包,其中包含了许多常用的控件方法。下面是一些常见控件的方法大全: 1. QLabel控件方法: - setText():设置标签文本内容。 - setAlignment():设置文本的对齐方式。 - setPixmap():设置标签的图片。 2. QPushButton控件方法: - setText():设置按钮上的文本。 - setIcon():设置按钮上的图标。 - setShortcut():设置按钮的快捷键。 3. QRadioButton和QCheckBox控件方法: - setText():设置选项的文本。 - isChecked():判断是否被选中。 - setChecked():设置是否选中。 4. QComboBox控件方法: - addItem():在下拉列表中添加项。 - setCurrentIndex():设置当前选中的项。 - currentText():获取当前选中的文本。 5. QLineEdit控件方法: - setText():设置文本内容。 - text():获取文本内容。 - setValidator():设置输入的验证器。 6. QProgressBar控件方法: - setRange():设置进度条的范围。 - setValue():设置进度条的当前值。 - reset():重置进度条。 7. QSlider和QSpinBox控件方法: - setValue():设置当前的值。 - value():获取当前的值。 - setRange():设置值的范围。 8. QTextEdit和QPlainTextEdit控件方法: - setText():设置文本内容。 - toPlainText():获取文本内容。 - setReadOnly():设置只读模式。 这只是一些常见的控件方法,PyQt5还有很多其他控件和方法。希望这些方法能帮助您更好地使用PyQt5进行GUI编程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值