PyQt6第四章控件功能之4.2常用控件(4.2.2单行文本框:QLineEdit)

接着学习第二个控件4.2.2单行文本框:QLineEdit

分为两块来学习:1. 输入类控件、2. 单行文本框

1. 输入类控件

在Qt Designer中,用于图形界面数据输入的控件(Input Widgets)如下:

Combo Box:组合框

Line Edit:单行文本框

Plain Text Edit:纯文本编辑框

Double Spin Box:小数选择框

Date Edit:日期编辑框

Dial:旋钮

Vertical Scroll Bar:垂直滚动条

Vertical Slider:垂直滑块

Font Combo Box:字体组合框

Text Edit:多行文本框

Spin Box:数字选择框

Time Edit:时间编辑框

Date/Time Edit:日期时间编辑框

Horizontal Scroll Bar:水平滚动条

Horizontal Slider:水平滑块

Key Sequence Edit:按键编辑框

2. 单行文本框

1)单行文本框控件属性和方法 QLineEdit类中的常用属性和方法如表。
2)单行文本框控件输入字符串掩码

单行文本框控件通过inputMask属性或者SetInputMask(s)方法设置字符串掩码,运行时该单行文本框需要输入指定的规范输入字符串。

表中列出了输入掩码的占位符和字面字符:

字符:含义

A:必须输入的(A~Z、a~z)

a,n:允许输入的ASCII字符,但不是必需的

N:必须输入的(A~2、a~z、0~9)

X:任何字符都是必须输入的

x:任何字符都是允许输入的,但不是必需的

9:必须输入(0~9)

0:允许输入(0~9),但不是必需的

D:必须输入(1-9)

d:允许输入(1-9),但不是必需的

#:允许输入数字或加/减符号,但不是必需的

H:必须输入十六进制字符(A~F、a~f、0~9)

h:允许输入十六进制字符(A~F、a~f、0~9),但不是必需的

B:必须输入二进制字符 (0, 1)

b:允许输入二进制字符 (0, 1),但不是必需的

>:所有的字母都大写

<:所有的字母都小写

!:关闭大小写转换

\:使用“\”转义上面列出的字符

QLineEdit类中的常用信号如下:

selectionChanged:当选择的文本内容改变时发送

textEdited:当文本被编辑时发送

returnPressed:光标在行编辑框内点击回车键时发送

textChanged:当修改文本内容时发送

editingFinished:当按返回或者回车键时,或者行编辑失去焦点时发送

cursorPositionChanged:当光标位置改变时发送

inputRejected:如果setValidator() 等设置合法字符范围,当用户输入不合法字符时发送

【例4.2】QlineText单行文本框测试,运行程序,显示如图:                

from PyQt6.QtWidgets import QApplication, QLineEdit, QWidget, QFormLayout  # 从PyQt6.QtWidgets模块导入所需的类
from PyQt6.QtGui import QIntValidator, QDoubleValidator, QRegularExpressionValidator  # 从PyQt6.QtGui模块导入验证器类
from PyQt6.QtCore import QRegularExpression  # 从PyQt6.QtCore模块导入正则表达式类
import sys  # 导入Python标准库的sys模块


