pyqt5-QComboBox
1、介绍
下拉列表
2、类和初始化
class QComboBox(QWidget):
""" QComboBox(parent: QWidget = None) """
def __init__(self, parent=None):
pass
快速查询:
QComboBox(parent: typing.Optional[QWidget] = None)
addItem(self, text: str, userData: Any = None)
addItem(self, icon: QIcon, text: str, userData: Any = None)
addItems(self, texts: Iterable[str])
clear(self)
clearEditText(self)
completer(self) -> QCompleter
count(self) -> int
currentData(self, role: int = Qt.ItemDataRole.UserRole) -> Any
currentIndex(self) -> int
currentText(self) -> str
duplicatesEnabled(self) -> bool
findData(self, data: Any, role: int = Qt.UserRole, flags: Union[Qt.MatchFlags, Qt.MatchFlag] = Qt.MatchExactly|Qt.MatchCaseSensitive) -> int
findText(self, text: str, flags: Union[Qt.MatchFlags, Qt.MatchFlag] = Qt.MatchExactly|Qt.MatchCaseSensitive) -> int
hasFrame(self) -> bool
hidePopup(self)
iconSize(self) -> QSize
initStyleOption(self, option: QStyleOptionComboBox)
inputMethodQuery(self, a0: Qt.InputMethodQuery) -> Any
inputMethodQuery(self, query: Qt.InputMethodQuery, argument: Any) -> Any
insertItem(self, index: int, text: str, userData: Any = None)
insertItem(self, index: int, icon: QIcon, text: str, userData: Any = None)
insertItems(self, index: int, texts: Iterable[str])
insertPolicy(self) -> QComboBox.InsertPolicy
insertSeparator(self, index: int)
isEditable(self) -> bool
itemData(self, index: int, role: int = Qt.UserRole) -> Any
itemDelegate(self) -> QAbstractItemDelegate
itemIcon(self, index: int) -> QIcon
itemText(self, index: int) -> str
lineEdit(self) -> QLineEdit
maxCount(self) -> int
maxVisibleItems(self) -> int
minimumContentsLength(self) -> int
minimumSizeHint(self) -> QSize
model(self) -> QAbstractItemModel
modelColumn(self) -> int
placeholderText(self) -> str
removeItem(self, index: int)
rootModelIndex(self) -> QModelIndex
setCompleter(self, c: QCompleter)
setCurrentIndex(self, index: int)
setCurrentText(self, text: str)
setDuplicatesEnabled(self, enable: bool)
setEditable(self, editable: bool)
setEditText(self, text: str)
setFrame(self, a0: bool)
setIconSize(self, size: QSize)
setInsertPolicy(self, policy: QComboBox.InsertPolicy)
setItemData(self, index: int, value: Any, role: int = Qt.ItemDataRole.UserRole)
setItemDelegate(self, delegate: QAbstractItemDelegate)
setItemIcon(self, index: int, icon: QIcon)
setItemText(self, index: int, text: str)
setLineEdit(self, edit: QLineEdit)
setMaxCount(self, max: int)
setMaxVisibleItems(self, maxItems: int)
setMinimumContentsLength(self, characters: int)
setModel(self, model: QAbstractItemModel)
setModelColumn(self, visibleColumn: int)
setPlaceholderText(self, placeholderText: str)
setRootModelIndex(self, index: QModelIndex)
setSizeAdjustPolicy(self, policy: QComboBox.SizeAdjustPolicy)
setValidator(self, v: QValidator)
setView(self, itemView: QAbstractItemView)
showPopup(self)
sizeAdjustPolicy(self) -> QComboBox.SizeAdjustPolicy
sizeHint(self) -> QSize
validator(self) -> QValidator
view(self) -> QAbstractItemView
Return len(self).
---------------
changeEvent(self, e: QEvent)
contextMenuEvent(self, e: QContextMenuEvent)
event(self, event: QEvent) -> bool
focusInEvent(self, e: QFocusEvent)
focusOutEvent(self, e: QFocusEvent)
hideEvent(self, e: QHideEvent)
inputMethodEvent(self, a0: QInputMethodEvent)
keyPressEvent(self, e: QKeyEvent)
keyReleaseEvent(self, e: QKeyEvent)
mousePressEvent(self, e: QMouseEvent)
mouseReleaseEvent(self, e: QMouseEvent)
paintEvent(self, e: QPaintEvent)
resizeEvent(self, e: QResizeEvent)
showEvent(self, e: QShowEvent)
wheelEvent(self, e: QWheelEvent)
---------------
activated(self, index: int) [signal]
activated(self, a0: str) [signal]
currentIndexChanged(self, index: int) [signal]
currentIndexChanged(self, a0: str) [signal]
currentTextChanged(self, a0: str) [signal]
editTextChanged(self, a0: str) [signal]
highlighted(self, index: int) [signal]
highlighted(self, a0: str) [signal]
textActivated(self, a0: str) [signal]
textHighlighted(self, a0: str) [signal]
3、属性
4、方法
(1)count
- 返回下拉列表数,默认是0,没有任何下拉选项
(2)currentIndex
- 当下拉列表项为空时,即count=0,索引只能是-1
- 当从空开始添加一个或多个项时,索引最低为0,即选择第一个项作为默认显示,不能选择除了添加之外的,即不存在-1的情况。
- 索引从0开始
(3)setEnabled
- 设置bool参数,表示是否可用
(4)clear
- 清除所有选项
(5)currentText
- 当下拉列表项为空时,即count=0,当前的文本只能是空字符串''
- 当不为空时,获取选中项的显示的文本
(6)setPlaceholderText
- 设置默认的文本,但是没观察出什么效果,没有输出
(7)setCurrentText
- 设置参数为字符串,即已添加的项的显示文本
- 会自动选中从前往后匹配的第一个索引
(8)setCurrentIndex
- 设置选中索引
- 可以设置索引,超出下拉列表的长度,表现为未选中任何项
(9)addItem和addItems
addItem(self, text: str, userData: Any = None)
addItem(self, icon: QIcon, text: str, userData: Any = None)
- 添加一个选项,其中text作为下拉列表显示的项的文本,userData可以被currentData方法读取值
- 当下拉列表为空时,该方法添加会使添加项作为默认选中项
- 默认是添加到下拉列表的末尾,除非是下拉列表为空,否则不会影响当前选中项
addItems(self, texts: Iterable[str])
- 一次性添加多个选项
- 当下拉列表为空时,该方法添加会使添加部分的第一个项作为默认选中项
- 默认是添加到下拉列表的末尾,除非是下拉列表为空,否则不会影响当前选中项
(10)当前数据
currentData(self, role: int = Qt.ItemDataRole.UserRole) -> Any
- 默认为None,除非在addItem方法中设置了对应项的userData参数,或者insertItem方法中设置
(11)插入
insertItem(self, index: int, text: str, userData: Any = None)
insertItem(self, index: int, icon: QIcon, text: str, userData: Any = None)
- 如果是在当前选中项之后插入,则不影响选中项
- 如果是在当前选中项的位置或之前插入,下拉列表的选中项文本不会变,但索引会向后移或者说增大
insertItems(self, index: int, texts: Iterable[str])
- 一次性插入多个选项,对当前选中项的影响参考insertItem
(12)图片
setItemIcon(self, index: int, icon: QIcon)
itemIcon(self, index: int) -> QIcon
iconSize(self) -> QSize
setIconSize(self, size: QSize)
- pyqt QComboBox组件,允许在选项中添加图片对象QIcon,其在选项的左侧显示
- 一个下拉列表中,允许部分设置图片。设置了图片的项的图片在下拉列表弹出中可以显示,在选中后图片也可以显示
- QIcon创建,需要使用.jpg图片。.png不会报错,也占据空间,但为空白。
5、事件
(1)当前选项改变
currentIndexChanged(self, index: int) [signal]
currentIndexChanged(self, a0: str) [signal]
currentTextChanged(self, a0: str) [signal]
- 分别获取改变后选项的索引和文本。(注意是只要当前选中索引变化即触发,而不关心对应项的文本是否变化)
- 如果下拉菜单重新点击选择上一选项,即未发生选项改变,则不会触发
- 值得注意的是,除了用户直接选择其它项,造成选项改变会触发这两个事件。其它的一些方法也可能造成当前选中项的改变,而触发这两个事件
- 下拉列表为空时,调用addItems方法,其当前项会被设置为索引为0的项,触发事件。调用类似的addItem方法,也会触发
- 当下拉列表不为空时,addItems方法或addItem方法只能在末尾添加,不影响当前被选中项,不触发
- 当下拉列表不为空时,调用insertItem或insertItems方法,如果是指定在当前项之后插入,则不影响当前被选中项,不触发
- 当下拉列表不为空时,调用insertItem或insertItems方法,如果是指定在当前项位置及之前插入,会使当前项向后移增大,影响当前被选中项,触发
- 类似的,removeItem如果操作当前选中项之后,使当前选中项索引不变化则不触发。反之,则使当期项前移减小,触发
- 当下拉表不为空时,clear方法调用,也会触发,返回索引-1或空字符串。反之如果本身为空,则clear不影响,不触发
- 还有一点,事件的声明需要在改变当前索引操作之前,否则不会触发
self.window.comboBox.addItems(['a','b','c']) # 不触发
self.window.comboBox.currentTextChanged.connect(self.test)
self.window.comboBox.addItems(['a','b','c']) # 触发
(2)激活
activated(self, index: int) [signal]
activated(self, a0: str) [signal]
- 点击下拉列表后,选中任意项都会触发,返回被选中项的索引
- 即使当前选中项与上一选中项相同,也会触发
(3)高亮
highlighted(self, a0: str) [signal]
- 点击下拉列表,默认的会使当前选中项高亮,触发事件,返回该项的索引
- 鼠标或者键盘上的方向键,使上下移动,选择项会高亮显示,触发事件
- 如果与上一次高亮的索引相同,那么不会触发事件。比如:
- 点击下拉列表弹出,不进行任何操作,会高亮并触发事件,点击其它区域收起;再次点击下拉列表弹出,不进行任何操作,此时高亮但并不会触发事件。
- 点击下拉列表弹出,选中项高亮触发,鼠标移动指向其它选项高亮触发,但是不点击确定改变选中项,之后点击其它区域收起;再次点击下拉列表弹出,此时选中高亮,并与上一次高亮不同,所以也触发。
(4)编辑文本改变
textActivated(self, a0: str) [signal]
(5)编辑文本时的高亮
textHighlighted(self, a0: str) [signal]