一、LineEdit简介
LineEdit是PyQt5中很重要的一个控件,其实,LineEdit也是一个很基本的控件,它允许我们编辑一行文本。在窗口程序开发中,我们通常用于收集用户输入的信息,比如用户名、密码等文本信息。
二、LineEdit的特性
LineEdit控件支持以下几种常见的功能,可以满足我们的实际需求:
- 获取文本信息
- 设置默认值
- 限制输入范围
- 实时校验输入的内容
- 高亮显示匹配的文本
- 撤销、重做等编辑操作
三、使用LineEdit
在使用LineEdit之前,我们需要掌握一些基本的方法,来实现我们的需求。
1、获取文本信息
我们可以使用text()方法来获取LineEdit中的文本信息。
from PyQt5.QtWidgets import QLineEdit, QApplication
from PyQt5.QtGui import QIntValidator
import sys
app = QApplication(sys.argv)
lineEdit = QLineEdit("默认值")
lineEdit.show()
sys.exit(app.exec_())
2、设置默认值
我们可以使用setText()方法来设置LineEdit的默认值。
from PyQt5.QtWidgets import QLineEdit, QApplication
from PyQt5.QtGui import QIntValidator
import sys
app = QApplication(sys.argv)
lineEdit = QLineEdit()
lineEdit.setText("默认值")
lineEdit.show()
sys.exit(app.exec_())
3、限制输入范围
当我们需要限制用户输入的范围时,我们可以使用QIntValidator()。它可以限制输入的只能是整数,并且限制范围在0到999之间。
from PyQt5.QtWidgets import QLineEdit, QApplication
from PyQt5.QtGui import QIntValidator
import sys
app = QApplication(sys.argv)
lineEdit = QLineEdit()
intValidator = QIntValidator()
intValidator.setBottom(0)
intValidator.setTop(999)
lineEdit.setValidator(intValidator)
lineEdit.show()
sys.exit(app.exec_())
4、实时校验输入的内容
我们可以使用textChanged信号来实时校验用户输入的内容。比如,当用户输入的内容不是一个合法的IP地址时,将LineEdit背景设置为红色。
from PyQt5.QtWidgets import QLineEdit, QApplication
from PyQt5.QtGui import QIntValidator, QRegExpValidator, QPalette
from PyQt5.QtCore import QRegExp
import sys
app = QApplication(sys.argv)
lineEdit = QLineEdit()
lineEdit.setPlaceholderText("请输入IP地址")
lineEdit.show()
ipRegExp = QRegExp("^(([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$")
ipValidator = QRegExpValidator(ipRegExp)
lineEdit.setValidator(ipValidator)
palette = QPalette()
palette.setColor(QPalette.Base, Qt.red)
lineEdit.setPalette(palette)
def validate():
if lineEdit.hasAcceptableInput():
lineEdit.setPalette(QPalette())
else:
lineEdit.setPalette(palette)
lineEdit.textChanged.connect(validate)
sys.exit(app.exec_())
5、高亮显示匹配的文本
我们可以使用textChanged信号来高亮显示LineEdit中已经匹配的文本。比如,输入“hello World”时,将Word高亮显示。
from PyQt5.QtWidgets import QLineEdit, QApplication
from PyQt5.QtGui import QIntValidator, QRegExpValidator, QPalette
from PyQt5.QtCore import QRegExp, Qt
import sys
app = QApplication(sys.argv)
lineEdit = QLineEdit()
lineEdit.show()
regExp = QRegExp("World")
regExpValidator = QRegExpValidator(regExp)
lineEdit.setValidator(regExpValidator)
palette = QPalette()
palette.setColor(QPalette.Text, Qt.red)
lineEdit.setPalette(palette)
def highlight():
text = lineEdit.text()
pos = regExp.indexIn(text)
if pos == -1:
lineEdit.setPalette(QPalette())
else:
cursor = lineEdit.cursor()
cursor.setPosition(pos)
cursor.movePosition(QTextCursor.EndOfWord, QTextCursor.KeepAnchor)
lineEdit.setTextCursor(cursor)
lineEdit.setPalette(palette)
lineEdit.textChanged.connect(highlight)
sys.exit(app.exec_())
6、编辑操作
我们可以使用QTextEdit的撤销、重做等编辑操作。
from PyQt5.QtWidgets import QLineEdit, QApplication
from PyQt5.QtGui import QIntValidator, QRegExpValidator, QPalette
from PyQt5.QtCore import QRegExp, Qt
import sys
app = QApplication(sys.argv)
lineEdit = QLineEdit()
lineEdit.show()
def undo():
lineEdit.undo()
def redo():
lineEdit.redo()
def copy():
lineEdit.copy()
def cut():
lineEdit.cut()
def paste():
lineEdit.paste()
undoAction = QAction("撤销", app)
undoAction.setShortcut(QKeySequence.Undo)
undoAction.triggered.connect(undo)
app.addAction(undoAction)
redoAction = QAction("重做", app)
redoAction.setShortcut(QKeySequence.Redo)
redoAction.triggered.connect(redo)
app.addAction(redoAction)
copyAction = QAction("复制", app)
copyAction.setShortcut(QKeySequence.Copy)
copyAction.triggered.connect(copy)
app.addAction(copyAction)
cutAction = QAction("剪切", app)
cutAction.setShortcut(QKeySequence.Cut)
cutAction.triggered.connect(cut)
app.addAction(cutAction)
pasteAction = QAction("粘贴", app)
pasteAction.setShortcut(QKeySequence.Paste)
pasteAction.triggered.connect(paste)
app.addAction(pasteAction)
sys.exit(app.exec_())