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文档。
- 同样,按下按钮“显示文本”还会恢复到文本样式。
- 效果如图
![]() |
![]() |
![]() |
文章来源: https://blog.51cto.com/u_15930659/5990530
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报