pyqt5-QComboBox下拉列表
1、介绍
下拉列表。
class QComboBox(QWidget):
""" QComboBox(parent: typing.Optional[QWidget] = None) """
注意:方法调用时,对于必要参数,不能直接使用形参名传递,而只能按顺序传递,否则会报异常崩溃。
2、项的增删改查方法
addItems(self, texts: Iterable[str])
- 批量添加项
addItem(self, text: str, userData: Any = None)
addItem(self, icon: QIcon, text: str, userData: Any = None)
- 添加单个项
- text表示添加的显示文本,为必要参数
- userData表示用户数据,不直接显示,可以是任意类型,一般是当其值与text不同时进行声明绑定,以待获取
- icon表示图片,在text文本前显示。
insertItem(self, index: int, text: str, userData: Any = None)
insertItem(self, index: int, icon: QIcon, text: str, userData: Any = None)
- 添加单个项,参数使用参考addItem
- index表示添加项的索引,从0开始
- 如果是设置一个超出当前范围的索引,则相当于调用的addItem,其索引对应最大值
insertItems(self, index: int, texts: Iterable[str])
- 批量添加
setItemText(self, index: int, text: str)
- 设置某项的文本
- 索引超出范围时,不报异常,也无任何执行
setItemData(self, index: int, value: Any, role: int = Qt.ItemDataRole.UserRole)
- 设置某项的用户数据
setItemIcon(self, index: int, icon: QIcon)
- 设置某项的图片
removeItem(self, index: int)
- 移除某项
- 索引超出范围时,不报异常,也无任何执行
- 移除某项后,其余项的索引仍然是从0开始,递增1
itemText(self, index: int) -> str
- 获取某项的文本
- 索引超出范围时,不报异常,返回空字符串
itemData(self, index: int, role: int = Qt.UserRole) -> Any
- 获取某项的用户数据
- 索引超出范围或者未设置该项的userData属性时,不报异常,返回None
itemIcon(self, index: int) -> QIcon
- 获取某项的图片
3、current相关方法
存在一个对象记录组件的当前项,获取当前项的text、index和data,实际是调用该对象的属性进行获取
- 当前项对象的文本,会在组件中直接显示
- 如果组件中没有任何项,比如还未添加任何项、调用clear方法后或者逐一移除完所有项,当前项对象为None,其text、index和data,分别为空字符串、-1和None,组件直接显示为空字符串
- 如果组件中存在项,则当前项对象,默认是赋值为索引0的项
- add方法是在组件的末尾添加,不会影响当前项对象
- insert方法
- 如果是在当前项的索引之后操作,不影响当前项对象
- 如果是对当前项的索引本身及之前操作,当前项对象的索引会增大inset的项的个数,当前项的文本不变
- remove方法
- 如果是在当前项的索引之后操作,也不影响当前项对象
- 如果是对当前项的索引本身操作,当前项对象被删除,如果该对象之后存在项,则当前项对象会变为该对象之后紧邻的项;如果该对象之后不存在项,则当前对象变为该对象紧邻的前一个项。
- 如果是对当前项的索引之前操作,则当前项对象的索引会-1,当前项的文本不变
currentText(self) -> str
- 获取当前项的文本
- 如果组件没有任何项,则返回空字符串
currentIndex(self) -> int
- 获取当前项的索引
- 如果组件没有任何项,则返回-1
currentData(self, role: int = Qt.ItemDataRole.UserRole) -> Any
- 获取当前项的用户数据
- 如果组件没有任何项,则返回None
- 如果当前项没有设置userData属性,则返回None
setCurrentIndex(self, index: int)
- 根据索引设置当前项对象
- 如果索引超出范围,则当前项对象为None。add、remove、insert方法都不影响当前项对象
setCurrentText(self, text: str)
- 根据文本设置当前项对象
- 如果存在匹配,则设置为索引最小的匹配项
- 如果不存在匹配,则设置为索引0的项
4、编辑
编辑和当前项对象相关。
- 无论当前项为None或其它,获取当前项的text,为输入框的文本
- 编辑模式下,当前项的index和data规则仍然有效,参考上述非编辑模式下说明
setEditable(self, editable: bool)
- 设置是否可编辑
setEditText(self, text: str)
- 设置组件编辑输入的文本,可以是任意字符串,而不一定是组件的项
- 会覆盖显示当前项的文本,当然,并不会真正改变对应索引的文本
isEditable(self) -> bool
- 是否可编辑
lineEdit(self) -> QLineEdit
- 获取到编辑输入组件
setPlaceholderText(self, placeholderText: str)
- 设置占位提示文本
placeholderText(self) -> str
- 获取占位提示文本
5、其它方法
count(self) -> int
- 获取项的个数,如果没有则为0
clear(self)
- 清除添加的项
setMaxVisibleItems(self, maxItems: int)
- 设置最大可视的项的个数
maxVisibleItems(self) -> int
- 获取最大可视的项的个数,默认为10
maxCount(self) -> int
- 获取能够添加的项的个数的最大值,2147483647
6、事件
(1)
currentTextChanged(self, a0: str) [signal]
- a0是变化后的当前项对象文本
- 当前项对象的文本发生变化时或者当前项对象发生变化时,触发该事件
- setItemText方法设置当前项对象,无论是否改变文本,都会触发事件
- setCurrent如果是设置的就是当前项对象,则不会触发。反之则必然会触发该事件,即使新设置的当前项对象的文本与之前相同
- 需要注意的是初次添加项,以及insert、remove以及clear对当前项对象的影响
(2)
currentIndexChanged(self, index: int) [signal]
currentIndexChanged(self, a0: str) [signal]
- index是变化后的当前项对象索引
- 当前项对象的索引发生变化时触发该事件
- setItemText方法设置当前项对象,无论是否改变文本,都会触发事件
- setCurrent如果是设置的就是当前项对象,则不会触发。反之则必然会触发该事件
- 需要注意的是初次添加项,以及insert、remove以及clear对当前项对象索引的影响
(3)激活
activated(self, index: int) [signal]
- 点击下拉列表后,选中任意项都会触发,返回被选中项的索引
- 即使当前选中项与上一选中项相同,也会触发
textActivated(self, a0: str) [signal]
- 获取选中项的文本
(4)高亮
highlighted(self, a0: str) [signal]
- 点击下拉列表,默认的会使当前选中项高亮,触发事件,返回该项的索引
- 鼠标或者键盘上的方向键,使上下移动,选择项会高亮显示,触发事件
- 如果与上一次高亮的索引相同,那么不会触发事件。比如:
- 点击下拉列表弹出,不进行任何操作,会高亮并触发事件,点击其它区域收起;再次点击下拉列表弹出,不进行任何操作,此时高亮但并不会触发事件。
- 点击下拉列表弹出,选中项高亮触发,鼠标移动指向其它选项高亮触发,但是不点击确定改变选中项,之后点击其它区域收起;再次点击下拉列表弹出,此时选中高亮,并与上一次高亮不同,所以也触发。
(5)编辑文本改变
textActivated(self, a0: str) [signal]
(6)编辑文本时的高亮
textHighlighted(self, a0: str) [signal]