赞
踩
PyQt5 是一个强大的Python库,用于创建图形用户界面(GUI)。其中,QLineEdit 控件作为一个简单而实用的组件,经常用于接受用户的单行文本输入,甚至可以用来进行输入格式的限制。这篇博客中将介绍 QLineEdit 控件的各种功能和用法,帮助您更好地利用这个神奇的控件。
QLineEdit是PyQt5中的一个基本控件,主要用于接受用户的单行文本输入。除了基本的文本输入功能外,它还支持一些附加功能,包括回显模式、输入限制和验证、信号与槽机制等。
让我们从一个简单的例子开始,创建一个基本的 QLineEdit 控件:
import sys
from PyQt5.QtWidgets import QLineEdit, QWidget,QApplication
app = QApplication(sys.argv)
w=QWidget()
w.setGeometry(300,300,300,300)
lineEdit = QLineEdit(w)
lineEdit.setPlaceholderText('请输入')
w.show()
sys.exit(app.exec_())
在窗口中创建QLineEdit控件的方式主要有两种,第一种是***直接将QLineEdit作为窗口的子部件***lineEdit = QLineEdit(w)
;第二种是***使用布局管理器***,先将QLineEdit控件添加到布局中,然后将布局添加给窗口。
#创建窗口
window = QWidget()
# 创建QLineEdit
lineEdit = QLineEdit()
lineEdit.setPlaceholderText('请输入')
# 创建布局管理器并将QLineEdit添加到布局中
layout = QVBoxLayout(window)
layout.addWidget(lineEdit)
通过下面的程序可以直观的了解此功能,该程序创建了一个窗口,包含一个QLabel和一个QLineEdit。当用户在QLineEdit中输入或编辑文本时,QLabel会实时更新显示QLineEdit的文本内容。对QLineEdit控件进行编辑时会触发textChanged
信号。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit
class TextInputExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('文本输入示例')
layout = QVBoxLayout()
# 创建一个QLabel用于显示QLineEdit的文本内容
self.label = QLabel('QLineEdit文本内容:')
layout.addWidget(self.label)
# 创建一个QLineEdit用于文本输入和编辑
self.line_edit = QLineEdit()
self.line_edit.textChanged.connect(self.onTextChanged) # 连接文本改变信号到槽函数
layout.addWidget(self.line_edit)
self.setLayout(layout)
# 文本改变时更新QLabel的文本内容
def onTextChanged(self, text):
self.label.setText('QLineEdit文本内容:' + text)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = TextInputExample()
window.show()
sys.exit(app.exec_())
在 PyQt 中,QLineEdit
控件的回显模式(EchoMode)用于控制用户在输入文本时显示内容的方式。通过设置不同的回显模式,可以实现不同的效果以适用于不同场景,例如密码输入等敏感信息的保护。 QLineEdit
的回显模式有以下四种:
Normal:
NoEcho:
Password:
PasswordEchoOnEdit:
通过调用 setEchoMode()
方法更改 QLineEdit
的回显模式,并传入相应的枚举值
有些时候需要对用户的输入进行限制,就可以使用验证器进行限制,在pyqt5中内置了一些验证器QIntValidator
,QDoubleValidator
和QRegExpValidator
QIntValidator
: 限制输入为整数,并可以设置最小值和最大值。QDoubleValidator
: 类似于 QIntValidator
,但用于验证浮点数。QRegExpValidator
: 使用正则表达式进行更复杂的验证。import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFormLayout, QLabel, QLineEdit
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator,QValidator
from PyQt5.QtCore import QRegExp
class ValidatorDemo(QWidget):
def __init__(self):
super(ValidatorDemo, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('验证器')
#lineEdit
intlineEdit=QLineEdit()
doubleEdit=QLineEdit()
regexpEdit=QLineEdit()
#validator
intValidator=MyIntValidator(self)
intValidator.setRange(0,100)
intlineEdit.setValidator(intValidator)
doubleValidator=QDoubleValidator(self)
doubleValidator.setDecimals(2)
doubleValidator.setRange(0,260)
doubleEdit.setValidator(doubleValidator)
regexpValidator=QRegExpValidator(self)
reg=QRegExp("[a-zA-Z0-9]+$")
regexpValidator.setRegExp(reg)
regexpEdit.setValidator(regexpValidator)
flayout=QFormLayout(self)
flayout.addRow('IntValidator',intlineEdit)
flayout.addRow('DoubleValidator',doubleEdit)
flayout.addRow('RegExpValidator',regexpEdit)
if __name__=="__main__":
app=QApplication(sys.argv)
demo=ValidatorDemo()
demo.show()
sys.exit(app.exec_())
在使用内置的验证器时(就是上面的代码)发现了一个奇怪的问题,需要对QLineEdit进行输入范围限制(0-100)时发现使用setRange(0,100),没有生效,可以输入的范围居然是0~999。查阅了一些资料发现QIntValidator
只是用来验证输入的有效性,但它并不会阻止用户输入不符合规则的值。虽然设置了验证器,但默认情况下,Qt并不会阻止用户输入超出范围的值。如果你想要完全防止用户输入不符合规则的值,你需要重写validate和fixup方法。
下面给一个例子,这个是可以实现输入范围的限制的。不过要注意一下,假设限制的范围是0~100,输入111是正常显示在QLineEdit控件上的,但是按下回车键就会进行修正了。
class MyIntValidator(QIntValidator):
def validate(self, input_text, pos):
# 首先调用父类的 validate 方法进行基本的验证
state, input_text, pos = super().validate(input_text, pos)
# 如果基本验证通过,则进一步检查范围
if state == QValidator.Acceptable:
value = int(input_text)
if value < self.bottom() or value > self.top():
# 如果超出范围,则返回 Intermediate
return QValidator.Intermediate, input_text, pos
# 返回最终的验证结果
return state, input_text, pos
def fixup(self, input_text):
# 如果输入超出范围,修正为最接近的合法值
value = int(input_text)
if value < self.bottom():
return str(self.bottom())
if value > self.top():
return str(self.top())
return input_text
掩码功能允许你限制输入的***文本格式***。掩码是一个字符串,其中包含了一些特殊字符,用来指定用户输入的格式,例如日期、电话号码、信用卡号等。
下面是一些常用的掩码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFormLayout, QLabel, QLineEdit
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator,QValidator
class MaskDemo(QWidget):
def __init__(self):
super(MaskDemo, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('掩码控制')
flayout=QFormLayout(self)
ipEdit=QLineEdit()
ipEdit.setInputMask("000:000:000:000;_")#末尾的下划线 _ 表示占位符,当用户在该位置没有输入时,下划线将会被显示。
macEdit=QLineEdit()
macEdit.setInputMask("HH:HH:HH:HH:HH:HH;_")
dateEdit=QLineEdit()
dateEdit.setInputMask("0000-00-00")
licenseEdit=QLineEdit()
licenseEdit.setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#")
flayout.addRow('ip',ipEdit)
flayout.addRow('mac',macEdit)
flayout.addRow('date',dateEdit)
flayout.addRow('license',licenseEdit)
if __name__=='__main__':
app=QApplication(sys.argv)
demo=MaskDemo()
demo.show()
sys.exit(app.exec_())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。