PyQt5学习笔记——QLineEdit详解

QLineEdit详解

一、描述

是一个单行文本编辑器,允许用户输入和编辑单行纯文本,自带一组编辑功能:撤销,重做,剪切,粘贴,拖放

二、继承

继承自QWidget

三、功能作用

(1)控件的创建
在这里插入图片描述

(2)文本的设置和获取
在这里插入图片描述

import sys
from PyQt5.Qt import *


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window =  QWidget()
    window.setWindowTitle("QCommandLinkButton使用")
    window.resize(500,500)


    l1 = QLineEdit(window)
    l1.move(100,200)
    l2 = QLineEdit(window)
    l2.move(100,300)

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

    def copy_cao():

        # 首先获取文本框内容
        content = l1.text()

        # 设置到第二个文本框
        l2.setText(content)


    copy_btn.clicked.connect(copy_cao)


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

(3)输出模式
在这里插入图片描述

测试代码1:

import sys
from PyQt5.Qt import *


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window =  QWidget()
    window.setWindowTitle("QCommandLinkButton使用")
    window.resize(500,500)


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

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

    # 不输出   第二个文字框不展示任何文字  但是他仍然获取到文字
    l2.setEchoMode(QLineEdit.Password)

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


    def copy_cao():
        # 首先获取文本框内容
        content = l1.text()

        # 设置到第二个文本框
        l2.setText(content)


    copy_btn.clicked.connect(copy_cao)



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

测试代码2:

import sys
from PyQt5.Qt import *



class AccountTool:
    ACCOUNT_ERROR = 1
    PWD_ERROR = 2
    SUCCESS = 3
    
    # 封装成静态方法
    @staticmethod
    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)

        # 将三个控件直接放到init初始化方法中
        self.account = QLineEdit(self)
        self.pwd = QLineEdit(self)
        self.login = QPushButton(self)

        self.setMinimumSize(400,400)  # 设置最小尺寸
        self.setup_ui()

    def setup_ui(self):

        # 将账号控件设置成明文

        # 将密码控件设置成密文
        self.pwd.setEchoMode(QLineEdit.Password)

        # 点击按钮  连接槽函数
        # 槽函数 直接打印账号和密码信息
        self.login.clicked.connect(self.login_cao)

        self.login.setText("登录")

    def login_cao(self):
        # print("xxx",self)  # 打印窗口对象   并非是信号传递的参数

        # 获取账号和密码信息
        account = self.account.text()
        pwd = self.pwd.text()
        # print(account,pwd)

        # 返回一个状态
        status = AccountTool.check_login(account,pwd)
        if status == AccountTool.ACCOUNT_ERROR:
            print("账号错误!")
            self.account.setText("")  # 如果账号错误 直接清空
            self.pwd.setText("")
            self.account.setFocus()  # 清空之后还要对准焦点
            return None

        # 走到这里说明账号一定是正确的
        if status == AccountTool.PWD_ERROR:
            print("密码错误!")
            self.pwd.setText("")
            self.setFocus()   # 清空密码  重新对准焦点
            return None

        # 走到这里 说明账号和密码一定正确
        if status == AccountTool.SUCCESS:
            print("登录成功")






        # if account == "sz":
        #     if pwd == "itlike":
        #         print("登录成功")
        #
        #     else:
        #         print("密码错误")
        #         self.pwd.setText("")
        #
        #
        #         self.pwd.setFocus()  # 有问题的话  再次获取焦点
        # else:
        #     print("账号错误")
        #     # 如果密码错误 直接清空
        #     self.account.setText("")
        #     self.pwd.setText("")



    # 当改变窗口大小,仍然是几个控件居中显示  resizeEvent事件
    def resizeEvent(self,evt):
        widget_w = 150
        widget_h = 40
        margin = 60

        # 将三个控件设置在窗口的中间
        self.account.resize(widget_w,widget_h)
        self.pwd.resize(widget_w,widget_h)
        self.login.resize(widget_w,widget_h)

        x = (self.width() - widget_w) / 2  # 窗口的宽度 减去控件的宽度

        self.account.move(x,self.height() / 5)
        self.pwd.move(x,self.account.y() + widget_h + margin)
        self.login.move(x,self.pwd.y() + widget_h + margin)


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window = Window()

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

(4)占位符提示字符串
在这里插入图片描述

import sys
from PyQt5.Qt import *



