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]
posted @ 2023-07-02 03:17  挖洞404  阅读(584)  评论(0编辑  收藏  举报