二,控件学习--11.QWidget~QLineEdit(单行输入文本框)

学习计划

在这里插入图片描述

可用信号

在这里插入图片描述

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys


# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("文本边框边距设定测试")
window.resize(500, 500)

le = QLineEdit(window)
le.move(100, 100)
le.resize(300, 300)

#用户编辑的时候两个信号返回的值一样
#使用代码对内容进行编辑时,只有内容变化的信号执行
le.textEdited.connect(lambda val: print("文本框编辑的时候", val))
le.textChanged.connect(lambda val: print("文本框内容发生改变", val))

#回车被按下时触发
le.returnPressed.connect(lambda :print("回车键被按下"))

#结束编辑时触发
le.editingFinished.connect(lambda :print("结束编辑"))

#光标位置发生变化时触发(用得少),显示老光标和新光标位置
le.cursorPositionChanged.connect(lambda old_Pos, new_Pos: print(old_Pos, new_Pos))
#选中内容时触发(用得少)
le.selectionChanged.connect(lambda : print("选中文本发生改变", le.selectedText()))

# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

功能作用

1.控件创建

在这里插入图片描述

应用场景

在这里插入图片描述

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys




# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()

le_a = QLineEdit(window)
le_a.move(100, 200)

le_b = QLineEdit("文本框",window)
le_b.move(100, 300)


# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

2.文本的设置和获取

在这里插入图片描述

应用场景

在这里插入图片描述

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys


# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("QLineEdit功能测试")
window.resize(500, 500)

le_a = QLineEdit(window)
le_a.move(100, 200)

le_b = QLineEdit(window)
le_b.move(100, 300)

copy_btn = QPushButton(window)
copy_btn.setText("复制")
copy_btn.move(100, 400)

def copy_cao():
    # 1. 获取文本框a, 真实内容
    content = le_a.text()

    # 2. 把上面获取到的内容, 设置到文本框B里面
      #方法1
    le_b.setText(content)
      #方法2
    le_b.setText("")#清空
    le_b.insert(content)

copy_btn.clicked.connect(copy_cao)

# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

3.输出模式(主要就是密码密文操作)

在这里插入图片描述

应用场景

  • api测试
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys

# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("QLineEdit功能测试")
window.resize(500, 500)

le_b = QLineEdit(window)
le_b.move(100, 300)
#设置输出模式
#    NoEcho = 1 不输出,但是确实输入了
#    Normal = 0 正常输出
#    Password = 2 密文形式
#    PasswordEchoOnEdit = 3 编辑时明文,结束后密文
le_b.setEchoMode(QLineEdit.PasswordEchoOnEdit)
print("le_b的输出模式为:",le_b.echoMode())

copy_btn = QPushButton(window)
copy_btn.setText("输出")
copy_btn.move(100, 400)

def print_cao():
    print("真实文本:",le_b.text())
    print("用户看到的文本:",le_b.displayText())

copy_btn.clicked.connect(print_cao)

# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
  • 案例
    在这里插入图片描述
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys


class AccountTool:
        ACCOUNT_ERROR = 1
        PWD_ERROR = 2
        SUCCESS = 3
        def check_login(account,pwd):
                if account != "sz":
                        return AccountTool.ACCOUNT_ERROR
                if pwd != "itlike":
                        return AccountTool.PWD_ERROR
                return AccountTool.SUCCESS



class Window(QWidget):
        def __init__(self):
                super().__init__()
                self.setWindowTitle("登录案例学习")
                self.resize(500,500)
                #设置窗口最小尺寸
                self.setMinimumSize(350,350)
                self.setup_ui()

        def setup_ui(self):
                #添加三个控件
                self.account_le = QLineEdit(self)
                self.pwd_le = QLineEdit(self)
                self.pwd_le.setEchoMode(QLineEdit.Password)
                self.login_btn = QPushButton(self)
                self.login_btn.setText("登   录")
                self.login_btn.clicked.connect(self.login_cao)

                #占位文本提示
                self.account_le.setPlaceholderText("请输入账号")
                self.pwd_le.setPlaceholderText("请输入密码")

                #设置密码文本框显示清空按钮
                self.pwd_le.setClearButtonEnabled(True)

                #添加自定义行为操作(明文和密文的切换)
                action = QAction(self.pwd_le)
                action.setIcon(QIcon("close.png"))
                def change():
                        #判断当前文本输出状态,方便进行转换操作
                        if self.pwd_le.echoMode() == QLineEdit.Normal:
                                self.pwd_le.setEchoMode(QLineEdit.Password)
                                #切换小眼睛为关闭图标
                                action.setIcon(QIcon("close.png"))
                        else:
                                self.pwd_le.setEchoMode(QLineEdit.Normal)
                                #切换小眼睛为打开图标
                                action.setIcon(QIcon("open.png"))
                action.triggered.connect(change)
                #设置图标设在尾部
                self.pwd_le.addAction(action,QLineEdit.TrailingPosition)

                #设置自动补全完成器
                completer = QCompleter(["sz","shunzi","wangzha"],self.account_le)
                self.account_le.setCompleter(completer)

        def login_cao(self):
                #获取账号和密码信息
                account = self.account_le.text()
                pwd = self.pwd_le.text()

                #***********验证业务分离方法**********
                state = AccountTool.check_login(account,pwd)
                if state == AccountTool.ACCOUNT_ERROR:
                        print("账号错误")
                        self.account_le.setText("")
                        self.pwd_le.setText("")
                        self.account_le.setFocus()
                        return None
                if state == AccountTool.PWD_ERROR:
                        print("密码错误")
                        self.pwd_le.setText("")
                        self.pwd_le.setFocus()
                        return None
                if state == AccountTool.SUCCESS:
                        print("登录成功")

                #*****本地验证方法***********
                # if account == "sz":
                #         if pwd == "itlike":
                #                 print("登录成功")
                #         else:
                #                 print("密码错误")
                #                 self.pwd_le.setText("")
                #                 #重新获取焦点在密码上
                #                 self.pwd_le.setFocus()
                # else:
                #         print("账号错误")
                #         self.account_le.setText("")
                #         self.pwd_le.setText("")
                #         #获取焦点在账号上
                #         self.account_le.setFocus()

        def resizeEvent(self,QResizeEvent):
                widget_w = 150
                widget_h = 40

                #调整控件尺寸
                self.account_le.resize(widget_w,widget_h)
                self.pwd_le.resize(widget_w,widget_h)
                self.login_btn.resize(widget_w,widget_h)

                #调整控件位置
                x = (self.width() - widget_w)/2
                self.account_le.move(x,self.height()/5)
                self.pwd_le.move(x,self.account_le.y() + widget_h+60)
                self.login_btn.move(x,self.pwd_le.y() + widget_h+60)



