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]

 

posted @ 2023-04-16 23:39  挖洞404  阅读(35)  评论(0编辑  收藏  举报