首页 > 其他分享 >Pyside6 键盘输入控件---单行文本框QLineEdit

Pyside6 键盘输入控件---单行文本框QLineEdit

时间:2024-10-08 22:53:40浏览次数:9  
标签:__ 控件 None self 文本框 --- QLineEdit 文本 光标

1.QLineEdit的介绍(官翻)

单行文本编辑器允许用户输入和编辑单行纯文本,具有一些实用的编辑功能,包括撤销和重做,剪切和粘贴,以及拖放。

通过修改行编辑器的echomde(),它还可以用作只写字段,用于输入密码等信息。

QTextEdit是一个与之相关的类,它允许多行、富文本编辑。

使用maxLength属性定义文本的最大允许长度。可以使用inputMask属性和setValidator()进一步约束文本内容。

可以用setText()或insert()来修改文本。使用text()来取得文本,使用displayText()来取得显示的文本(可能不同,请参见echomde)。可以使用setSelection()或selectAll()来选择文本,还可以使用cut()、copy()和paste()来剪切所选文本。要对齐文本,请使用setAlignment()。

当文本发生变化时,就会触发textChanged()信号。如果不是通过调用setText(),而是通过其他方式改变了文本,就会触发textEdited()信号。当移动游标时,会触发cursorPositionChanged()信号。当选择了Return或Enter键时,就会发出returnPressed()信号。

当文本编辑完成时,无论是因为行编辑失去焦点,还是选择了Return/Enter,都会发出editingFinished()信号。

如果行编辑焦点丢失而没有任何文本更改,则不会发出editingFinished()信号。

如果在edit行上设置了验证器,则只有在验证器返回QValidator.accept时才会发出returnPressed() / editingFinished()信号。

有关使用QLineEdit的多种方式的更多信息,请参阅行编辑示例,它还提供了一些行编辑示例,这些示例显示了各种属性和验证器对用户提供的输入和输出的影响。

默认情况下,QLineEdits具有平台样式指南中指定的框架。调用setFrame (false)可以取消框架。

默认键盘键位绑定:

键位动作
<--(键盘方向键左键)光标左移一个字符
shift + <--光标向左移动并选择一个字符。
-->光标左移一个字符
shift +  -->光标向左移动并选择一个字符。
 Home光标移至行首
End光标移至行尾
Backspace 删除光标左侧字符
Ctrl + Backspace 删除光标左侧单词
Delete删除光标右侧字符
Ctrl+Delete 删除光标右侧单词
Ctrl+A全选
Ctrl+C复制
Ctrl+Insert复制
Ctrl+K当前光标位置删除至行位
Ctrl+V 粘贴
Shift+Insert粘贴
Ctrl+X 剪切
Shift+Delete 剪切
Ctrl+Z撤销
Ctrl+Y 重做

2.QLineEdit的相关方法

API函数

参数说明

返回值

功能作用

QLineEdit(self,  parent)

parent:

QWidget

None

创建一个单行文本框

QLineEdit(self, arg__1, parent)

arg__1: str

 parent:QWidget

None

创建一个单行文本框

addAction(self, action,position)

action:QAction

postion: 

QLineEdit.ActionPosition

None

在指定位置添加动作按钮

addAction(self, icon,position)

icon:QIcon

postion:

QLineEdit.ActionPosition

QAction

在指定位置添加动作按钮

setAlignment(self, flag)

flag: Qt.AlignmentFlag

None

设置文本框文字对齐方式

alignment(self)

None

Qt.AlignmentFlag

设置文本框文字对齐方式

backspace(self)

None

None

删除光标左侧或选中文字

clear(self)

None

None

清空文本框

setCompleter(self, completer)

completer:

QCompleter

None

设置自动补全器

completer(self)

None

QCompleter

获取自动补全器

copy(self)

None

None

复制选中文字

cut(self)

None

None

剪切选中文字

paste(self)

None

None

粘贴选中文字

createStandardContextMenu(self)

None

QMenu

该函数创建标准上下文菜单,当用户用鼠标右键单击行编辑时显示该菜单。