class AccountTool:
    ACCOUNT_ERROR = 1
    PWD_ERROR = 2
    SUCCESS = 3

    # 封装成静态方法
    @staticmethod
    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)

        # 将三个控件直接放到init初始化方法中
        self.account = QLineEdit(self)
        self.pwd = QLineEdit(self)
        self.login = QPushButton(self)

        self.setMinimumSize(400,400)  # 设置最小尺寸
        self.setup_ui()

    def setup_ui(self):

        # 将账号控件设置成明文

        # 将密码控件设置成密文
        self.pwd.setEchoMode(QLineEdit.Password)


        # 占位文本的提示
        self.account.setPlaceholderText("请输入账号")


        # 点击按钮  连接槽函数
        # 槽函数 直接打印账号和密码信息
        self.login.clicked.connect(self.login_cao)

        self.login.setText("登录")

    def login_cao(self):
        # print("xxx",self)  # 打印窗口对象   并非是信号传递的参数

        # 获取账号和密码信息
        account = self.account.text()
        pwd = self.pwd.text()
        # print(account,pwd)

        # 返回一个状态
        status = AccountTool.check_login(account,pwd)
        if status == AccountTool.ACCOUNT_ERROR:
            print("账号错误!")
            self.account.setText("")  # 如果账号错误 直接清空
            self.pwd.setText("")
            self.account.setFocus()  # 清空之后还要对准焦点
            return None

        # 走到这里说明账号一定是正确的
        if status == AccountTool.PWD_ERROR:
            print("密码错误!")
            self.pwd.setText("")
            self.setFocus()   # 清空密码  重新对准焦点
            return None

        # 走到这里 说明账号和密码一定正确
        if status == AccountTool.SUCCESS:
            print("登录成功")






        # if account == "sz":
        #     if pwd == "itlike":
        #         print("登录成功")
        #
        #     else:
        #         print("密码错误")
        #         self.pwd.setText("")
        #
        #
        #         self.pwd.setFocus()  # 有问题的话  再次获取焦点
        # else:
        #     print("账号错误")
        #     # 如果密码错误 直接清空
        #     self.account.setText("")
        #     self.pwd.setText("")



    # 当改变窗口大小,仍然是几个控件居中显示  resizeEvent事件
    def resizeEvent(self,evt):
        widget_w = 150
        widget_h = 40
        margin = 60

        # 将三个控件设置在窗口的中间
        self.account.resize(widget_w,widget_h)
        self.pwd.resize(widget_w,widget_h)
        self.login.resize(widget_w,widget_h)

        x = (self.width() - widget_w) / 2  # 窗口的宽度 减去控件的宽度

        self.account.move(x,self.height() / 5)
        self.pwd.move(x,self.account.y() + widget_h + margin)
        self.login.move(x,self.pwd.y() + widget_h + margin)


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window = Window()

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

(5)清空按钮显示
在这里插入图片描述

测试代码:

import sys
from PyQt5.Qt import *



class AccountTool:
    ACCOUNT_ERROR = 1
    PWD_ERROR = 2
    SUCCESS = 3

    # 封装成静态方法
    @staticmethod
    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)

        # 将三个控件直接放到init初始化方法中
        self.account = QLineEdit(self)
        self.pwd = QLineEdit(self)
        self.login = QPushButton(self)

        self.setMinimumSize(400,400)  # 设置最小尺寸
        self.setup_ui()

    def setup_ui(self):

        # 将账号控件设置成明文

        # 将密码控件设置成密文
        self.pwd.setEchoMode(QLineEdit.Password)

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

        # 设置密码清空按钮  密码框右边有一个x 清空
        self.pwd.setClearButtonEnabled(True)


        # 点击按钮  连接槽函数
        # 槽函数 直接打印账号和密码信息
        self.login.clicked.connect(self.login_cao)

        self.login.setText("登录")

    def login_cao(self):
        # print("xxx",self)  # 打印窗口对象   并非是信号传递的参数

        # 获取账号和密码信息
        account = self.account.text()
        pwd = self.pwd.text()
        # print(account,pwd)

        # 返回一个状态
        status = AccountTool.check_login(account,pwd)
        if status == AccountTool.ACCOUNT_ERROR:
            print("账号错误!")
            self.account.setText("")  # 如果账号错误 直接清空
            self.pwd.setText("")
            self.account.setFocus()  # 清空之后还要对准焦点
            return None

        # 走到这里说明账号一定是正确的
        if status == AccountTool.PWD_ERROR:
            print("密码错误!")
            self.pwd.setText("")
            self.setFocus()   # 清空密码  重新对准焦点
            return None

        # 走到这里 说明账号和密码一定正确
        if status == AccountTool.SUCCESS:
            print("登录成功")
            
        # if account == "sz":
        #     if pwd == "itlike":
        #         print("登录成功")
        #
        #     else:
        #         print("密码错误")
        #         self.pwd.setText("")
        #
        #
        #         self.pwd.setFocus()  # 有问题的话  再次获取焦点
        # else:
        #     print("账号错误")
        #     # 如果密码错误 直接清空
        #     self.account.setText("")
        #     self.pwd.setText("")



    # 当改变窗口大小,仍然是几个控件居中显示  resizeEvent事件
    def resizeEvent(self,evt):
        widget_w = 150
        widget_h = 40
        margin = 60

        # 将三个控件设置在窗口的中间
        self.account.resize(widget_w,widget_h)
        self.pwd.resize(widget_w,widget_h)
        self.login.resize(widget_w,widget_h)

        x = (self.width() - widget_w) / 2  # 窗口的宽度 减去控件的宽度

        self.account.move(x,self.height() / 5)
        self.pwd.move(x,self.account.y() + widget_h + margin)
        self.login.move(x,self.pwd.y() + widget_h + margin)


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window = Window()

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

