42 您所在的位置:网站首页 appinventor列表选择框 42

42

2023-06-18 20:02| 来源: 网络整理| 查看: 265

下拉列表框控件QComBox

下拉列表框控件提供一个下拉式选项列表供用户选择,它可以最大限度地减少所占窗口的面积。

下拉列表框控件的类是 QComboBox,它继承自QWidget。下拉列表框由多行内容构成,下拉列表框控件可以看成是一个 QLineEdit 和一个列表控件的组合体,每行除有必要的文字外,还可以设置图标。

下拉列表中的内容可以是程序运行前就确定的内容,也可以是用户临时添加的内容。当单击下拉列表框时,下拉列表框呈展开状态,显示多行选项供用户选择,根据用户选择的内容发送信号,进行不同的动作。

通常下拉列表框处于折叠状态,只显示一行当前内容。

QComboBox 除了显示可见的文字和图标外,还可以给每行设置一个关联数据,数据类型任意,可以是字符串、文字、图片、类的实例等.通过客户选择的内容,可以读取关联的数据。

可以采用下列方式创建QComboBox类的实例对象其中parent是继承自QWidget的窗口或容器控件

from PySide6.QtWidgets import QComboBox QComboBox(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None 下拉列表框控件QComboBox的常用方法

QComboBox由一列多行内容构成每行称为一个项(item)。

QComboBox的方法主要是有关项的方法,可以添加项、插入项和移除项。如果用Qt Designer 设计界面,则双击QComboBox控件,可以为QComboBox添加项。

下拉列表框控件QComboBox的常用方法如表所示,主要方法介绍如下。

在QComboBox控件中添加项的方法有

addItem(str[,userData=None])addItem(QIcon;str[,userData=None])addItems(Sequence[str])

前两种只能逐个增加,最后一种可以把一个元素是字符串的迭代序列(列表、元组)加人到 QComboBox中。前两种在增加项时,可以为项关联任何类型的数据。

在QComboBox控件中插人项的方法有

insertItem(index:int,str[;userData=None])insertItem(index: int,QIcon,str[,userData=None])insertItems(index;int,Sequence[str])。

当插人项时,用setInsertPolicy(QComboBox.InsertPolicy)方法可以设置插入项的位置其中QComboBoxInsertPolicy 的取值如表2所示:

QComboBox.InsertPolicy的取值说明QComboBox.NoInsert不允许插人项QComboBox.InsertAtTop在顶部插人项QComboBox.InsertAtCurrent在当前位置插入项QComboBox.InsertAtbottom在底部插人项QComboBox.InsertAfterCurrent在当前项之后插入QComboBox.InsertBeforeCurrent在当前项之前插入QComboBox.InsertAlphabetically根据字母顺序插人项

移除

用removeItem(index:int)方法可以从列表中移除指定索引值的项;用clear()方法可以清除所有的项;用clearEditText()方法可以清除显示的内容,而不影响项

项编辑和获取

通过设置 setEditable(True),即QComboBox 是可编辑状态,可以输人文本,按Enter键后文本将作为项插入列表中在添加和插入项时,可以定义关联的数据

另外也可以用setItemData(index:int,any[,role=QtUserRole])方法为索引号是int 的项追加关联的数据,数据类型任意。

可以为项定义多个关联数据,第1个数据的角色值 role=QtUserRole(Q.UserRole 的值为256),当追加第2个关联的数据时取role=Qt.UserRole+1,追加第3个关联的数据时取role=QtUserRole+2依次类推

用currentData(role=QtUserRole+i)或itemData(index:int,role=Qt.UserRole十i)方法获取关联的数据,其中role=QtUserRole+i表示第i个关联数据的索引,i=0,1,2,

宽高调整策略

利用setSizeAdjustPolicy(QComboBox,SizeAdjustPolicy)方法可以设置QComboBox的宽度和高度根据项的文字的长度进行调整,其中 QComboBox.SizeAdjustPolicy可以取 : QComboBox.AdjustToContents(根据内容调整)QComboBox.AdjustToContentsOnFirstShow(根据第1次显示的内容调整)QComboBox.AdjustToMinimumContentsLengthWithIcon(根据最小长度调整) QComboBox的方法及参数类型说明addItem(str,userData=None)添加项,并可设置关联的任意类型的数据addItem(QIcon,str,userData=None)添加带图标的项addItems(Sequence[str])用列表、元组等序列添加多个项insertItem(index:int,str,userData=None)在索引处插入项insertItem(index; int,QIcon,str,userData=None)在索引处插入带图标的项insertItems(index: int,Sequence[str])在索引处插人多个项renoveItem(index:int)根据索引值移除项count()返回项的数量currentIndex()返回当前项的索引currentText()返回当前项的文本[slot]setCurrentText(str)设置当前显示的文本[slot]setCurrentIndex(index:int)根据索引设置为当前项[slot]setEditText(str)设置编辑文本setEditable(bool)设置是否可编辑setIconSize(QSize)设置图标的尺寸set1nsertPolicy(QComboBox.InsertPolicy)设置插入项的策略setltemData(index: int,any[.role=Qt.UserRole])根据索引设置关联数据setItemIcon(index: int.QIcon)根据索引设置图标setltemText(index: int.str)根据索引设置文本setMaxCount(int)设置项的最大数量,超过部分不显示setMaxVisibleltems(int)设置最多能显示的项的数量,超过显示滚动条setMinimumContentsLength(int)设置子项目显示的最小长度setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy)设置宽度和高度的调整策略serValidator(QValidator)设置输入内容的合法性验证currentData(role=Qt.UserRole)获取当前项关联的数据iconSize()返回图标尺寸 QSizeitemIcon(index:int)根据索引获取图标QIconitemText(index:int)根据索引获取项的文本showPopup()、hidePopup()显示或隐裁列表itemData(index: int,role=Qt.UserRole)根据索引获取项的关联数据[slot]clear()从控件中清空所有的项[slot]clearEditText()只清空可编辑的文字,不影响项 下拉列表框控件QComboBox的信号