cursorBackward(self, mark, steps=1)

mark: bool, steps: int = 1

None

将光标向后移动step个字符。

cursorForward(self, mark, steps=1)

mark: bool, steps: int = 1

None

将光标向前移动step个字符。

cursorWordBackward(self, mark)

mark:bool

None

将光标向后移动一个单词

cursorWordForward(self, mark)

mark: bool,

None

将光标向前移动一个单词

home(self, mark)

mark: bool,

None

将光标移动到行首

end(self, mark)

mark: bool,

None

将光标移动到行尾

setCursorMoveStyle(self, style)

style:

Qt.CursorMoveStyle

None

设置光标移动样式

cursorMoveStyle(self)

None

style: Qt.CursorMoveStyle

获取光标移动样式

setCursorPosition(self, arg__1)

arg__1: int

None

设置光标的当前位置.

cursorPosition(self)

None

int

获取光标的当前位置,默认为0

cursorPositionAt(self,pos)

pos:QPoint

int

获取光标相对于给定坐标点的位置。

cursorRect(self)

None

QRect

返回包含光标一圈的矩形尺寸

deselect(self)

None

None

取消选择已选中的任何文本

displayText(self)

None

str

获取显示的文本

setDragEnabled(self, b)

b:bool

None

设置被选中文本是否可以拖动

dragEnabled(self)

None

bool

获取被选中文本是否可以拖动,默认情况下是False

setEchoMode(self, arg__1)

arg__1:

QLineEdit.EchoMode

None

设置掩码显示模式

echoMode(self)

None

QLineEdit.EchoMode

获取掩码显示模式

hasAcceptableInput(self)

None

bool

获取是否满足掩码和验证其的要求

setInputMask(self, inputMask)

inputMask:str

None

设置固定输入格式

inputMask(self)

None

str

获取固定输入格式

setValidator(self, arg__1)

arg__1: 

QValidator

None

设置验证器

validator(self)

None

QValidator

获取验证器

setFrame(self, arg__1)

arg__1: bool

None

设置是否拥有框架外观标识

hasFrame(self)

None

bool

获取是否拥有框架外观标识

hasSelectedText(self)

None

bool

返回是否有选中的文本

inputMethodQuery(self, arg__1)

arg__1: Qt.InputMethodQuery

any

设置输入法的查询

insert(self, arg__1)

arg__1: str

None

在光标位置插入字符串,字符串需满足验证结果

setClearButtonEnabled(self, enable)

enable: bool

None

设置是否加载清空按钮

isClearButtonEnabled(self)

None

bool

获取是否设置清空按钮

isModified(self)

None

bool

获取文本内容是否被修改

setModified(self, arg__1)

arg__1: bool

None

函数方法强制修改文本修改属性的值(True或False)

setReadOnly(self, arg__1)

arg__1: bool

None

设置文本是否只读

isReadOnly(self)

None

bool

获取文本是否只读

redo(self)

None

None

重做

isRedoAvailable(self)

None

bool

获取是否可以重做,默认为False

undo(self)

None

None

撤销

isUndoAvailable(self)

None

bool

获取是否可以撤销,默认为False

setMaxLength(self, arg__1)

arg__1: int

None

设置文本的最大长度

maxLength(self)

None

int

获取文本的最大长度,默认为32767

setPlaceholderText(self, arg__1)

str

None

设置占位文字

placeholderText(self)

None

str

获取占位文字

selectAll(self)

None

None

选中所有文本(高亮显示)

selectedText(self)

None

str

获取被选中的文本

selectionStart(self)

None

int

获取选中文字的开始字符索引,未选中任何文字返回-1

selectionEnd(self)

None

int

获取选中文字的末尾字符索引

selectionLenth(self)

None

int

获取选中文字的长度

setSelection(self, arg__1, arg__2)

arg__1: int,

arg__2: int

None

从光标开始位置选中指定长度的文字

参数1是光标位置,参数2是选中文本长度

setText(self, text)

text:str

None

函数方式向文本框中输入文本

text(self)

None

str

获取文本框中的文本

setTextMargins(self, left, top, right, bottom)