class MyWidget(QWidget):  # 定义一个名为MyWidget的类,继承自QWidget
    def __init__(self, parent=None):  # 定义类的构造函数,parent是父窗口的引用,默认为None
        super(MyWidget, self).__init__(parent)  # 调用父类QWidget的构造函数
        self.setWindowTitle("QLineEdit测试")  # 设置窗口标题为“QLineEdit测试”

        fLayout = QFormLayout()  # 创建一个QFormLayout对象,用于表单布局
        leBH = QLineEdit();
        leXM = QLineEdit()  # 创建两个QLineEdit对象,分别用于输入编号和姓名
        leMM = QLineEdit();
        leCSRQ = QLineEdit()  # 创建两个QLineEdit对象,分别用于输入密码和出生日期
        leGL = QLineEdit();
        leJBGZ = QLineEdit()  # 创建两个QLineEdit对象,分别用于输入工龄和基本工资
        leIP = QLineEdit();
        leCH = QLineEdit()  # 创建两个QLineEdit对象,分别用于输入本机IP地址和车号

        fLayout.addRow("编   号", leBH)  # 在表单布局中添加一行,标题为“编   号”,控件为leBH
        fLayout.addRow("姓   名", leXM)  # 在表单布局中添加一行,标题为“姓   名”,控件为leXM
        fLayout.addRow("登录密码", leMM)  # 在表单布局中添加一行,标题为“登录密码”,控件为leMM
        fLayout.addRow("出生日期", leCSRQ)  # 在表单布局中添加一行,标题为“出生日期”,控件为leCSRQ
        fLayout.addRow("工   龄", leGL)  # 在表单布局中添加一行,标题为“工   龄”,控件为leGL
        fLayout.addRow("基本工资", leJBGZ)  # 在表单布局中添加一行,标题为“基本工资”,控件为leJBGZ
        fLayout.addRow("本机IP地址", leIP)  # 在表单布局中添加一行,标题为“本机IP地址”,控件为leIP
        fLayout.addRow("车   号", leCH)  # 在表单布局中添加一行,标题为“车   号”,控件为leCH
        self.setLayout(fLayout)  # 设置窗口的布局为之前创建的表单布局fLayout

        # 设置leBH(编号)的输入掩码,限制只能输入6位数字
        leBH.setPlaceholderText("编号为6位")  # 设置占位符文本提示用户输入6位编号
        leBH.setInputMask("999999")  # 设置输入掩码,限制输入为6位数字

        # 设置leMM(密码)的输入模式为密码模式,并设置只能输入字母和数字的验证器
        leMM.setPlaceholderText("密码是字母数字组合")  # 设置占位符文本提示用户密码应由字母和数字组成
        leMM.setEchoMode(QLineEdit.EchoMode.Password)  # 设置密码输入模式,显示圆点
        reg = QRegularExpression("[a-zA-Z0-9]+$")  # 创建一个正则表达式对象,匹配由字母和数字组成的字符串
        mmValidator = QRegularExpressionValidator(self)  # 创建一个正则表达式验证器对象
        mmValidator.setRegularExpression(reg)  # 设置验证器的正则表达式
        leMM.setValidator(mmValidator)  # 将验证器设置给leMM,限制其输入为字母和数字的组合

        # 设置leGL(工龄)的整型验证器,限制输入范围为[1, 45]
        glIntValidator = QIntValidator(self)  # 创建一个整型验证器对象
        glIntValidator.setRange(1, 45)  # 设置验证器的整数范围为1到45
        leGL.setValidator(glIntValidator)  # 将验证器设置给leGL,限制其输入为1到45之间的整数

        # 设置leJBGZ(基本工资)的浮点验证器,限制输入范围为[0, 9999],保留两位小数
        jbDoubleValidator = QDoubleValidator(self)  # 创建一个浮点验证器对象
        jbDoubleValidator.setRange(0.00, 9999.99)  # 设置验证器的浮点范围为0到9999.99
        jbDoubleValidator.setNotation(QDoubleValidator.Notation.StandardNotation)  # 设置使用标准记数法
        jbDoubleValidator.setDecimals(2)  # 设置小数点后保留两位
        leJBGZ.setValidator(jbDoubleValidator)  # 将验证器设置给leJBGZ,限制其输入为指定范围内的浮点数

        # 设置leCSRQ(出生日期)的输入掩码,限制输入格式为"年-月-日"
        leCSRQ.setInputMask("9999-00-00")  # 设置输入掩码为日期格式

        # 设置leIP(本机IP地址)的输入掩码,限制输入格式为IP地址
        leIP.setInputMask("000.000.000.000")  # 设置输入掩码为IP地址格式

        # 设置leCH(车号)的输入掩码,限制输入格式为7位数字或字母
        leCH.setInputMask("XXXXXXX")  # 设置输入掩码为7位字符格式


if __name__ == "__main__":  # 判断当前模块是否作为主程序运行
    app = QApplication(sys.argv)  # 创建QApplication对象,sys.argv是命令行参数列表
    w = MyWidget()  # 创建MyWidget对象
    w.show()  # 显示窗口
    sys.exit(app.exec())  # 进入应用的主事件循环,等待用户操作,直到程序关闭

