【Hello,PyQt】pyqt5中的QLineEdit控件 您所在的位置:网站首页 pyqt5移除控件 【Hello,PyQt】pyqt5中的QLineEdit控件

【Hello,PyQt】pyqt5中的QLineEdit控件

2024-07-01 07:11| 来源: 网络整理| 查看: 265

PyQt5 是一个强大的Python库,用于创建图形用户界面(GUI)。其中,QLineEdit 控件作为一个简单而实用的组件,经常用于接受用户的单行文本输入,甚至可以用来进行输入格式的限制。这篇博客中将介绍 QLineEdit 控件的各种功能和用法,帮助您更好地利用这个神奇的控件。

什么是QLineEdit控件?

QLineEdit是PyQt5中的一个基本控件,主要用于接受用户的单行文本输入。除了基本的文本输入功能外,它还支持一些附加功能,包括回显模式、输入限制和验证、信号与槽机制等。

创建第一个QLineEdit控件

让我们从一个简单的例子开始,创建一个基本的 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) 程序预览 在这里插入图片描述 QLineEdit的功能 文本输入和文本编辑

通过下面的程序可以直观的了解此功能,该程序创建了一个窗口,包含一个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:

在这种模式下,用户输入的内容不会被显示出来。这意味着用户在输入框中看不到任何字符,使用过linux系统的用户应该有感受。

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方法。

validate: 这个方法被用于验证输入的文本是否符合要求。你要在这个方法里面实现自定义的验证逻辑,如果输入的文本不符合要求会返回QValidator.Invalid,如果输入的文本是部分符合要求的会返回QValidator.Intermediate,如果输入的文本完全符合要求会返回QValidator.Acceptable。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.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.top(): return str(self.top()) return input_text 输入掩码

掩码功能允许你限制输入的***文本格式***。掩码是一个字符串,其中包含了一些特殊字符,用来指定用户输入的格式,例如日期、电话号码、信用卡号等。 下面是一些常用的掩码:

‘0’: 表示任意数字字符‘9’: 表示可选的数字字符‘#’: 表示数字字符或空格字符‘L’: 表示任意字母字符‘a’: 表示可选的字母字符‘A’: 表示任意字符‘N’: 表示任意大写字母字符‘n’: 表示可选的大写字母字符‘X’: 表示任意小写字母字符‘x’: 表示可选的小写字母字符‘H’: 表示任意十六进制字符‘h’: 表示可选的十六进制字符‘B’: 表示任意二进制字符‘b’: 表示可选的二进制字符‘>’: 大于符号,表示用户输入的值必须大于掩码中此字符之后的数字。‘


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有