Pyside6-第七篇-QLineEdit文本行编辑(内设案例)

简介: Pyside6-第七篇-QLineEdit文本行编辑(内设案例)

本篇Pyside6的第七篇,开启新功能了。单行文本编辑器。

源代码片段

class QLineEdit(QWidget):
    """
    QLineEdit(self, arg__1: str, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
    QLineEdit(self, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
    """

这里简单的告诉了你它可以怎么写。所以我们简单的试试。

一个简单的单行文本示例

from PySide6.QtWidgets import QApplication, QWidget, QLineEdit
class Edit(QWidget):
    def __init__(self):
        super(Edit, self).__init__()
        self.UI()
        self.setGeometry(200,200,500,300)
        self.setWindowTitle("QLineEdit")
        self.show()
    def UI(self):
        # self.line = QLineEdit(self)
        self.line = QLineEdit("请输入内容",self)
        self.line.setGeometry(50,50,200,30)
if __name__ == '__main__':
    app = QApplication([])
    edit = Edit()
    app.exec()

QLineEdit的默认参数写法有点类似于.setText(),后面会讲到

显示模式

QLineEdit.EchoMode.Normal  正常显示用户输入的文本
QLineEdit.EchoMode.NoEcho   不会显示任何输入的文本 
QLineEdit.EchoMode.Password  用户输入时显示一个密码字符
QLineEdit.EchoMode.PasswordEchoOnEdit  开始输入时显示密码字符
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit
class Edit(QWidget):
    def __init__(self):
        super(Edit, self).__init__()
        self.UI()
        self.setGeometry(200, 200, 500, 300)
        self.setWindowTitle("QLineEdit")
        self.show()
    def UI(self):
        self.label_1 = QLineEdit(self)
        self.label_2 = QLineEdit(self)
        self.label_3 = QLineEdit(self)
        self.label_4 = QLineEdit(self)
        self.label_1.setGeometry(50, 50, 200, 30)
        self.label_1.setPlaceholderText("账号")
        # 按字符输入时的形式显示。默认值。
        self.label_1.setEchoMode(QLineEdit.EchoMode.Normal)
        self.label_2.setGeometry(50, 90, 200, 30)
        self.label_2.setPlaceholderText("密码")
        # 不显示任何内容。常见场景:密码的长度也需要被保护
        self.label_2.setEchoMode(QLineEdit.EchoMode.NoEcho)
        self.label_3.setGeometry(50, 130, 200, 30)
        self.label_3.setPlaceholderText("确认密码")
        # 显示时用平台决定的密码掩码字符替代真实输入的字符
        self.label_3.setEchoMode(QLineEdit.EchoMode.Password)
        self.label_4.setGeometry(50, 170, 200, 30)
        self.label_4.setPlaceholderText("邮箱")
        # 当字符正在被编辑时显示
        self.label_4.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit)
if __name__ == '__main__':
    app = QApplication([])
    edit = Edit()
    app.exec()

这个PasswordEchoOnEdit其实跟默认的没有太大的区别。

获取、提示、设置文本

displayText  获取除NoEcho以外的文本
text         获取所有文本,包括NoEcho
setPlaceholderText  设置占位文本,无法被text或者displayText获取
setText      设置文本
# -*- coding: utf-8 -*-
# https://blog.csdn.net/weixin_52040868
# 公众号:测个der
# 微信:qing_an_an
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton
class Edit(QWidget):
    def __init__(self):
        super(Edit, self).__init__()
        self.UI()
        self.setGeometry(200, 200, 500, 300)
        self.setWindowTitle("QLineEdit")
        self.show()
    def UI(self):
        self.line = QLineEdit("请输入内容", self)
        self.btn = QPushButton("获取文本", self)
        self.btn.setGeometry(50, 120, 200, 30)
        # ///////////////////////////////////////////////
        self.label_1 = QLineEdit(self)
        self.label_1.setGeometry(50, 50, 200, 30)
        self.label_1.setPlaceholderText("账号")
        self.btn.clicked.connect(self.txt)
    def txt(self):
        print("line text", self.line.text())
        print("displayText ", self.label_1.displayText())
        print("label_2 text", self.label_1.text())
if __name__ == '__main__':
    app = QApplication([])
    edit = Edit()
    app.exec()

QLineEdit("请输入内容", self)这样的写法就相当于调用了一个setText来写入文本。

限制操作

setMaxLength(length: int)      设置文本最大长度,默认值为32767
setReadOnly(yes: bool)         设置是否开启只读模式,默认为False
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton
class Edit(QWidget):
    def __init__(self):
        super(Edit, self).__init__()
        self.UI()
        self.setGeometry(200, 200, 500, 300)
        self.setWindowTitle("QLineEdit")
        self.show()
    def UI(self):
        self.label_1 = QLineEdit(self)
        self.label_1.setGeometry(50, 50, 200, 30)
        self.label_1.setMaxLength(11)     # 设置最大长度为11、
        self.label_1.setReadOnly(True)
if __name__ == '__main__':
    app = QApplication([])
    edit = Edit()
    app.exec()

限制操作在这里使用的并不算太多,简单的介绍两个即可,值得注意的是只读操作,其实就是设置后不允许用户输入了。

文本框其他好玩的操作

.setClearButtonEnabled(enable: bool)    在编辑器内添加清空按钮
.isClearButtonEnabled() -> bool         是否启用了清空按钮
.setDragEnabled(b: bool)                设置是否允许拖拽,默认不允许
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton
class Edit(QWidget):
    def __init__(self):
        super(Edit, self).__init__()
        self.UI()
        self.setGeometry(200, 200, 500, 300)
        self.setWindowTitle("QLineEdit")
        self.show()
    def UI(self):
        self.label_1 = QLineEdit(self)
        self.label_1.setGeometry(50, 50, 200, 30)
        self.label_1.setPlaceholderText("账号")  # 占位文本
        self.label_1.setClearButtonEnabled(True)     # 在编辑器内添加清空按钮
        self.label_1.isClearButtonEnabled()     # 是否启用了清空按钮
        self.label_1.setDragEnabled(True)       # 设置是否允许拖拽
if __name__ == '__main__':
    app = QApplication([])
    edit = Edit()
    app.exec()

上述添加了一个清空按钮,这是它自带的方法,对于其他的自定义的方法操作我们可以自己进行修改,例如隐藏按钮。

验证器、掩码

这个用的比较少,还是要提一嘴。也可以用来作为限制来使用。

from PySide6 import QtGui
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton
class Edit(QWidget):
    def __init__(self):
        super(Edit, self).__init__()
        self.UI()
        self.setGeometry(200, 200, 500, 300)
        self.setWindowTitle("QLineEdit")
        self.show()
    def UI(self):
        self.label_1 = QLineEdit(self)
        self.label_1.setGeometry(50, 50, 200, 30)
        # 创建一个整数验证器对象,其特点为限制只能输入范围内的整数
        validator = QtGui.QIntValidator(10, 99, self.label_1)
        # 将验证器设置给line_edit
        self.label_1.setValidator(validator)
        self.label_2 = QLineEdit(self)
        self.label_2.setGeometry(50, 90, 200, 30)
        # 创建掩码,详细语法见文档
        ip_address_mask = "000.000.000.000;_"  # 适用于IPv4地址的掩码,;后的_为占位符
        # 设置输入掩码
        self.label_2.setInputMask(ip_address_mask)
if __name__ == '__main__':
    app = QApplication([])
    edit = Edit()
    app.exec()

也就只能输入这么多的字符了,再多输入不进去了


案例:自动补全+自定义操作+信号与槽