left: int, top: int,

right: int, bottom: int

None

设置文本边距

textMargins(self)

None

QMargins

获取文本边距

sizeHint(self)

None

QSize

返回文本框的建议尺寸

minimumSizeHint(self)

None

QSize

返回文本框的最小尺寸

1)QLineEdit的文本内容的设置

QLineEdit继承自QWidget。

单行文本框允许用户使用键盘进行编辑,输入内容。通常用作账户、密码、个人信息等简短信息的采集。与之对应的还有多行文本编辑器QTextEdit,QTextEdit通常作为大型文档的界面使用,如wps等。

默认情况下,单行文本框是允许用户编辑的,但可以通过setReadOnly()方法进行启用或者禁用编辑功能。

QLineEdit的键盘输入默认绑定了一些键位用于特定的操作,如常用的复制、粘贴等。具体键位与对应的操作前面介绍中已经列出。这些键盘操作,对于编程人员Pyside6也给出相应的函数调用,如copy()、paste()、redo()、undo()等等。

编程人员的函数输入方式通常采用setText()方法,输入内容只能是纯文本(即富文本,markDown格式文本都无法显示效果)。

setText()方法输入文本会覆盖原有文本框中所有的文本内容,如果仅仅需要插入一段文字,函数方法可以使用insert()方法,insert()方法需要配合光标位置操作,才能将需要插入的文字放置在预想的位置。比如我想在“我爱祖国”中插入“我的”这两个字符,变为“我爱我的祖国”,就需要将光标移到“我爱”之后,再调用insert()方法。

既然说了QLineEdit是对简短信息的采集,如用户名和密码,那么采集完这些数据后大多数情况下会发送至数据库。数据库为方便字段管理和安全通常会限制字段长度。那么字段采集框QLineEdit当然也要做相应的限制。具体内容的限制,如大小写,符号等需要通过验证器(后面学习),而字段长度就需要使用setMaxLength( )方法来限制。

获取文本框中的内容使用text()方法与displayText( )这两个方法,这两个方法的区别在于掩码的设置:text()方法会显示实际输入内容,而displayText()方法则可能仅仅显示“......”的掩码(具体见后面掩码小节)。

2)QLineEdit的文本光标操作

所谓的光标QTextCursor,就是编辑框中一闪一闪的指示符,它在QLineEdit中是无法获取的,而在QTextEdit中是可以获取并进行操作的。

虽然无法直接获取QTextCursor对象进行操作,但是QLineEdit为我们提供操作光标的相关方法。如,刚才说的要在“我爱祖国”中插入“我的”两个字符,可以采用下列几个流程:

第一种:先使用home()或者end()方法将光标移动到行首或者行尾,再调用cursorForward(self, mark, steps=1)或者cursorBackward(self, mark, steps=1)方法将光标移动至position = 2的位置,然后再调用insert()方法。

cursorForward(self, mark, steps=1)和cursorBackward(self, mark, steps=1)这两个函数的用法是将光标前或者向后移动setps个位置,默认为1。当我们设置为steps=2的时候,调用一次函数就会移动两个位置,比如光标目前在行首,位置为0,调用cursorForward()后,就会将光标移动到2。

当然,如果文本框中没有内容,是无效的。mask参数,如果是True,光标移动时会附带选中文本内容,Flase,则不会选中。比如:目前文本框内容为“我爱祖国”,光标位置为4,即在“国”之后。调用cursorBackward(self, True, steps=2),光标将会移动到“爱”之后,同时,“祖国”两个字会被选中。

第二种:使用cursorPosition( )方法,获取当前光标的位置,在调用cursorForward( )或者cursorBackward( )方法将光标移动到相应位置。如““我爱祖国”字符,此时光标位置为1,即在“我”之后。调用cursorForward( )方法,steps = 1,将光标移动到“爱”之后,在insert()方法。

第三种:最简单直接的,setCursorPosition()。无论光标现在的位置在哪里,直接将光标位置设置到需要的位置。

在文本光标的设置中,cursorMoveStyle( )是用来设置键盘左右方向键对光标影响的方法,其参数是一个枚举了:

