您的位置:

PyQt5LineEdit控件详解

一、LineEdit简介

LineEdit是PyQt5中很重要的一个控件,其实,LineEdit也是一个很基本的控件,它允许我们编辑一行文本。在窗口程序开发中,我们通常用于收集用户输入的信息,比如用户名、密码等文本信息。

二、LineEdit的特性

LineEdit控件支持以下几种常见的功能,可以满足我们的实际需求:

  1. 获取文本信息
  2. 设置默认值
  3. 限制输入范围
  4. 实时校验输入的内容
  5. 高亮显示匹配的文本
  6. 撤销、重做等编辑操作

三、使用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_())