(6)添加操作行为
在这里插入图片描述

import sys
from PyQt5.Qt import *



class AccountTool:
    ACCOUNT_ERROR = 1
    PWD_ERROR = 2
    SUCCESS = 3

    # 封装成静态方法
    @staticmethod
    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)

        # 将三个控件直接放到init初始化方法中
        self.account = QLineEdit(self)
        self.pwd = QLineEdit(self)
        self.login = QPushButton(self)

        self.setMinimumSize(400,400)  # 设置最小尺寸
        self.setup_ui()

    def setup_ui(self):

        # 将账号控件设置成明文

        # 将密码控件设置成密文
        self.pwd.setEchoMode(QLineEdit.Password)

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

        # 设置密码清空按钮  密码框右边有一个x 清空
        self.pwd.setClearButtonEnabled(True)



        # 添加自定义行为操作(明文与密文的切换)
        action = QAction(self.pwd)
        action.setIcon(QIcon("img.png"))


        def change():
            # print("改变明文和密文")

            # 默认情况下是密文  但是点击图标之后  变成明文  点击图标 改成密文
            if self.pwd.echoMode() == QLineEdit.Normal:
                self.pwd.setEchoMode(QLineEdit.Password)
                action.setIcon(QIcon("close.png"))

            else:
                self.pwd.setEchoMode(QLineEdit.Normal)
                action.setIcon(QIcon("img_1.png"))


        action.triggered.connect(change)

        self.pwd.addAction(action,QLineEdit.TrailingPosition)   # 放在后面



        # 点击按钮  连接槽函数
        # 槽函数 直接打印账号和密码信息
        self.login.clicked.connect(self.login_cao)

        self.login.setText("登录")

    def login_cao(self):
        # print("xxx",self)  # 打印窗口对象   并非是信号传递的参数

        # 获取账号和密码信息
        account = self.account.text()
        pwd = self.pwd.text()
        # print(account,pwd)

        # 返回一个状态
        status = AccountTool.check_login(account,pwd)
        if status == AccountTool.ACCOUNT_ERROR:
            print("账号错误!")
            self.account.setText("")  # 如果账号错误 直接清空
            self.pwd.setText("")
            self.account.setFocus()  # 清空之后还要对准焦点
            return None

        # 走到这里说明账号一定是正确的
        if status == AccountTool.PWD_ERROR:
            print("密码错误!")
            self.pwd.setText("")
            self.setFocus()   # 清空密码  重新对准焦点
            return None

        # 走到这里 说明账号和密码一定正确
        if status == AccountTool.SUCCESS:
            print("登录成功")






        # if account == "sz":
        #     if pwd == "itlike":
        #         print("登录成功")
        #
        #     else:
        #         print("密码错误")
        #         self.pwd.setText("")
        #
        #
        #         self.pwd.setFocus()  # 有问题的话  再次获取焦点
        # else:
        #     print("账号错误")
        #     # 如果密码错误 直接清空
        #     self.account.setText("")
        #     self.pwd.setText("")



    # 当改变窗口大小,仍然是几个控件居中显示  resizeEvent事件
    def resizeEvent(self,evt):
        widget_w = 150
        widget_h = 40
        margin = 60

        # 将三个控件设置在窗口的中间
        self.account.resize(widget_w,widget_h)
        self.pwd.resize(widget_w,widget_h)
        self.login.resize(widget_w,widget_h)

        x = (self.width() - widget_w) / 2  # 窗口的宽度 减去控件的宽度

        self.account.move(x,self.height() / 5)
        self.pwd.move(x,self.account.y() + widget_h + margin)
        self.login.move(x,self.pwd.y() + widget_h + margin)


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window = Window()

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

