返回

PyQt5基本窗口控件(四)文本框类控件

发布时间:2023-01-09 21:51:18 327
# python

(PyQt5基本窗口控件(四)文本框类控件)

四、PyQt5窗口控件之“文本框类控件”

1、QLineEdit

  • QLineEdit——单行文本框控件
  • QTextEdit——多行文本框控件

(1)QLineEdit类中的常用方法

方法 描      述
setAlignment() 按固定值方式对齐文本
Qt.AlignLeft 水平方向靠左对齐
Qt.AlignRight 水平方向靠右对齐
Qt.AlignCenter 水平方向居中对齐
Qt.AlignJustify 水平方向调整间距两端对齐
Qt.AlignTop 垂直方向靠上对齐
Qt.AlignBottom 垂直方向靠下对齐
Qt.AlignVcenter 垂直方向居中对齐
clear() 清除文本框内容
setEchoMode() 设置文本框显示格式,运行输入的文本显示格式的值
QLineEdit.Normal 正常显示所输入的字符,此为默认选项
QLineEdit.NoEcho 设置不显示如何输入的字符,常用于密码类型的输入,且其密码长度需要保密时
QLineEdit.Password 显示与平台相关的密码掩码字符,而不是实际输入的字符
QLineEdit.PasswordEchoOnEdit 在编辑时显示字符,负责显示密码类型的输入
setPlaceholderText() 设置文本框浮显文字
setMaxLength() 设置文本框所运行输入的最大字节数
setReadOnly() 设置文本框为只读的
setText() 设置文本框内容
Text() 返回文本框内容
setDragEnabled() 设置文本框是否接受拖拽
selectAll() 全选
setFocus() 得到焦点
setInputMask() 设置掩码
setValidator() 设置文本框的验证器(验证规则),将限制任意可能输入的文本,可用的验证器
QIntValidator 限制输入整数
QDoubleValidator 限制输入浮点数
QRegexpValidator 检查输入是否符合正则表达式

(2)QLineEdit类中的常用信号

字符 含义
A ASCHI字母字符是必须输入的(A-Z、a~z)
a ASCII字母字符是允许输入的,但不是必需的
N ASCHI字母字符是必须输入的(A-Z、a-z、0-9)
n ASCII字母字符是允许输入的,但不是必需的
X 任何字符都是必须输入的
x 任何字符都是允许输入的,但不是必需的
9 ASCII数字字符是必须输入的(0-9)
  ASCII 数字字符是允许输入的,但不是必需的
D ASCII 数字字符是必须输入的(1-9)
d ASCII 数字字符是允许输入的,但不是必需的(1~9)
# ASCII数字字符或加/减符号是允许输入的,但不是必需的
H 十六进制格式字符是必须输入的(A-F、a-f、0-9)
h 十六进制格式字符是允许输入的,但不是必需的
B 二进制格式字符是必须输入的(0,1)
b 二进制格式字符是允许输入的,但不是必需的
> 所有的字母字符都大写
< 所有的字母字符都小写
! 关闭大小写转换
\ 使用"\"转义上面列出的字符

(3)定义掩码的字符释义

  • 掩码由掩码字符和分隔符字符串组成,后面可以跟一个分号和空白字符,空白字符在编辑后会从文本中删除的。
掩码 注意事项
000.000.000.000;_ IP地址,空白字符是"_"
HH:HH:HH:HH:HH:HH; MAC地址
0000-00-00 日期,空白字符是空格
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# 许可证号,空白字符是"-",所有字母字符转换为大写

(4)QLineEdit类中的常用信号

信号 描述
selectionChanged 只要选择改变了,这个信号就会被发射
textChanged 当修改文本内容时,这个信号就会被发射
editingFinished 当编辑文本结束时,这个信号会被发射

案例九 EchoMode的显示效果

# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/8 0008 16:43
    # @Author:晚秋拾叶
    # @File:qt04_LineEdit01.py
    # @PyCharm之Python