from PySide6.QtGui import QIcon, QAction
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton
class Edit(QWidget):
    def __init__(self):
        super(Edit, self).__init__()
        self.UI()
        self.setGeometry(200, 200, 500, 300)
        self.setWindowTitle("QLineEdit")
        self.show()
    def UI(self):
        self.user = QLineEdit(self)
        self.user.setGeometry(50, 50, 200, 30)
        self.user.setPlaceholderText("账号")
        self.user.setClearButtonEnabled(True)  # 在编辑器内添加清空按钮
        self.user.isClearButtonEnabled()     # 是否启用了清空按钮
        self.user.setDragEnabled(True)       # 设置是否允许拖拽
        self.pwd = QLineEdit(self)
        self.pwd.setGeometry(50, 90, 200, 30)
        self.pwd.setPlaceholderText("密码")
        action = QAction(self.pwd)
        action.setIcon(QIcon('close.png'))
        self.pwd.setClearButtonEnabled(True)  # 在编辑器内添加清空按钮
        self.pwd.isClearButtonEnabled()  # 是否启用了清空按钮
        self.tt = QLineEdit(self)
        self.tt.setGeometry(50, 130, 200, 30)
        self.tt.setPlaceholderText("显示文本")
        # 添加密码的明文以及密文的按钮
        def change():
            # 先判定密码模式
            if self.pwd.echoMode() == QLineEdit.EchoMode.Normal:
                # 变成密文
                self.pwd.setEchoMode(QLineEdit.EchoMode.Password)
                # 切换图标
                action.setIcon(QIcon('close.png'))
            else:
                # 变成明文
                self.pwd.setEchoMode(QLineEdit.EchoMode.Normal)
                # 改变图标
                action.setIcon(QIcon('open.png'))
        action.triggered.connect(change)
        # 将图标放在头部
        # self.pwd.addAction(action, QLineEdit.LeadingPosition)
        # 将图标放在尾部
        self.pwd.addAction(action,QLineEdit.TrailingPosition)
        """信号与槽,以下代码需要单个分开来使用,因为都是作用于同一个槽函数"""
        # 当编辑器中的文本发生改变时发射此信号,新的文本作为参数传出
        self.user.textChanged.connect(self.writeTxt)
        # 当编辑器中的文本被用户编辑时发射此信号,新的文本作为参数传出,编程方式改变文本无效
        # self.user.textEdited.connect(self.writeTxt)
        # 当光标位置变化时发射此信号,传出旧新光标位置
        # self.user.cursorPositionChanged.connect(lambda old, new: self.writeTxt(f"光标由{old}移动到了{new}"))
        # 当选中状态改变时发射此信号,可以通过.selectedText()等方法获取新的选中
        # self.user.selectionChanged.connect(lambda :self.writeTxt("选择改变了"))
        # 当用户按下Enter / Return键时发射此信号,当设置了掩码或验证器时只有接受输入才发射
        # self.user.returnPressed.connect(lambda :self.writeTxt("按下了回车"))
        # editingFinished()按下Enter / Return键、编辑器失去焦点且内容变化时发射此信号
        # self.user.editingFinished.connect(lambda: self.writeTxt("结束编辑"))
        # inputRejected()当用户输入被验证器拒绝时发射此信号
        # self.user.setValidator(QtGui.QIntValidator(10, 99, self.user))  # 设置验证器
        # self.user.inputRejected.connect(lambda: self.writeTxt("输入拒绝"))
    def writeTxt(self, txt):
        self.tt.setText(txt)
if __name__ == '__main__':
    app = QApplication([])
    edit = Edit()
    app.exec()


最后文中的所有代码在gitee上: https://gitee.com/qinganan_admin/Pyside6_Information/tree/master/%E7%AC%AC%E4%B8%89%E7%AB%A0%EF%BC%8CQLineEdit

目录
相关文章
Pyside6-第十篇-纯文本QPlainTextEdit
Pyside6-第十篇-纯文本QPlainTextEdit
484 0
Pyside6-第十篇-纯文本QPlainTextEdit
Pyside6-第四篇-QCheckBox复选框
Pyside6-第四篇-QCheckBox复选框
641 0
Pyside6-第四篇-QCheckBox复选框
Pyside6-第八篇-QLabel文本标签
Pyside6-第八篇-QLabel文本标签
394 0
|
自然语言处理 数据可视化
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
Pyside6-第九篇-QTextEdit多行文本编辑器
Pyside6-第九篇-QTextEdit多行文本编辑器
400 0
Pyside6-第三篇-QToolButton一个的按钮
Pyside6-第三篇-QToolButton一个的按钮
268 0
Pyside6-第六篇-各按钮的信号与槽
Pyside6-第六篇-各按钮的信号与槽
273 0
|
6月前
QT基础教程(文本绘制)
QT基础教程(文本绘制)
138 0
《QT从基础到进阶·二十三》弹窗提示框QMessageBox和QCloseEvent事件
《QT从基础到进阶·二十三》弹窗提示框QMessageBox和QCloseEvent事件
466 0
Pyside6-第五篇-单选按钮QRadioButton
Pyside6-第五篇-单选按钮QRadioButton
496 0