(7)自动补全
在这里插入图片描述

测试代码:

import sys
from PyQt5.Qt import *



class AccountTool:
    ACCOUNT_ERROR = 1
    PWD_ERROR = 2
    SUCCESS = 3

    # 封装成静态方法
    @staticmethod
    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)

        # 将三个控件直接放到init初始化方法中
        self.account = QLineEdit(self)
        self.pwd = QLineEdit(self)
        self.login = QPushButton(self)

        self.setMinimumSize(400,400)  # 设置最小尺寸
        self.setup_ui()

    def setup_ui(self):

        # 将账号控件设置成明文

        # 将密码控件设置成密文
        self.pwd.setEchoMode(QLineEdit.Password)

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

        # 设置密码清空按钮  密码框右边有一个x 清空
        self.pwd.setClearButtonEnabled(True)



        # 添加自定义行为操作(明文与密文的切换)
        action = QAction(self.pwd)
        action.setIcon(QIcon("img.png"))


        def change():
            # print("改变明文和密文")

            # 默认情况下是密文  但是点击图标之后  变成明文  点击图标 改成密文
            if self.pwd.echoMode() == QLineEdit.Normal:
                self.pwd.setEchoMode(QLineEdit.Password)
                action.setIcon(QIcon("close.png"))

            else:
                self.pwd.setEchoMode(QLineEdit.Normal)
                action.setIcon(QIcon("img_1.png"))


        action.triggered.connect(change)
        self.pwd.addAction(action,QLineEdit.TrailingPosition)   # 放在后面

        # 点击按钮  连接槽函数
        # 槽函数 直接打印账号和密码信息
        self.login.clicked.connect(self.login_cao)

        self.login.setText("登录")

        # 设置自动补全的功能  输入相关文本之后 他会自动提示
        completer = QCompleter(["Sz","shunzi","wangzha"],self.account)
        self.account.setCompleter(completer)  # 设置完成器

        





    def login_cao(self):
        # print("xxx",self)  # 打印窗口对象   并非是信号传递的参数

        # 获取账号和密码信息
        account = self.account.text()
        pwd = self.pwd.text()
        # print(account,pwd)

        # 返回一个状态
        status = AccountTool.check_login(account,pwd)
        if status == AccountTool.ACCOUNT_ERROR:
            print("账号错误!")
            self.account.setText("")  # 如果账号错误 直接清空
            self.pwd.setText("")
            self.account.setFocus()  # 清空之后还要对准焦点
            return None

        # 走到这里说明账号一定是正确的
        if status == AccountTool.PWD_ERROR:
            print("密码错误!")
            self.pwd.setText("")
            self.setFocus()   # 清空密码  重新对准焦点
            return None

        # 走到这里 说明账号和密码一定正确
        if status == AccountTool.SUCCESS:
            print("登录成功")






        # if account == "sz":
        #     if pwd == "itlike":
        #         print("登录成功")
        #
        #     else:
        #         print("密码错误")
        #         self.pwd.setText("")
        #
        #
        #         self.pwd.setFocus()  # 有问题的话  再次获取焦点
        # else:
        #     print("账号错误")
        #     # 如果密码错误 直接清空
        #     self.account.setText("")
        #     self.pwd.setText("")



    # 当改变窗口大小,仍然是几个控件居中显示  resizeEvent事件
    def resizeEvent(self,evt):
        widget_w = 150
        widget_h = 40
        margin = 60

        # 将三个控件设置在窗口的中间
        self.account.resize(widget_w,widget_h)
        self.pwd.resize(widget_w,widget_h)
        self.login.resize(widget_w,widget_h)

        x = (self.width() - widget_w) / 2  # 窗口的宽度 减去控件的宽度

        self.account.move(x,self.height() / 5)
        self.pwd.move(x,self.account.y() + widget_h + margin)
        self.login.move(x,self.pwd.y() + widget_h + margin)


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window = Window()

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