"""
from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QFormLayout
import sys


class LineEditDemo(QWidget):
    def __init__(self, parent=None):
        super(LineEditDemo, self).__init__(parent)
        self.setWindowTitle("QLineEdit案例")

        # 定义四个QLineEdit对象
        flo = QFormLayout()
        pNormalLineEdit = QLineEdit()                   # 正常的
        pNoEchoLineEdit = QLineEdit()                   # 不显示的,连长度也不显示的
        pPasswordLineEdit = QLineEdit()                 # 与平台相关的密码掩码
        pPasswordEchoOnEditLineEdit = QLineEdit()       # 编辑时显示密码的

        # 在FormLayout中添加每行两列的名称、文本框
        flo.addRow("Normal", pNormalLineEdit)
        flo.addRow("NoEcho", pNoEchoLineEdit)
        flo.addRow("Password", pPasswordLineEdit)
        flo.addRow("PasswordEchoOnEdit", pPasswordEchoOnEditLineEdit)

        # 设置对应的浮显的文本内容
        pNormalLineEdit.setPlaceholderText("Normal")
        pNoEchoLineEdit.setPlaceholderText("NoEcho")
        pPasswordLineEdit.setPlaceholderText("Password")
        pPasswordEchoOnEditLineEdit.setPlaceholderText("PasswordEchoOnEdit")

        # 设置显示效果
        pNormalLineEdit.setEchoMode(QLineEdit.Normal)   # 正常的
        pNoEchoLineEdit.setEchoMode(QLineEdit.NoEcho)   # 不显示的,连长度也不显示的
        pPasswordLineEdit.setEchoMode(QLineEdit.Password)   # 与平台相关的密码掩码
        pPasswordEchoOnEditLineEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit) # 编辑时显示密码的

        # 设置flo的布局格式
        self.setLayout(flo)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = LineEditDemo()
    win.show()
    sys.exit(app.exec_())

  • 效果如图 在这里插入图片描述 在这里插入图片描述

案例十 验证器

# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/8 0008 17:15
    # @Author:晚秋拾叶
    # @File:qt04_LineEdit02.py
    # @PyCharm之Python
"""
from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QFormLayout
from PyQt5.QtGui import QIntValidator, QDoubleValidator, QRegExpValidator
from PyQt5.QtCore import QRegExp
import sys


class LineEditDemo(QWidget):
    def __init__(self, parent=None):
        super(LineEditDemo, self).__init__(parent)
        self.setWindowTitle("QLineEdit验证器案例")

        flo = QFormLayout()
        pIntLineEdit = QLineEdit()
        pDoubleLineEdit = QLineEdit()
        pValidatorLineEdit = QLineEdit()

        flo.addRow("整型", pIntLineEdit)
        flo.addRow("浮点型", pDoubleLineEdit)
        flo.addRow("字母和数字", pValidatorLineEdit)

        pIntLineEdit.setPlaceholderText("整型")
        pDoubleLineEdit.setPlaceholderText("浮点型")
        pValidatorLineEdit.setPlaceholderText("字母和数字")

        # 整型,范围:[1,99]
        pIntValidator = QIntValidator(self)
        pIntValidator.setRange(1, 99)
        # 浮点型 ,范围:[-360,360],精度:小数点后两位
        pDoubleValidator = QDoubleValidator(self)
        pDoubleValidator.setRange(-360, 360)
        # 只能输入字母和数字
        pDoubleValidator.setNotation(QDoubleValidator.StandardNotation)
        pDoubleValidator.setDecimals(2)

        # 字母和数字
        reg = QRegExp("[a-zA-Z0-9]+$")
        pValidator = QRegExpValidator(self)
        pValidator.setRegExp(reg)

        # 设置验证器
        pIntLineEdit.setValidator(pIntValidator)
        pDoubleLineEdit.setValidator(pDoubleValidator)
        pValidatorLineEdit.setValidator(pValidator)

        self.setLayout(flo)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = LineEditDemo()
    win.show()
    sys.exit(app.exec_())

  • 效果如图
  •  

案例十一 输入掩码

# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/8 0008 17:44
    # @Author:晚秋拾叶
    # @File:qt04_LineEdit03.py
    # @PyCharm之Python
"""
from PyQt5.QtWidgets import QApplication , QLineEdit , QWidget ,QFormLayout
import sys

class lineEditDemo(QWidget):
    def __init__(self,parent = None):
        super(lineEditDemo , self).__init__(parent)
        self.setWindowTitle("QLineEdit输入掩码案例")

        flo = QFormLayout()
        pIPLineEdit = QLineEdit()
        pMACLineEdit = QLineEdit()
        pDateLineEdit = QLineEdit()
        pLicenseLineEdit = QLineEdit()

        pIPLineEdit.setInputMask("000.000.000.000;_")
        pMACLineEdit.setInputMask("HH:HH:HH:HH:HH:HH;_")

        pDateLineEdit.setInputMask("0000-00-00")
        pLicenseLineEdit.setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#")

        flo.addRow("数字掩码",pIPLineEdit)
        flo.addRow("MAC掩码",pMACLineEdit)
        flo.addRow("日期掩码",pDateLineEdit)
        flo.addRow("许可证掩码",pLicenseLineEdit)

        self.setLayout(flo)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = lineEditDemo()
    win.show()
    sys.exit(app.exec_())
  • 效果如图 

案例十二 综合示例

# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/8 0008 17:48
    # @Author:晚秋拾叶
    # @File:qt04_LineEdit04.py
    # @PyCharm之Python
"""
from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QFormLayout
from PyQt5.QtGui import QIntValidator, QDoubleValidator, QFont
from PyQt5.QtCore import Qt
import sys