if __name__ == '__main__':
        import sys

        app = QApplication(sys.argv)

        window = Window()
        window.show()
        sys.exit(app.exec_())

4.占位提示字符串(3中有演示)

在这里插入图片描述

应用场景

在这里插入图片描述

#占位文本提示
self.account_le.setPlaceholderText("请输入账号")
self.pwd_le.setPlaceholderText("请输入密码")

5.清空按钮显示(3中有演示)

在这里插入图片描述

应用场景

在这里插入图片描述

#设置密码文本框显示清空按钮
self.pwd_le.setClearButtonEnabled(True)

6.添加自定义操作行为(3中有演示)

在这里插入图片描述

应用场景

				#添加自定义行为操作(明文和密文的切换)
                action = QAction(self.pwd_le)
                action.setIcon(QIcon("close.png"))
                def change():
                        #判断当前文本输出状态,方便进行转换操作
                        if self.pwd_le.echoMode() == QLineEdit.Normal:
                                self.pwd_le.setEchoMode(QLineEdit.Password)
                                #切换小眼睛为关闭图标
                                action.setIcon(QIcon("close.png"))
                        else:
                                self.pwd_le.setEchoMode(QLineEdit.Normal)
                                #切换小眼睛为打开图标
                                action.setIcon(QIcon("open.png"))
                action.triggered.connect(change)
                #设置图标设在尾部
                self.pwd_le.addAction(action,QLineEdit.TrailingPosition)

7.自动补全(3中有演示)

在这里插入图片描述

应用场景

在这里插入图片描述

#设置自动补全完成器
completer = QCompleter(["sz","shunzi","wangzha"],self.account_le)
self.account_le.setCompleter(completer)

8.输入限制(验证器验证没整理,感觉太复杂)

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

应用场景

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys


# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("文本内容限制测试")
window.resize(500, 500)

le_a = QLineEdit(window)
le_a.move(100, 200)

le_b = QLineEdit(window)
le_b.move(100, 300)


copy_btn = QPushButton(window)
copy_btn.setText("复制")
copy_btn.move(100, 400)


# 最大长度限制
le_a.setMaxLength(3)
print(le_a.maxLength())

# #设置文本框只读
le_a.setText("王炸, 要不起!")
le_a.setReadOnly(True)


# le_b 设置掩码
# 总共输入5 位  左边 2(必须是大写字母) - 右边 2(必须是一个数字)
le_b.setInputMask(">AA-99;#")
#设置输入全部为数字,且按照固定的格式
le_b.setInputMask("9999-9999999;0")


# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

9.识别文本是否被修改

在这里插入图片描述

应用场景

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys


# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("文本是否修改测试")
window.resize(500, 500)

le_b = QLineEdit(window)
le_b.move(100, 300)


copy_btn = QPushButton(window)
copy_btn.setText("测试")
copy_btn.move(100, 400)

def copy_cao():

    #打印密码框内容是否是被修改状态
    print(le_b.isModified())
    le_b.setModified(False)

copy_btn.clicked.connect(copy_cao)

# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

10.光标控制(没整理,感觉没啥用,需要的时候再说吧)

在这里插入图片描述


11.文本边距设置

在这里插入图片描述

应用场景

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys


# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("文本边框边距设定测试")
window.resize(500, 500)

le = QLineEdit(window)
le.move(100, 100)
le.resize(300, 300)
#设定一个背景,便于观察
le.setStyleSheet("background-color: cyan;")

#QWidget方法,左边少了100,不是我们想要的效果
le.setContentsMargins(100, 0, 0, 0)

#setTextMargins(int left,int top,int right,int bottom)
le.setTextMargins(100, 0, 0, 0)

#设置对齐方式
le.setAlignment(Qt.AlignRight | Qt.AlignBottom)

# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

12.对齐方式(11中有演示)

在这里插入图片描述

应用场景

#按位或 | 代表相加的作用
le.setAlignment(Qt.AlignRight | Qt.AlignBottom)

13.常用编辑功能(大部分功能,文本框右击标准菜单都已实现)(不演示了,直接:控件.方法名() 这样使用即可)

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


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值