(8)输入限制
在这里插入图片描述

关于验证器的补充说明:
在这里插入图片描述

from PyQt5.Qt import *
import sys

class AgeValidator(QValidator):

    # 传入两个参数: 输入字符串  光标位置
    def validate(self,input_str,pos_int):
        # print(input_str,pos_int)

        # 判断输入的文本是否在范围之内
        if 18 <= int(input_str) <= 180:
            # 第一个参数是验证通过
            return (QValidator.Acceptable, input_str, pos_int)

        elif 1 <= int(input_str) <= 17:
            # 第一个参数是中间值 没有判定对错
            return (QValidator.Intermediate, input_str, pos_int)
        else:
            # 判定输入错误
            return (QValidator.Invalid, input_str, pos_int)

    def  fixup(self,p_str):
        print("xxx",p_str)

        if int(p_str) < 18:
            return "18"

        return "180"



class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QLineEdit验证器的学习")
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        l1 = QLineEdit(self)
        l1.move(100,100)

        # 创建一个验证器
        validator = AgeValidator()  # 抽象类
        # 输入年龄:18 - 180
        l1.setValidator(validator)

        l2 = QLineEdit(self)
        l2.move(200,200)



if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()

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


(9)是否被编辑
在这里插入图片描述

import sys
from PyQt5.Qt import *


if __name__ == '__main__':

    app =QApplication(sys.argv)

    window =  QWidget()
    window.setWindowTitle("QCommandLinkButton使用")
    window.resize(500,500)

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

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

    # 不输出   第二个文字框不展示任何文字  但是他仍然获取到文字
    l2.setEchoMode(QLineEdit.Password)

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

    def copy_cao():
        # # 首先获取文本框内容
        # content = l1.text()
        # # 设置到第二个文本框
        # l2.setText(content)

        print(l2.isModified())  # 文本框是否被编辑
        l2.setModified(False)  # 将文本状态设置成未修改


    copy_btn.clicked.connect(copy_cao)

    # 设置限制输入的长度  3
    l1.setMaxLength(3)
    print(l1.maxLength())

    # 设置成只读模式
    # l1.setReadOnly(True)
    # l1.setValidator()




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

(10)光标控制
在这里插入图片描述

import sys
from PyQt5.Qt import *


if __name__ == '__main__':


    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle("光标功能测试")
    window.resize(500,500)

    l1 = QLineEdit(window)
    l1.move(100,100)



    btn = QPushButton(window)
    btn.setText("按钮")
    btn.move(100,200)

    def cursor_move():
        # l1.cursorBackward(True,2)  # 不带选中效果 向后移动两个字符
        # l1.cursorForward(True,3)  # 向前移动选中三个字符
        # l1.cursorWordBackward(True)  # 选中一个单词  按照空格进行区分

        # l1.home(True)  # 快速移动到行首
        # 移动之后 重新获取焦点

        l1.setCursorPosition(len(l1.text()) / 2)  # 设置光标位置

        print(l1.cursorPositionAt(QPoint(15, 5)))  # 打印指定位置的字符

        l1.setFocus()



    btn.clicked.connect(cursor_move)




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

(11)文本边距设置
在这里插入图片描述

import sys
from PyQt5.Qt import *


if __name__ == '__main__':


    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle("光标功能测试")
    window.resize(500,500)

    l1 = QLineEdit(window)
    l1.move(100,100)
    l1.resize(300,300)
    l1.setTextMargins(100,0,0,0)   # 设置文本边距
    l1.setStyleSheet("background-color:cyan;")

    btn = QPushButton(window)
    btn.setText("按钮")
    btn.move(50,50)

    def cursor_move():
        # l1.cursorBackward(True,2)  # 不带选中效果 向后移动两个字符
        # l1.cursorForward(True,3)  # 向前移动选中三个字符
        # l1.cursorWordBackward(True)  # 选中一个单词  按照空格进行区分

        # l1.home(True)  # 快速移动到行首
        # 移动之后 重新获取焦点

        l1.setCursorPosition(len(l1.text()) / 2)  # 设置光标位置

        print(l1.cursorPositionAt(QPoint(15, 5)))  # 打印指定位置的字符

        l1.setFocus()

    btn.clicked.connect(cursor_move)
    window.show()
    sys.exit(app.exec_())