class lineEditDemo(QWidget):
    def __init__(self, parent=None):
        super(lineEditDemo, self).__init__(parent)
        e1 = QLineEdit()
        e1.setValidator(QIntValidator())
        e1.setMaxLength(4)
        e1.setAlignment(Qt.AlignRight)
        e1.setFont(QFont("Arial", 20))

        e2 = QLineEdit()
        e2.setValidator(QDoubleValidator(0.99, 99.99, 2))

        flo = QFormLayout()
        flo.addRow("integer validator", e1)
        flo.addRow("Double validator", e2)

        e3 = QLineEdit()
        e3.setInputMask('+99_9999_999999')
        flo.addRow("Input Mask", e3)

        e4 = QLineEdit()
        e4.textChanged.connect(self.textchanged)
        flo.addRow("Text changed", e4)

        e5 = QLineEdit()
        e5.setEchoMode(QLineEdit.Password)
        flo.addRow("Password", e5)

        e6 = QLineEdit("Hello 晚秋拾叶")
        e6.setReadOnly(True)
        flo.addRow("Read Only", e6)

        e5.editingFinished.connect(self.enterPress)
        self.setLayout(flo)
        self.setWindowTitle("QLineEdit综合示例")

    def textchanged(self, text):
        print("输入的内容为:" + text)

    def enterPress(self):
        print("已输入值")


if __name__ == '__main__':
    from pyqt5_plugins.examples.exampleqmlitem import QtCore

    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
    app = QApplication(sys.argv)
    win = lineEditDemo()
    win.show()
    sys.exit(app.exec_())

  • 代码分析
    • 第1个文本框e1,显示文本使用中自定义字体、右对齐、运行输入整数
    • 第2个文本框e2,限制输入小数点后两位
    • 第3个文本框e3,需要一个输入掩码应用于电话号码
    • 第4个文本框e4,需要发射信号textChanged,连接到槽函数textchanged()
    • 第5个文本框e5,设置显示模式EchoMode为Password,需要发射editingfinishde信号连接到槽函数enterPress(),一旦用户按下了回车键,函数就会执行
    • 第6个文本框e6,显示一个默认的文本,不能编辑,设置为只读
  • 效果如图 

2、QTextEdit

  • 多行文本框,当文本内容超出控件显示范围时,可以显示垂直滚动条。不仅显示文本,还显示HTML文档。

(1)QTextEdit类中的常用方法

方法 描述
setPlainText() 设置多行文本框的文本内容
toPlainText() 返回多行文本框的文本内容
setHtml() 设置多行文本框的内容为HTML文档
totHtml() 返回多行文本框的HTML内容
clear() 清除多行文本框的内容

案例十三 QTextEdit

# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/8 0008 19:31
    # @Author:晚秋拾叶
    # @File:qt04_textEdit.py
    # @PyCharm之Python
"""
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout, QPushButton
import sys


class TextEditDemo(QWidget):
    def __init__(self, parent=None):
        super(TextEditDemo, self).__init__(parent)
        self.setWindowTitle("QTextEdit案例")

        self.resize(300, 270)
        self.textEdit = QTextEdit()
        self.btnPress1 = QPushButton("显示文本")
        self.btnPress2 = QPushButton("显示HTML")

        layout = QVBoxLayout()
        layout.addWidget(self.textEdit)
        layout.addWidget(self.btnPress1)
        layout.addWidget(self.btnPress2)

        self.setLayout(layout)
        self.btnPress1.clicked.connect(self.btnPress1_Clicked)
        self.btnPress2.clicked.connect(self.btnPress2_Clicked)

    def btnPress1_Clicked(self):
        self.textEdit.setPlainText("Hello PyQt5!\n单击按钮")

    def btnPress2_Clicked(self):
        self.textEdit.setHtml("Hello PyQt5!\n单击按钮。")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = TextEditDemo()
    win.show()
    sys.exit(app.exec_())

  • 代码分析
    • 执行程序,得到QTextEdit的一个窗口控件
    • 在文本框里输入文本,如图一。
    • 单击“显示文本”,显示效果如图二
    • 单击“显示HTML”,显示效果如图三
    • 本例三个控件,文本框下面是两个按钮,需要连接信号到槽函数btnPress1_Clicked()和btnPress2_Clicked,按下按钮btnPress2(显示HTML)时,触发clicked信号,调用btnPress2_Clicked(),接着上面文本框显示内容为HTML文档。
    • 同样,按下按钮“显示文本”还会恢复到文本样式。
  • 效果如图
     
图一 图二 图三
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
PyQt5基本窗口控件(三)QLabel 2023-01-09 21:24:34