这段代码主要实现了以下功能:

  1. 创建一个包含多个QLineEdit控件的自定义窗口MyWidget,用于用户输入不同的信息。
  2. 为每个QLineEdit控件设置特定的验证器或输入掩码,以确保用户输入的数据符合特定的格式或范围。

使用的布局和控件如下:

  1. 布局:使用了QFormLayout,它创建了一个表单样式的布局,其中标签(如“编 号”)和对应的输入框(QLineEdit)成对出现。
  2. 控件
    • QLineEdit:用于获取用户输入的单行纯文本或密码。
    • QFormLayout:用于组织表单样式的布局。

关键语句包括:

  1. 设置输入掩码

    leBH.setInputMask("999999")  
    leCSRQ.setInputMask("9999-00-00")  
    leIP.setInputMask("000.000.000.000")  
    leCH.setInputMask("XXXXXXX")

    这些语句为每个QLineEdit控件设置了输入掩码,以限制用户输入的数据格式。例如,leBH.setInputMask("999999")确保编号只能输入6位数字。

  2. 设置密码显示模式

    leMM.setEchoMode(QLineEdit.EchoMode.Password)

    这将密码输入框leMM的显示模式设置为密码模式,即用户输入的字符将显示为圆点。

  3. 设置正则表达式验证器

    reg = QRegularExpression("[a-zA-Z0-9]+$")  
    mmValidator = QRegularExpressionValidator(self)  
    mmValidator.setRegularExpression(reg)  
    leMM.setValidator(mmValidator)

    这里创建了一个正则表达式验证器,确保密码只能包含字母和数字。然后将其设置为leMM的验证器。

  4. 设置整型验证器

    glIntValidator = QIntValidator(self)  
    glIntValidator.setRange(1, 45)  
    leGL.setValidator(glIntValidator)

    这里设置了一个整型验证器,用于限制工龄在1到45之间。

  5. 设置浮点型验证器

    jbDoubleValidator = QDoubleValidator(self)  
    jbDoubleValidator.setRange(0.00, 9999.99)  
    jbDoubleValidator.setNotation(QDoubleValidator.Notation.StandardNotation)  
    jbDoubleValidator.setDecimals(2)  
    leJBGZ.setValidator(jbDoubleValidator)

    这里设置了一个浮点型验证器,用于限制基本工资在0到9999.99之间,并且保留两位小数。通过以上的设置,这个自定义窗口MyWidget可以帮助用户输入符合特定格式或范围的数据,同时提供了友好的用户界面。

【例4.3】QLineEdit单行文本框测试。测试如图:

from PyQt6.QtWidgets import QApplication, QLineEdit, QWidget, QFormLayout  # 导入必要的PyQt6模块
from PyQt6.QtGui import QIntValidator, QDoubleValidator, QFont  # 导入验证器和字体模块
from PyQt6.QtCore import Qt  # 导入Qt的枚举类型
import sys  # 导入sys模块,用于处理命令行参数


