QComboBox

本文详细介绍了Qt库中的QComboBox控件,包括如何添加、删除和编辑条目,设置默认值,以及如何使用模型和视图进行更复杂的数据展示。此外,还展示了如何获取数据,限制数据数量,以及实现数据附加信息的处理。同时,通过实例代码演示了如何在QComboBox中使用QStandardItemModel来创建树形结构。文章最后探讨了数据获取操作,并提供了限制条目数量和可视条目个数的方法。
摘要由CSDN通过智能技术生成

1、输入控件:纯键盘文本输入、步长调节器、组合框。

组合框:默认展示最小的空间给用户进行操作、右侧会有一个下拉菜单操作。

组合框:(组合控件,由多个子控件组成)

用户数据并不会被显示出来(开发人员可以获取到的),仅仅是显示出一个图标或者字符串文本。

from PyQt5.Qt import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QComboBox的学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        cb = QComboBox(self)
        # 逐个添加内容,也可添加ICon
        cb.addItem("xxx1")
        cb.addItem("xxx2")
        # 一次性添加几条内容,元组或者列表的形式都可以
        cb.addItems(("1", "2", "3"))
        # 指定位置插入内容,该索引位置添加条目
        cb.insertItem(1, "qqq")
        #cb.setItemIcon(2, QIcon("xxx.png"))
        # 设置条目的图标、文本等
        cb.setItemText(2, "社会")

        # 删除条目项
        cb.removeItem(2)

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.resize(500, 500)
    window.show()

    sys.exit(app.exec_())

插分割线:

 

 设置展示的默认值: setCurrentIndex(2)

 cb.setCurrentText("itlike");匹配不到已有的字符串,则显示默认值。

设置编辑文本:将该控件设置为可被编辑:cd.setEditable(True).

设置当前的编辑文本(将原来的条目内容改变):cd.setEditText("itlike")

2、模型的操作、视图的操作 :

 点击下拉列表展示表格或者柱形结构等(则需要特定的控件和特定的模型)

展示树形结构:模型中放很多条目、通过设计条目之间的父子关系就可以完成树状结构。

下拉列表的界面不支持树形结构,需要换一个视图。

    def setup_ui(self):
        cb = QComboBox(self)
        print(QAbstractItemModel.__subclasses__())
        cb.resize(100, 30)
        # 创建模型
        model = QStandardItemModel()
        # 设置条目
        item1 = QStandardItem("item1")
        item2 = QStandardItem("item2")
        item22 = QStandardItem("item22")
        # 将一级item加入模型
        item2.appendRow(item22)
        model.appendRow(item1)
        model.appendRow(item2)
        # 将模型设置到控件中
        cb.setModel(model)

        # 换成树状视图显示
        cb.setView(QTreeView(cb))

3、数据的获取操作:

 某一个item附加额外数据做额外处理。

    def setup_ui(self):
        cb = QComboBox(self)
        cb.addItems(["abc", "123", "456"])
        cb.addItem("src", {"name": "itlike"})
        btn = QPushButton(self)
        btn.move(100, 100)
        btn.setText("测试按钮")
        # 获取条目总数
        btn.clicked.connect(lambda: print(cb.count()))
        # 获取当前索引
        btn.clicked.connect(lambda: print(cb.currentIndex()))
        # 获取当前数据,{"name": "itlike"},例如城市编码,作为附加数据不会被展示
        btn.clicked.connect(lambda: print(cb.currentData()))
        # 获取当前文本内容
        btn.clicked.connect(lambda: print(cb.currentText()))
        # 获取当前图标
        btn.clicked.connect(lambda: print(cb.itemIcon(cb.currentIndex())))
        # 给按钮设置图标
        btn.clicked.connect(lambda: btn.setIcon(cb.itemIcon(cb.currentIndex())))

        # 获取最后一个条目的信息
        # idx=默认值,不传递形参的情况下才会取默认值,clicked像外界传递一个布尔类型的参数,
        btn.clicked.connect(lambda _, idx=cb.count()-1: print(cb.itemIcon(idx), cb.itemText(idx),
                                                           cb.itemData(idx)))
        # 给按钮设置图标
        btn.clicked.connect(lambda: btn.setIcon(cb.itemIcon(cb.currentIndex())))

 4、数据的限制:限制存放最大条目个数、以及可以被展示的最大条目个数。

    def setup_ui(self):
        cb = QComboBox(self)
        cb.addItems(["abc", "123", "456"])
        cb.addItem("src", {"name": "itlike"})
        btn = QPushButton(self)
        btn.move(100, 100)
        btn.setText("测试按钮")
        # 个数到达上限无法添加新的
        btn.clicked.connect(lambda: cb.addItem("it"))
        cb.setMaxCount(6)
        cb.setEditable(True)
        # 限制可见条目个数
        cb.setMaxVisibleItems(3)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

。七十二。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值