我们在前面分别介绍了两种输入控件:纯键盘文本输入和步长调节器,下面我们来学习下组合框(下拉选择输入)。

一.简介

  1.下拉框是一个组合控件(包含一个文本显示控件和一个按钮)。它默认显示最小的控件给用户来操作,并且可以用下拉选择的界面提供给用户更多的预置选项。

  GUI学习之二十三——QComboBox学习总结

  2.它是直接继承自QWidget。

二.功能作用

  1.构造函数。

  可以直接实例化,不用传递参数。

  2.数据操作

  数据的操作主要分对数据项的增删改和一些其他的操作

    a.增加项目

     下拉框的内容有两种增加方式:追加和指定位置添加。

QComboBox.addItem(self, text: str, userData: typing.Any = ...)                                     #追加内容
QComboBox.addItem(self, icon: QtGui.QIcon, text: str, userData: typing.Any = ...)                  #追加内容(带图标)
QComboBox.insertItem(self, index: int, text: str, userData: typing.Any = ...)                  #指定位置添加内容
QComboBox.insertItem(self, indx: int, icon: QtGui.QIcon, text: str, userData: typing.Any = ...)   #指定位置添加内容(带图标)

可以看到有个参数是userdata,其实就是可以附带的内容,在面板上不显示,但是可以包含的内容。比方我们选择区号,面板上只显示地名,选择好后后台接收的内容是地名对应的数字。

      还有一种增加的方法:批量增加。用一个可迭代的数据就可以

QComboBox.addItems(self, texts: typing.Iterable[str])
QComboBox.insertItems(self, index: int, texts: typing.Iterable[str])

这里的可迭代对象可以是元组、列表,但内容必须是字符串类型的。但要注意的是虽然字符串也属于可迭代对象,但这里是不能用的。

    b.删除项目

        删除项目很简单,只要指定需要删除的项目的所索引值就可以了

QComboBox.removeItem(self, index: int)   #删除项目

    c.改指定项目

QComboBox.setItemIcon(self, index: int, icon: QtGui.QIcon)                  #改指定的项目图标
QComboBox.(self, index: int, text: str)                                     #改指定项目的显示文本
QComboBox.setItemData(self, index: int, value: typing.Any, role: int = ...) #改指定项目的userdata

    D.编辑当前显示文本

     如果没有指定的索引值或文本内容,则显示状态不变。

QComboBox.setCurrentIndex(self, index: int)     #按指定索引值显示
QComboBox.setCurrentText(self, text: str)       #按指定文本显示

    E.插入分割线

QComboBox.insertSeparator(self, index: int)     #在指定索引位置插入分割线

    F.被编辑状态

        如果控件设置了可被编辑,就可以用键盘输入新的内容。在有新的文本被输入,控件失去焦点后,所输入的文本会自动添加在最后面,就像qq登陆时的记住账号一样,只要输入一遍就有这个选项了。

QComboBox.setEditable(self, editable: bool)         #设置可被编辑

       这个编辑状态还可以结合当前文本的显示

QComboBox.setEditText(self, text: str)                #设置当前显示的文本

这里有个现象,就是如果在调用上面这条指令前文本框里显示的有图标,在用这条这里后图标时不会变化的,只是后面的文本改了。敲一下回车就好了。

    G.插入模型(树形表)

        这个用法以后再详细讲,现在就说一下是怎么用的

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()


    def UI_test(self):
        cb = QComboBox(self)
        model = QStandardItemModel()        #创建标准树形视图模型
        item1 = QStandardItem('item1')
        item2 = QStandardItem('item2')
        item2_1 = QStandardItem('item2_1')
        item2.appendRow(item2_1)        #把item2_1列为item2的子列表
        model.appendRow(item1)
        model.appendRow(item2)
        cb.setModel(model)
        cb.setView(QTreeView(cb))  #试图设置
        pass
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
树形结构

相关文章: