pyqt5-QLineEdit文本框
1、介绍
单行文本框组件。
class QLineEdit(QWidget):
"""
QLineEdit(parent: typing.Optional[QWidget] = None)
QLineEdit(contents: str, parent: typing.Optional[QWidget] = None)
"""
2、方法
2.1 文本读写
setText(self, a0: str)
- 设置文本,相当于用户直接输入框输入
insert(self, a0: str)
- 在光标处插入文本
text(self) -> str
- 获取文本,即用户输入的
setReadOnly(self, a0: bool)
- 设置输入框是否只读,即不允许编辑。参数类型为bool
- 当设置为只读,将无法选中输入框
isReadOnly(self) -> bool
- 获取是否只读,返回类型bool
setPlaceholderText(self, a0: str)
- 设置占位符提示文本,参数类型是str
- 其作用是当文本框输入文本为空时,显示用于提示
placeholderText(self) -> str
- 获取占位符提示文本,返回类型str
clear(self)
- 将文本框中所有的输入文本内容清除
2.2 键盘操作
copy(self)
- 复制选中的内容,如果没有选中内容,则不进行复制。剪切板中仍然是上一复制的内容
- 注意,当鼠标点击输入框外的组件时,丢失选中内容,无法赋值。这时如果想赋值,必须使用方法setSelection或selectAll进行先选中,再操作
cut(self)
- 剪切选中的内容,如果没有选中内容,则不进行剪切。剪切板中仍然是上一复制的内容
paste(self)
- 粘贴。无参无返回
- 作用是:鼠标在文本框中的光标处插入剪切板中存储的文本。即使该文本框未聚焦,也会有一个光标位置可以使用,默认是末尾处
- 与键盘ctrl+v存在差异,如果是选中某部分文本,ctrl+v的效果是直接替换,而paste方法是在光标处插入
del_(self)
- 相当于键盘的delete按钮,即删除光标所在位置的后一个字符
selectAll(self)
- 选择全部
2.3 选择
selectedText(self) -> str
- 获取选中文本,返回类型str,如果没有选中返回空字符串””
- 注意当前文本框必须聚焦,如果脱离点击了其他组件,选中必然是””
setSelection(self, a0: int, a1: int)
- 设置选中范围,两个参数都是int类型,分别表示起止索引,从0开始,超出不会报错,而是包含末端在内
selectionEnd(self) -> int
- 被选中部分的结束索引,没有选中时,返回-1
selectionLength(self) -> int
- 被选中部分的长度,是实际长度,如果没有选中,返回0
selectionStart(self) -> int
- 被选中部分的开始索引,没有选中时,返回-1
deselect(self)
- 取消选中
hasSelectedText(self) -> bool
- 判断是否有选中,返回bool
2.4 光标
setCursorPosition(self, a0: int)
- 设置光标的位置,参数类型为int
- 一般会在前或后使用setFocus方法聚焦,显示光标位置。当然,不显示,也是会移动的
- 参数范围是0-len,0表示光标在最开始部分。len表示在最末尾部分。1表示光标在索引为1的字符之前。
- 参数超出表达范围,不会进行移动光标。之前是在哪就在哪。
setFocus(self)
setFocus(self, reason: Qt.FocusReason)
- 使输入框聚焦,可以显示光标位置。该方法是QWidget类的
- 默认的话,鼠标点击其他组件,会使输入框组件丢失焦点,光标不再显示。此时光标是有效的。但如果再次点击输入框,光标会根据点击再次确认,也就是说无法观察中间过程的光标。
cursorPosition(self) -> int
- 获取光标位置,int类型
- 参照上面设置时的解释,范围是0-len
setCursorMoveStyle(self, style: Qt.CursorMoveStyle)
- 设置光标移动的样式
3、事件
returnPressed(self) [signal]
- enter键或回车键按下,触发事件
cursorPositionChanged(self, a0: int, a1: int) [signal]
- 光标位置发生改变时触发,a0和a1分别表示变化前后的索引
- 每次改变都会触发,比如拖动光标选择文本时,会触发多次
- 组件创建时,光标位置默认为-1,初次点击聚焦,光标位置变为0
- 点击其它组件,文本框会失去焦点,光标不再显示,此时光标位置不会变化。直接聚焦文本框,光标位置显示原位置。但是手动点击文本框聚焦,会改变光标位置,具体的改变由点击时鼠标位置决定
textEdited(self, a0: str) [signal]
- 文本直接输入编辑,会触发该事件。并不一定是触发输入字符的次数,输入法一次性输入多个字符但实际只触发一次
- 键盘按钮粘贴、删除等操作,都会触发事件。触发次数由操作次数决定
- 调用clear方法,不会触发
- 调用del_方法,如果光标在末尾,调用方法后未发生改变则不触发。反之则会触发
- setText方法不会触发,insert方法触发
- 调用paste方法,会触发
textChanged(self, a0: str) [signal]
- 文本发生变化触发
selectionChanged(self) [signal] # 选中部分发生改变
- 手动选择时,在拖动过程中,会持续触发该事件。
- 拖动的中间过程,即使拖动速度再快、选择文本字符数再少,也会触发10余次事件,相邻的事件时选中文本可能相同
- 单方向拖动,相邻事件时选中文本除了相同,也可能跳跃1个字符或多个字符的选中状态
- 选中过程中停顿,选中文本没有变化,此时只会触发少数几次事件,当继续拖动时,选中文本变化,又会触发少数几次事件。即停顿不会触发任意多次事件
- 点击其它组件,会导致选中文本变为空字符串,触发该事件
- setSelection方法,只会触发一次。由setSelection方法设置选中,并不会因为点击其它组件而导致选中文本变为空字符串,也因此不会触发事件