(12)常用编辑功能
在这里插入图片描述

测试代码1:

import sys
from PyQt5.Qt import *


if __name__ == '__main__':


    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle("光标功能测试")
    window.resize(500,500)

    l1 = QLineEdit(window)
    l1.move(100,100)
    l1.resize(300,300)
    l1.setTextMargins(100,0,0,0)   # 设置文本边距
    l1.setStyleSheet("background-color:cyan;")

    # 将光标设置到右下角
    l1.setAlignment(Qt.AlignRight | Qt.AlignBottom)

    btn = QPushButton(window)
    btn.setText("按钮")
    btn.move(50,50)

    def cursor_move():
        # l1.cursorBackward(True,2)  # 不带选中效果 向后移动两个字符
        # l1.cursorForward(True,3)  # 向前移动选中三个字符
        # l1.cursorWordBackward(True)  # 选中一个单词  按照空格进行区分

        # l1.home(True)  # 快速移动到行首
        # 移动之后 重新获取焦点

        # l1.setCursorPosition(len(l1.text()) / 2)  # 设置光标位置
        # print(l1.cursorPositionAt(QPoint(15, 5)))  # 打印指定位置的字符
        # l1.setFocus()
        l1.cursorBackward(True,2)   # 选中两个字符   再去删除两个字符
        # l1.backspace()  # 删除光标左侧的一个字符
        # l1.del_() # 删除右侧字符
        # l1.clear()  # 清空效果
        
        l1.setFocus()  # 重新对准
        # 光标

    btn.clicked.connect(cursor_move)
    window.show()
    sys.exit(app.exec_())

测试代码2:

import sys
from PyQt5.Qt import *


if __name__ == '__main__':


    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle("光标功能测试")
    window.resize(500,500)

    l1 = QLineEdit(window)
    l1.move(100,100)
    l1.resize(300,300)
    l1.setTextMargins(100,0,0,0)   # 设置文本边距
    l1.setStyleSheet("background-color:cyan;")

    # 将光标设置到右下角
    l1.setAlignment(Qt.AlignRight | Qt.AlignBottom)

    btn = QPushButton(window)
    btn.setText("按钮")
    btn.move(50,50)

    def cursor_move():
        # l1.cursorBackward(True,2)  # 不带选中效果 向后移动两个字符
        # l1.cursorForward(True,3)  # 向前移动选中三个字符
        # l1.cursorWordBackward(True)  # 选中一个单词  按照空格进行区分

        # l1.home(True)  # 快速移动到行首
        # 移动之后 重新获取焦点

        # l1.setCursorPosition(len(l1.text()) / 2)  # 设置光标位置
        # print(l1.cursorPositionAt(QPoint(15, 5)))  # 打印指定位置的字符
        # l1.setFocus()
        l1.cursorBackward(True,3)   # 选中两个字符   再去删除两个字符
        # l1.backspace()  # 删除光标左侧的一个字符
        # l1.del_() # 删除右侧字符
        # l1.clear()  # 清空效果
        # l1.copy()  # 复制

        l1.cut()
        # 再把光标移动到行首
        l1.setCursorPosition(0)

        l1.paste() # 粘贴


        l1.setFocus()  # 重新对准
        # 光标



    btn.clicked.connect(cursor_move)




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

测试代码3:

import sys
from PyQt5.Qt import *


if __name__ == '__main__':


    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle("光标功能测试")
    window.resize(500,500)

    l1 = QLineEdit(window)
    l1.move(100,100)
    l1.resize(300,300)
    l1.setTextMargins(100,0,0,0)   # 设置文本边距
    l1.setStyleSheet("background-color:cyan;")

    # 将光标设置到右下角
    l1.setAlignment(Qt.AlignRight | Qt.AlignBottom)
    l1.setDragEnabled(True)  # 将文本设置成可以拖拽


    l2 = QLineEdit(window)
    l2.resize(50, 50)
    l2.move(200, 0)


    btn = QPushButton(window)
    btn.setText("按钮")
    btn.move(50,50)

    def cursor_move():
        # l1.cursorBackward(True,2)  # 不带选中效果 向后移动两个字符
        # l1.cursorForward(True,3)  # 向前移动选中三个字符
        # l1.cursorWordBackward(True)  # 选中一个单词  按照空格进行区分

        # l1.home(True)  # 快速移动到行首
        # 移动之后 重新获取焦点

        # l1.setCursorPosition(len(l1.text()) / 2)  # 设置光标位置
        # print(l1.cursorPositionAt(QPoint(15, 5)))  # 打印指定位置的字符
        # l1.setFocus()
        l1.cursorBackward(True,3)   # 选中两个字符   再去删除两个字符
        # l1.backspace()  # 删除光标左侧的一个字符
        # l1.del_() # 删除右侧字符
        # l1.clear()  # 清空效果
        # l1.copy()  # 复制

        l1.cut()
        # 再把光标移动到行首
        l1.setCursorPosition(0)

        l1.paste() # 粘贴


        l1.setFocus()  # 重新对准
        # 光标




    btn.clicked.connect(cursor_move)




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