枚举类

枚举常量

枚举值

功能描述

Qt.CursorMoveStyle

LogicalMoveStyle

在从左向右的文本块内,按左箭头键时减少光标位置,按右箭头键时增加光标位置。如果文本块是从右到左,则行为相反。
VisualMoveStyle

不管文本块是从左至右还是从右至左,左箭头都减少光标位置,右箭头都是增加光标位置。

这个方法是针对用户在使用键盘“<--”和“--->”时的设置。

首先我们要明确什么是从左到右的文本块和从右到左的文本块。这是与各个国家与地区的书写习惯相关的,书写习惯就定义了计算机中的书写系统。

现代汉字的书写系统是从左至右的,而古代的汉语就是从右至左,现代的阿拉伯语、维吾尔语都是从右至左的书写系统。所以,LogicalMoveStyle类型就是遇到从右至左的书写系统,左右箭头的作用就会相反。但是,通常情况下,光标配合键盘还是VisualMoveStyle类型设置好一些。

cursorPositionAt(self,pos)与cursorRect(self)基本用不到,因为你无法获取QTextCursor对象,所以没啥意义。

3)QLineEdit的选中操作

选中操作实际也是通过操作光标来完成的,从上一小节中的cursorForward( )和cursorBackward( )

方法,我们也能看出大概。

光标选中的原理,实际如下:首先在光标当前位置设置锚点,然后移动光标,那么锚点与光标的最终位置之间就是选中的内容(这个到学习QTextEdit时就能理解)。

通常,用户操作的选中是通过鼠标按住左键移动进行的,而编程人员通过函数选中内容的话,需要使用setSelection()方法。

setSelection()方法有两个参数,第一个参数是光标位置,第二个参数是选中字符长度。如QLineEdit中的内容是:“我爱我的祖国”,setSelection(1,4)的结果就是“爱我的祖”。

这里虽然我们为了说明问题给出了选中的结果,但是实际上setSelection()是不会返回结果的,它只会标识选中的内容(蓝色高亮)。

而想要获取选中的结果,就需要使用selectedText( )。我们也可以通过selectionStart( )。selectionEnd()、selectionLenth()分别获取选中字体的首字符、尾字符和字符长度。

有时,我们需要对选中的文字进行操作。如果没有选中的文字,那么selectedText( )返回值是空字符串,下面的代码如果是对空字符串进行操作就会报错,如正则表达式匹配。所以,在必须确保有选中文本内容时,方法就派上了用场,只要“if hasSelectedText( ):”就Ok了。​

4)QLineEdit的掩码设置和浮显设置

所谓的掩码,就是输入时掩人耳目的显示字符。大多数登录界面的密码栏或需要输入密码的位置,基于安全考虑,软件设计者都会将你输入的密码变为“*********”这种样式,这就是掩码设置。

QLineEdit通过setEchoMode()方法进行掩码设置,它的参数是一个枚举类:

枚举类

枚举常量

枚举值

功能描述

QLineEdit.EchoMode

Normal

在输入时显示字符。这是默认设置

NoEcho

不要显示任何内容。对于连密码长度都需要保密的密码,这种方式可能比较合适。

Password

显示密码的掩码字符,而不是实际字符。可能是“• ”,有的系统可能是“*”

PasswordEchoOnEdit

输入的时候显示正常字符,失去焦点变掩码字符

与掩码设置配套使用的是addAction()方法,其参数position是一个枚举类:

枚举类

枚举常量

枚举值

功能描述

QLineEdit.ActionPosition

LeadingPosition

action放在前面

TrailingPositio

action 放在后面

这个方法的作用是为单行文本框添加一个action,作用是什么呢,见下图:

我们登陆或者注册的时候,填写密码如果设置掩码自己也是看不到的,那么点击这个眼睛就可以看到密码的内容了。这种场景的具体实现方法如下:

首先将文本框掩码类型设置为Password,即setEchoMode(QLineEdit.EchoMode.Password)。然后创建一个QAction对象,将QAction对象的icon设置为闭眼的图片。再将QAction对象triggered信号链接到槽函数。

