pyQt5-comboBox常用方法

该博客介绍了如何使用PyQt5库中的ComboBox组件进行交互操作,包括添加、删除选项,获取选项数量、选中项信息等,并展示了信号与槽的连接以响应下拉选择变化。
# -*- coding:utf-8 -*-
"""
@Time:2022/3/24 0:06
@Author:小柠檬
@File:combo_box.py
"""
from PyQt5 import uic, QtCore
from PyQt5.QtWidgets import QApplication


class ComboBox:

    def __init__(self):
        # 加载UI界面
        self.ui = uic.loadUi("combo_box.ui")

        # 1.添加一个下拉选项
        self.ui.comboBox.addItem('小柠檬1')

        # 2.从列表中添加多个下拉选项
        add_list = ['小柠檬2', '小柠檬3', '小柠檬4', '小柠檬5']
        self.ui.comboBox.addItems(add_list)

        # 3.清空所有下拉选项
        # self.ui.comboBox.clear()

        # 4.获取下拉选项数目
        option_count = self.ui.comboBox.count()
        print(option_count)

        # 5.获取当前选中的文本
        option_text = self.ui.comboBox.currentText()
        print(option_text)

        # 6.通过索引获取文本
        option_text_index = self.ui.comboBox.itemText(2)
        print(option_text_index)

        # 7.获取当前选中项的索引
        option_index = self.ui.comboBox.currentIndex()
        print(option_index)

        # 8.通过改变指定索引中的文本内容
        self.ui.comboBox.setItemText(1, '小柠檬改')

        # 9.修改选项发出信号
        self.ui.comboBox.currentIndexChanged.connect(self.slot_combo_box)

    def slot_combo_box(self):
        option_text = self.ui.comboBox.currentText()
        print(f'当前选项:{option_text}')


def main():
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)  # 和designer设计的窗口比例一致
    app = QApplication([])
    combo_box = ComboBox()
    combo_box.ui.show()
    app.exec_()


if __name__ == '__main__':
    main()

### PyQt5ComboBox 的使用教程与事件处理 #### 1. PyQt5 中 QComboBox 基础介绍 QComboBoxPyQt5 提供的一个常用控件,用于显示可选目列表并允许用户从中选择一。它支持静态选列表以及动态数据绑定功能[^2]。 以下是 QComboBox 的核心特性: - **基本属性**: 可设置最大可见数、编辑模式(是否允许手动输入)、默认值等。 - **信号机制**: 当用户更改当前选定时会触发 `currentIndexChanged` 和 `currentTextChanged` 两个主要信号。 - **方法调用**: 支持通过编程方式向组合框中添加或移除条目,例如 `addItem()` 和 `removeItem()` 方法。 #### 2. 创建和初始化 QComboBox 实例 下面是一个简单的代码示例展示如何创建一个带有预设目的 QComboBox 并将其放置在一个窗口布局中: ```python from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox class Example(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.combo_box = QComboBox() # 添加一些初始选 self.combo_box.addItems(["Option 1", "Option 2", "Option 3"]) layout.addWidget(self.combo_box) self.setLayout(layout) app = QApplication([]) ex = Example() ex.show() app.exec_() ``` 此脚本展示了如何构建基础界面结构并将 QComboBox 集成到其中[^2]。 #### 3. 处理 QComboBox 的事件 为了捕获用户的交互行为,可以连接特定的信号至槽函数来实现逻辑操作。最常用的两种信号分别是基于索引位置改变的通知 (`currentIndexChanged`) 和基于文本内容更新的消息(`currentTextChanged`)。 ##### (a) 连接 `currentIndexChanged` 信号 每当所选条目的序号发生变化时都会激活该信号。可以通过整型参数获取新旧状态差异信息。 ```python def on_index_changed(index): print(f"Selected index is {index}") self.combo_box.currentIndexChanged.connect(on_index_changed) ``` ##### (b) 绑定 `currentTextChanged` 动作 如果关心的是字符串形式的变化而非具体的位置编号,则更适合采用这种方式监听变动情况。 ```python def on_text_changed(text): print(f"Current selected text: {text}") self.combo_box.currentTextChanged.connect(on_text_changed) ``` 以上两段代码片段分别演示了针对不同需求场景下的简单回调实现方案。 #### 4. 解决 TableWidget 内嵌入 ComboBox 后无响应的问题 当尝试把 QComboBox 插入到 QTableWidget 单元格里之后发现无法正常接收单元格变更通知的现象确实存在。这是因为表格视图仅跟踪标准编辑器组件的状态转换而不自动感知内部子部件的动作所致[^4]。 要克服这个问题的一种可行办法就是显式订阅目标 Combo Box 对象上的相关联信道,并手工同步外部环境反映这些调整结果: ```python for row in range(table.rowCount()): combo = QComboBox() combo.addItems(['A', 'B', 'C']) def handle_combo_change(row=row): value = table.cellWidget(row, column).currentText() print(f'Row {row} changed to "{value}"') combo.currentTextChanged.connect(handle_combo_change) table.setCellWidget(row, column, combo) ``` 这里我们遍历每一行,在每行列指定列插入一个新的下拉菜单实例;同时为其配置独立的事件处理器以便及时反馈任何可能发生的切换动作给程序其余部分知道。 --- ### 总结 本文介绍了关于在 PyQt5 应用框架内有效运用 QComboBox 控制元件的知识要点及其典型应用场景分析。涵盖了从零搭建 GUI 到深入探讨各类互动细节的技术层面讨论[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值