(13)对齐方式
在这里插入图片描述

测试代码:

import sys
from PyQt5.Qt import *


if __name__ == '__main__':


    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle("光标功能测试")
    window.resize(500,500)

    l1 = QLineEdit(window)
    l1.move(100,100)
    l1.resize(300,300)
    l1.setTextMargins(100,0,0,0)   # 设置文本边距
    l1.setStyleSheet("background-color:cyan;")

    # 将光标设置到右下角
    l1.setAlignment(Qt.AlignRight | Qt.AlignBottom)

    btn = QPushButton(window)
    btn.setText("按钮")
    btn.move(50,50)

    def cursor_move():
        # l1.cursorBackward(True,2)  # 不带选中效果 向后移动两个字符
        # l1.cursorForward(True,3)  # 向前移动选中三个字符
        # l1.cursorWordBackward(True)  # 选中一个单词  按照空格进行区分

        # l1.home(True)  # 快速移动到行首
        # 移动之后 重新获取焦点

        l1.setCursorPosition(len(l1.text()) / 2)  # 设置光标位置

        print(l1.cursorPositionAt(QPoint(15, 5)))  # 打印指定位置的字符

        l1.setFocus()



    btn.clicked.connect(cursor_move)




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

四、信号

在这里插入图片描述

测试代码:

import sys
from PyQt5.Qt import *


if __name__ == '__main__':


    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle("光标功能测试")
    window.resize(500,500)

    l1 = QLineEdit(window)
    l1.move(100,100)
    l1.resize(300,300)
    l1.setTextMargins(100,0,0,0)   # 设置文本边距
    l1.setStyleSheet("background-color:cyan;")

    # 将光标设置到右下角
    l1.setAlignment(Qt.AlignRight | Qt.AlignBottom)
    l1.setDragEnabled(True)  # 将文本设置成可以拖拽

    # 两个槽函数 都将文本框内容打印出来
    l1.textEdited.connect(lambda val:print("文本框编辑的时候",val))
    l1.textChanged.connect(lambda val:print("文本框内容改变的时候",val))

    l2 = QLineEdit(window)
    l2.resize(50, 50)
    l2.move(200, 0)

    # 应用场景 :输入回车  光标直接对到下一个文本框
    l1.returnPressed.connect(lambda :l2.setFocus())

    # 光标位置改变时触发信号
    l1.cursorPositionChanged.connect(lambda old_pos,new_pos:print(old_pos,new_pos))



    btn = QPushButton(window)
    btn.setText("按钮")
    btn.move(50,50)

    def cursor_move():
        # l1.cursorBackward(True,2)  # 不带选中效果 向后移动两个字符
        # l1.cursorForward(True,3)  # 向前移动选中三个字符
        # l1.cursorWordBackward(True)  # 选中一个单词  按照空格进行区分

        # l1.home(True)  # 快速移动到行首
        # 移动之后 重新获取焦点

        # l1.setCursorPosition(len(l1.text()) / 2)  # 设置光标位置
        # print(l1.cursorPositionAt(QPoint(15, 5)))  # 打印指定位置的字符
        # l1.setFocus()
        l1.cursorBackward(True,3)   # 选中两个字符   再去删除两个字符
        # l1.backspace()  # 删除光标左侧的一个字符
        # l1.del_() # 删除右侧字符
        # l1.clear()  # 清空效果
        # l1.copy()  # 复制

        l1.cut()
        # 再把光标移动到行首
        l1.setCursorPosition(0)

        l1.paste() # 粘贴


        l1.setFocus()  # 重新对准
        # 光标




    btn.clicked.connect(cursor_move)




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

五、补充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

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

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

打赏作者

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

抵扣说明:

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

余额充值