槽函数中进行判断,如果当前icon是闭眼图片就改为睁眼图片,同时将掩码模式设置为Normal,否则icon为睁眼模式,并将掩码模式改为Password。

方法setClearButtonEnabled( )则是为文本框添加一个清空按钮,点击后效果等同于调用clear()。

setPlaceholderText()用于设置浮现文字。而所谓的浮显设置,就是用于提示用户输入内容和注意事项的底纹字符,如下图:

5)QLineEdit的格式文字输入

有的时候我们需要输入固定格式的文本,如IP地址,日期等,就可以用setInputMask()方法来设置这种固定的文本格式。例如setInputMask(“000.000.000.000”)可以用来设置IP地址,而设置日期就可以写作setInputMask("HHHH.HH.HH HH:HH:HH”).

当然,其中的字符是有规定的,具体规定如下格式化输入字符表:

字符

含义

A

ASCII字母是必须的,取值A-Z,a-z

a

ASCII字母是允许的,但不是必须的

N

ASCII字母和数字是必须的,取值A-Z,a-z,0-9

n

ASCII字母和数字是允许的,但不是必须的

X

任何字符都是必须的

x

任何字符都是允许的,但不是必须的

9

ASCII数字是必须的,取值0-9

0

ASCII数字是允许的,但不是必须的

D

ASCII数字是必须的,取值1-9

d

ASCII数字是允许的,但不是必须的,取值1-9

#

ASCII数字和加/减号是允许的,但不是必须的

H

十六进制字符是必须的,取值范围A-F,a-f,0-9

h

十六进制字符是允许的,但不是必须的

B

二进制字符是必须的,取值范围0、1

b

二进制字符是允许的,但不是必须的

>

所有字符字母都大写

<

所有字符字母都小写

!

关闭大小写转换

\

转义字符

;c

终止输入掩码,并把空余输入设置成c

如我们设置setInputMask("HHHH.HH.HH  HH:HH:HH”),效果如下:

输入内容前:

输入内容后:

6)QLineEdit的自动补全器

setCompleter()方法是为单行文本框设置一个自动补全器,其参数是补全器对象QCompleter。所谓的自动补全,即开发人员提前设计,用户在输入的时候可以得到联想词组。QCompleter还可以用于QComboBox及QFileSystemModel中,QCompleter类的具体使用由于牵扯较多模型/视图的内容,我们将在后面模型/视图章节具体介绍,这里只介绍简单的列表设置方式。

API函数

参数说明

返回值

功能作用

QCompleter(self, completions, parent)

completions: Sequence[str] parent:QObject

None

创建一个完成器对象

如上图:我们可以使用如下代码设置和添加完成器:

comp = QCompleter(["中国","中央","中产阶级"],self)
le = QLineEdit(self)
le.setCompleter(comp) 

7)QLineEdit的右键菜单

在QMenu中我们已经介绍了QWidget及其子类的右键菜单的创建方法,这里就不多做赘述。此处主要是介绍QLineEdit的createStandardContextMenu(self)方法,它是为文本框创建一个Pyside6标准的右键菜单,同时它的将被创建的菜单作为返回值返回。但这个右键菜单不是很完整,我们可以利用其返回值的QMenu进行修改完善后再设置给文本框。

实际上,当我们创建QLineEdit()对象后,它已经包含了一个标准的右键菜单。如图:

但是,如果我们相对其进行修改,是办不到的,因我们无法获取到QMenu对象。而createStandardContextMenu(self)则是创建一个菜单并同时将QMenu对象返回,我们可以打印下这个QMenu的actions,和默认的是一摸一样的,这就为我们修改QMenu提供了便利。

8)QLineEdit的拖放操作

对于控件的拖拽与放置通常是通过其QDragMoveEvent和QDropEvent来进行的。但QLineEdit提供了方便的函数setDragEnabled()用于开启文本框是否开启选中文本的移动,而文本文本框是否接受其他控件中移动过来的内容可以通过继承自QWidget的setAcceptDrops()方法来设置。默认情况下QLineEdit是接受放置而不能将选中文本拖动的。