下拉列表框控件QComboBox的信号如表所示

QComboBox的信号说明activated(text:str)由用户激活某项时发送信号,而程序激活时不发送信号。如果有两个项的名称相同,则只发送带整数参数的信号activated(index: int)由用户激活某项时发送信号,而程序激活时不发送信号。如果有两个项的名称相同,则只发送带整数参数的信号currentIndexChanged(text:str)用户或程序改变当前项的索引时发送信号currentIndexChanged(index:int)用户或程序改变当前项的索引时发送信号highlighted(text: str)当光标经过列表的项时发送信号highlighted(index: int)当光标经过列表的项时发送信号editTextChanged(text:str)在可编辑状态下,改变可编辑文本时发送信号currentTextChanged(text: str)用户或程序改变当前项的文本时发送信号 QComboBox 案例:地区选择 import sys from PySide6 import QtWidgets """ QComboBox 案例:地区选择 由2个combobox组成,分别用于选择省、市,选中城市后获得对应的邮政编码 当第1个combobox的选中改变时,第2个combobox中的选项自动变换至对应列表 当第2个combobox的选中改变时,使用QLabel显示该地的邮政编码 """ class MyWidget(QtWidgets.QWidget): def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs) self.setWindowTitle("QComboBox-案例") self.resize(800,600) # 创建存储城市信息的字典 self.city_dic = { "北京": { "东城区":"100010", "西城区":"100032", "朝阳区":"100020", "丰台区":"100071", "石景山区":"100043", "海淀区":"100080", }, "上海": {"黄浦区":"200001","徐汇区":"200030","长宁区":"200050"}, } self.setup_ui() def setup_ui(self)-> None: """设置界面并初始化""" self.province_cbb = QtWidgets.QComboBox() self.city_cbb = QtWidgets.QComboBox() self.code_label = QtWidgets.QLabel() # 使用布局管理器布局控件 layout = QtWidgets.QHBoxLayout() layout.addWidget(self.province_cbb) layout.addWidget(self.city_cbb) layout.addWidget(self.code_label) self.setLayout(layout) # 初始化并连接信号 self.province_cbb.addItems(self.city_dic.keys()) self.province_cbb.currentTextChanged.connect(self.province_changed)# type: ignore self.city_cbb.currentIndexChanged.connect(self.city_changed)# type: ignore # 手动执行一次以为城市combobox添加初始项 self.province_changed(self.province_cbb.currentText()) def province_changed(self,pro_name: str)-> None: """ 省份改变时的槽函数 \n :param pro_name: 新的省名 :return: None """ # 先清空之前的条目 self.city_cbb.clear() # 再添加条目 cities = self.city_dic[pro_name] for city_name,city_code in cities.items(): # 将城市名作为text、邮政代码作为data添加条目 self.city_cbb.addItem(city_name,city_code) def city_changed(self,item_index: int)-> None: """ 城市改变时的槽函数 \n :param item_index: 新的选中的条目索引 :return: None """ city_name = self.city_cbb.itemText(item_index) city_code = self.city_cbb.itemData(item_index) self.code_label.setText(f"{city_name}的邮政编码为{city_code}") self.code_label.adjustSize()# 调节标签控件尺寸以适应新的内容 if __name__ =="__main__": app = QtWidgets.QApplication(sys.argv) window = MyWidget() window.show() sys.exit(app.exec())


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有