class MyWidget(QWidget):  # 定义一个继承自QWidget的自定义窗口类
    def __init__(self, parent=None):  # 定义初始化方法
        super(MyWidget, self).__init__(parent)  # 调用父类的初始化方法

        le1 = QLineEdit()  # 创建第一个QLineEdit对象
        le1.setValidator(QIntValidator())  # 为le1设置整数验证器
        le1.setMaxLength(6)  # 设置le1的最大输入长度为6

        le2 = QLineEdit()  # 创建第二个QLineEdit对象
        le2.setValidator(QDoubleValidator(0.99, 99.99, 2))  # 为le2设置小数验证器,限制范围为0.99到99.99,保留两位小数
        le2.textChanged.connect(self.textchanged)  # 当le2的文本改变时,调用self.textchanged方法

        le3 = QLineEdit()  # 创建第三个QLineEdit对象
        le3.setInputMask('+99-0000-00000000')  # 为le3设置输入掩码,用于格式化输入内容

        le4 = QLineEdit("软件工程")  # 创建第四个QLineEdit对象,并设置初始文本为"软件工程"
        le4.setFont(QFont("黑体", 20))  # 设置le4的字体为"黑体",字号为20
        le4.setAlignment(Qt.AlignmentFlag.AlignRight)  # 设置le4的文本对齐方式为右对齐
        le4.editingFinished.connect(self.enterPress)  # 当le4的编辑完成时,调用self.enterPress方法

        le5 = QLineEdit("2022-07-28")  # 创建第五个QLineEdit对象,并设置初始文本为"2022-07-28"
        le5.setReadOnly(True)  # 设置le5为只读,用户不能修改其内容

        self.setWindowTitle("QLineEdit测试")  # 设置窗口的标题为"QLineEdit测试"
        fLayout = QFormLayout()  # 创建一个表单布局对象
        fLayout.addRow("整数(0-6位)", le1)  # 在表单布局中添加一行,标题为"整数(0-6位)",对应的控件为le1
        fLayout.addRow("实数(xx.xx)", le2)  # 在表单布局中添加一行,标题为"实数(xx.xx)",对应的控件为le2
        fLayout.addRow("文本字体字号对右", le3)  # 添加le3到表单布局中,但这里的文本与le3的实际功能不匹配
        fLayout.addRow("输入  文本", le4)  # 添加le4到表单布局中
        fLayout.addRow("只读文本", le5)  # 添加le5到表单布局中
        self.setLayout(fLayout)  # 设置窗口的布局为fLayout

    def textchanged(self, txt):  # 定义一个方法,当le2的文本改变时调用
        print("输入:" + txt)  # 打印输入的文本

    def enterPress(self):  # 定义一个方法,当le4的编辑完成时调用
        print("本行输入完成!")  # 打印提示信息


if __name__ == "__main__":  # 判断当前模块是否为直接运行的主模块
    app = QApplication(sys.argv)  # 创建QApplication对象
    w = MyWidget()  # 创建MyWidget对象
    w.show()  # 显示窗口
    sys.exit(app.exec())  # 进入Qt的事件循环,等待用户操作,最后退出程序

这段代码主要实现了以下功能:

  1. 创建了一个包含五个QLineEdit控件的自定义窗口MyWidget
  2. 为每个QLineEdit控件设置了不同的属性或行为,例如输入验证、输入掩码、字体、对齐方式以及只读状态。
  3. 当第二个QLineEditle2的文本内容发生变化时,将打印出变化后的文本。
  4. 当第四个QLineEditle4的编辑完成时(即用户按下了Enter键或点击了其他地方),将打印一条消息。

使用的布局和控件如下:

  • 布局QFormLayout,它创建了一个表单样式的布局,其中标签(如“整数(0-6位)”)和对应的输入框(QLineEdit)成对出现。
  • 控件
    • QLineEdit:用于获取用户输入的单行纯文本。

关键语句包括:

  1. 设置整数验证器和最大长度

    le1.setValidator(QIntValidator())  
    le1.setMaxLength(6)

    这里为le1设置了整数验证器,确保用户只能输入整数,并通过setMaxLength(6)限制最大长度为6位。

  2. 设置浮点数验证器

    le2.setValidator(QDoubleValidator(0.99, 99.99, 2))

    le2设置了浮点数验证器,限制输入值在0.99到99.99之间,并且保留两位小数。

  3. 设置输入掩码

    le3.setInputMask('+99-0000-00000000')

    这为le3设置了输入掩码,定义了用户应该如何输入数据(例如电话号码格式)。

  4. 设置字体和对齐方式

    le4.setFont(QFont("黑体", 20))  
    le4.setAlignment(Qt.AlignmentFlag.AlignRight)

    这里设置了le4的字体为“黑体”且字号为20,并将文本内容对齐到右侧。

  5. 设置只读状态

    le5.setReadOnly(True)

    这使le5成为只读,用户不能修改其内容。

  6. 信号与槽的连接

    le2.textChanged.connect(self.textchanged)  
    le4.editingFinished.connect(self.enterPress)

    这里将le2textChanged信号连接到self.textchanged槽,当le2的文本内容发生变化时,会调用self.textchanged方法。同样,将le4editingFinished信号连接到self.enterPress槽,当le4的编辑完成时,会调用self.enterPress方法。

通过这些设置和关键语句,这个自定义窗口MyWidget可以帮助用户输入符合特定格式或范围的数据,同时提供了灵活的文本编辑体验。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值