9)QLineEdit的验证器

当我们在设计单行文本框作为用户名或密码输入框时,想要限制用户的输入,比如要求用户输入的密码不能超过18位,是大小写字母和数字的组合等等。此时,我们可以通过text()方法获取用户输入的文本通过正则表达式进行判定,但是这样就必须设置一个按钮,让用户确认完成输入。QLineEdit为我们提供了一个动态的验证方法,就是使用setValidator()。它的参数QValidator是一个抽象类无法直接使用,Qt为我们提供了三个可以直接使用的便利子类:QIntValidator,QDoubleValidator,QRegExpValidator。

QIntValidator,QDoubleValidator分别用来设置合法整数和合法浮点数,而QRegExpValidator用来结合正则表达式来判断输入的合法性。我们也可以子类化QValidator,来自己定义一个符合要求的验证器。而自定义验证器就需要创建QValidator()对象以及实现他的validate()和fixup()方法。

API函数

参数说明

返回值

功能作用

QValidator(parent)

parent:QWidget

None

创建一个验证器类

validate(self, arg__1, arg__2)

arg__1: str

arg__2: int

tuple(state,str,int)

验证器的验证函数,返回值为验证是否通过

fixup(self, arg__1)

arg__1: str

str

对QValidator.Invalid的数据给予一次修正的提示,返回值默认为空字符串。

自定义子类验证器的步骤如下:

第一步:重写validate(),他的形参是一个字符串和一个int类型,分别代表当前已输入的字符和光标位置,而不是输入结束(失去焦点或Enter)。而方法的返回值就是一个对验证结果的反馈标识,其是一个包含验证结果,字符串和int的一个元组,样式为(QValidator.State,p_str,p_int)这个字符串和int我们不用设置数据,因为它是直接接受函数的形参再返回的。而QValidator.State是一个枚举类,如下:

枚举类

枚举常量

枚举值

功能描述

QValidator.State

Invalid

验证结果为无效

Intermediate

验证结果为中间态

Acceptable

验证结果有效

这几个枚举值需要举例进行解释:比如我们的验证器要求值在10-100之间,那么输入的值在10-100之间的返回状态就是Acceptable,如果小于10或者大于100就是Invalid。而在我们实际输入的过程中,我们要输入25,当然是先输入“2”在输入“5”。那么当我们输入2的时候,2<10,那么验证器就会返回状态Invalid,这样显然不合理。那么我们就将2设置为一个中间态Intermediate,含义就是暂时认为你合格,输入过程不作处理,等输入结束(失去焦点或Enter)再做判断。需要说明的如果返回结果是Invalid,输入的字符不会显示。

这里需要理解的是,我们每输入一个字符、删除字符或者粘贴等改变内容,QValidator都会调用validate(),当然输入结束也会调用validate()方法。

第二步  实现fixup()方法,此方法不是必须实现的,看个人需要。它的目的在于对中间态的验证Intermediate结果进行一次处理,也可以不处理(具体需要)。但是有的情况是必须处理的,比如上面我们提到的例子,当我们输入2的时候就结束编辑,那么此时validate()的状态就是中间态Intermediate,而且文本框中又被显示出来,这显然也是不符合我们的需求的,此时程序会自动调用fixup()方法。在fixup()方法中我们可以弹框提示错误,也可以将文本框内容清空,亦或者强制重新输入(焦点返回文本框,继续输入)。fixup()执行完毕后又会再次自动调用validate()方法,并将其返回值发送给validate()方法方法的p_str参数,所以fixup()的要求是一个字符串。需要说明的整个过程中fixup()方法只会执行一次,也就是说其返回值发送给validate()后,如果发送的字符串的验证结果还是中间态Intermediate,最终程序也就会结束,不会再一次去调用fixup()方法(如果允许再调用就成了无限循环了)。

我们看下面的例子:

from PySide6.QtWidgets import QWidget, QApplication, QLineEdit, QErrorMessage
from PySide6.QtGui import QValidator
import sys

class MyValidator(QValidator):
    def validate(self, p_str, p_int):
        """
        对接收的数据进行判定,当文本框不为空且p_str是数字字符串的时候,数值在10-100
        之间时,返回Acceptable;数值在1-10之间时为Intermediate,否则为Invalid,
        即大于零。
        而当文本框为空时,返回中间状态。
        """
        if len(p_str) != 0 and p_str.isdigit():
            if 10 <= int(p_str) <= 100:
                return (QValidator.State.Acceptable, p_str, p_int)
            elif 1 <= int(p_str) < 10:
                return (QValidator.State.Intermediate, p_str, p_int)
            else:
                return (QValidator.State.Invalid, p_str, p_int)
        elif len(p_str) == 0:
            return (QValidator.State.Intermediate, p_str, p_int)
        else:
            # 弹出错误对话框提示错误
            if p_str == "输入错误":
                QErrorMessage(self.parent()).showMessage("请输入10-100之间的数!")
            return (QValidator.State.Invalid, p_str, p_int)

    def fixup(self, p_str):
        """
        从 validate()得到,中间状态有两种,一种文本框为空,另一种为
        数值在1-10之间。那么,当小于文本框为空时,不做处理。当数值在1-10
        之间是,返回字符串“输入错误”给validate()。validate()接收到
        “输入错误”字符串后弹出错误对话框,而后结束。
        """
        if len(p_str) != 0:
            return "输入错误"


class MyWindow(QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.resize(600, 500)

        le = QLineEdit(self)
        le.move(100, 100)

        le1 = QLineEdit(self)
        le1.move(100, 200)

        valiator = MyValidator(le)
        le.setValidator(valiator)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec())

运行结果:

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="XYqemMTY-1728399012118" src="https://live.csdn.net/v/embed/428378"></iframe>

20241008-222522

对于QValidator的便利子类,都比较简单,创建方法如下:

API函数

参数说明

返回值

功能作用

QIntValidator(bottom,top,parent)

bottom:int

top:int

parent:QWidget

None

创建一个整型验证器类

QDoubleValidator(bottom,top,decimals,parent)

bottom:int

top:int

decimals:int

parent:QWidget

None

创建一个浮点型验证器类

QRegularExpressionValidator(self, re,parent)

re:

Union[QRegularExpression, str]

parent:QWidget

None

创建一个正则表达式验证器类

整型验证器QIntValidator(bottom,top,parent),其参数bottom和top分别为最小值和最大值。好比前面10-100的例子,10就是bottom,100就top。需要说明的是,默认情况下,QIntValidator的最大值做了限制,即大于top将是Invalid。但是,对于最小值没有优化,当值小于bottom,完成输入时,不会提示或报错。如果要使用,可以自己继承QIntValidator,然后在fixup()方法中自己优化。

浮点型验证器QDoubleValidator(bottom,top,decimals,parent)中,其他参数含义与QIntValidator一致,而decimals参数表示小数点位数。这个方法Qt内部基本没有实现,完全无效。同理,如果想使用,就必须自己内部进行参数设置以及validate()和fixup()的实现。

QRegularExpressionValidator的参数QRegularExpression是一个正则表达式类(关于正则表达式请参看python的基础教程)。对于邮箱、网址等的验证非常方便。

QLineEdit的相关重要的方法已经介绍完毕,其他诸如文本对齐之类方法就很简单,不再过多说明。

3.QLineEdit的信号

信号

参数说明

返回值

功能作用

cursorPositionChanged(oldpos, newpos)

oldpos:int

newpos:int

光标位置发生变化时发送信号,参数分别为光标的原位置和新位置

editingFinished()

None

按Enter或失去焦点时发送信号

inputRejected()

None

拒绝输入时发送信号

returnPressed()

None

按Enter时发送信号

selectionChanged()

None

选中文本改变时发送信号

textEdited(text)

text:str

文本被编辑是发送信号,setText()方法不会发送信号

textChanged(text)

text:str

文本发生改变时发送信号,setText()方法会发送信号

这几个信号里面需要说明的是:

在没有设置验证器的情况下,inputRejected信号不会被触发,editingFinished在失去焦点和Enter的时候都会触发,returnPressed在Enter时会被触发。

在设置验证器的情况下,editingFinished和returnPressed都只在输入内容为Accetpable的情况下Enter才会触发,失去焦点不会被触发。inputRejected在输入内容为Invalid的时候才会触发。

标签:__,控件,None,self,文本框,---,QLineEdit,文本,光标
From: https://blog.csdn.net/love_songming/article/details/142743181

相关文章

  • 基于Echarts+HTML5可视化数据大屏展示-大数据可视化通用版
    博主主页:猫头鹰源码博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作​主要内容:毕业设计(Javaweb项目|小程序|Python|HTML|数据可视化|SSM|SpringBoot|Vue|Jsp|PHP......
  • 【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习
    【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习0.论文信息Title:UnsupervisedHumanPreferenceLearningAuthors:SumukShashidhar,AbhinavChinta,VaibhavSahai,DilekHakkaniTurComments:EMNLP2024MainConferencehttps://arxiv.or......
  • 为什么张雪峰推荐普通人家的孩子考研考计算机?从阿里一面面试题说起:剑指 offer - 159:库
    张雪峰推荐普通人考研考计算机相关专业,主要是因为计算机技术在现代社会中薪资水平相对较高。另一方面,也是计算机专业在平时就学习了数据结构等课程,在招聘前冲刺复习的时候比像我这样的非科班选手要省下不少精力。拿我经历过的阿里巴巴C++后端一面来说,面试官考察了最基本的......
  • Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效
    嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法用户体验成为了检验产品成功与否的关键因素。而动画效果,作为提升用户体验的重要手段,在网页和应用开发中扮演着举足轻重的角色。今天,就让我们一起来探索一款名为Auto-Animate的动画工具,它......
  • D29【python 接口自动化学习】- python基础之输入输出与文件操作
    day29格式化输出学习日期:20241006学习目标:输入输出与文件操作﹣-41格式化输出:如何将执行结果通过屏幕输出?学习笔记:三种常用的格式化输出方式 百分号方式 format函数方式 总结1.格式化输出是为了让提示信息和输出的结果更人性化2.可以根据输出的复杂度和特点,......
  • D30【python 接口自动化学习】- python基础之输入输出与文件操作
    day30F-strings输出学习日期:20241007学习目标:输入输出与文件操作﹣-42F-strings-如何通过定义好的格式进行输出?学习笔记:F-strings介绍F-strings的计算功能F-strings宽度和精度调整练习#宽度为10个字符,不足补0print(f'{number:010}')#000123.456#指定类......
  • D31【python 接口自动化学习】- python基础之输入输出与文件操作
    day31文件的打开学习日期:20241008学习目标:输入输出与文件操作﹣-43常见常新:文件的打开学习笔记:文件的概念使用open()函数打开文件文件路径处理文件打开模式总结文件操作包括:打开,关闭,读取,写入类Unix系统中设备,虚拟设备,网络套接字等都被当作文件可以学......
  • 记录MinGW-64 windows下载问题(很大一个坑)
    近期因为某些原因,需要在windows中下载MinGW工具集,但是却遇到了很大一个坑。问题描述:按照网上很多教程,在sourceforge网站上下载,链接如下。sourceforge下载MinGW如下图,进入该网址后,点击DownloadLatestVersion按钮,发现只能下载源码,因为缺乏对源码的编译经验(经验不太够),导致遇......
  • 7-1单链表的基本操作
    题目:7-1单链表基本操作分数20作者朱允刚单位吉林大学请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。输入格式:输入第1行为1个正整数n,表示当前单链表长度;第2行为n个......
  • Eplan插件 - 自由文本编辑器
    前言使用此插件可以快速完成对项目中的自由文本、路径功能文本的修改、删除等操作。插件介绍用户界面插件UI界面进行了更新,相比较之前的插件界面风格更清爽简洁。功能介绍插件批量将选中文本中的源文本替换为修改文本。插件支持多种选择方式,可以在绘图区选中文本,也可在......