当前位置:   article > 正文

051.PyQt5_QComboBox_下拉选择框_pyqt5 qcombox二级下拉选项

pyqt5 qcombox二级下拉选项

QComboBox 下拉选择框

  • 描述
    • 是一个组合控件,默认展示最小的空间给用户操作,可通过下拉选择界面, 选取更多的预置选项
  • 继承自:QWidget
  • 功能作用
    • 构造函数
      QComboBox(parent: QWidget = None)           # 创建QComboBox对象的同时设置父对象
      
    • 数据操作
      1. addItem(str, userData: Any = None)                  # 添加一个条目,显示内容和后台数据
      2. addItem(QIcon, str, userData: Any = None)           # 添加添加一个条目,图标、显示内容和后台数据
      3. addItems(Iterable[str])                             # 通过一个迭代器添加一批条目
      4. insertItem(intstr, userData: Any = None)          # 在指定索引处插入一个条目,显示内容和后台数据
      5. insertItem(int, QIcon, str, userData: Any = None)   # 在指定索引处插入一个条目,图标、显示内容和后台数据
      6. insertItems(int, Iterable[str])                     # 在指定索引处通过一个迭代器添加一批条目
      7. setItemIcon(int, QIcon)                             # 通过索引,设置该条目的图标
      8. setItemText(intstr)                               # 通过索引,设置该条目的显示文本
      9. setItemData(intAny, role: int = Qt.UserRole)      # 通过索引,设置用户数据
      10. removeItem(int index)                               # 删除指定索引条目
      11. insertSeparator(int index)                          # 在指定索引位置插入一条分割线
      12. setCurrentIndex(int index)                          # 通过索引设置下拉框默认显示值
      13. setCurrentText(QString text)                        # 通过条目显示文本设置下拉框默认显示值
      14. setEditable(bool editable)                          # 设置默认值是否可以被编辑
      15. # 允许被编辑时,编辑后按回车键,会将编辑后的新内容添加到下拉框中
      16. setEditText(QString text)                           # 默认值设置可被编辑时,重新设置显示文本内容
      17. # 了解模型操作(后面会具体讲模型)
      18.     # 通过设置模型,可以使下拉框显示表格、数目录等
      19.     setModel(QAbstractItemModel model)
      20.     setModelColumn(int visibleColumn)
      21.     setRootModelIndex(QModelIndex index)
      22.     model() 
      23.     modelColumn()
      24.     rootModelIndex()
      25. # 了解视图操作
      26.     setView(QAbstractItemView *itemView)
      27.     view() 
      28. # 了解代理设置
      29.     setItemDelegate(QAbstractItemDelegate *delegate)
    • 获取数据
      1. count() -> int                              # 获取下拉选择框总条目数
      2. itemIcon(int index) -> QIcon                # 获取指定索引条目的图标对象
      3. itemText(int index) -> str                  # 获取指定索引条目的文本内容
      4. itemData(int index) -> Any                  # 获取指定索引条目的用户数据
      5. currentIndex() -> int                       # 获取当前选中条目索引
      6. currentText() -> str                        # 获取当前选中条目文本
      7. currentDate() -> any                        # 获取当前选中条目用户数据
      8. cb.itemIcon(cb.currentIndex())              # 配合使用,获取当前选中条目的图标
    • 数据限制
      1. setMaxCount(int max)                        # 设置最大存储条目数,达到最大后就不允许添加了,而不是删除老的,添加新的
      2. maxCount()                                  # 获取最大存储条目数
      3. setMaxVisibleItems(int maxItems)            # 设置下拉框一屏显示条目数,条目数过多则出现滚动条
      4. maxVisibleItems()                           # 获取下拉框一屏显示条目数
    • 常规操作
      1. setEditable(bool editable)              # 设置显示框是否可以被编辑
      2.     # 允许被编辑时,编辑后按回车键,会将编辑后的新内容添加到下拉框中
      3.     
      4.     isEditable()                            # 获取显示框是否可以被编辑
      5.     setDuplicatesEnabled(bool enable)       # 设置是否允许将重复内容追加到下拉框中(可编辑状态输入内容按回车时)
      6.     duplicatesEnabled()                     # 获取是否允许将重复内容追加到下拉框中
      7.     setFrame(bool)                          # 设置是否显示边框
      8.     hasFrame()                              # 获取是否显示边框
      9.     setIconSize(QSize(w, h))                # 统一设置图标尺寸
      10.     iconSize()                              # 获取图标尺寸
      11.     setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy policy)              # 设置下拉框尺寸调整策略
      12.         # 参数 QComboBox.SizeAdjustPolicy
      13.                 QComboBox.AdjustToContents                              # 组合框将始终根据内容进行调整
      14.                 QComboBox.AdjustToContentsOnFirstShow                   # 组合框将在第一次显示时调整其内容。
      15.                 QComboBox.AdjustToMinimumContentsLength                 # 组合框将调整为设置的最小内容长度进行调整,请改用AdjustToContents或AdjustToContentsOnFirstShow。
      16.                 QComboBox.AdjustToMinimumContentsLengthWithIcon         # 组合框将调整为设置最小内容长度加上图标的空间。出于性能原因,请在大型模型上使用此策略。
      17.     
      18.     sizeAdjustPolicy() -> QComboBox.SizeAdjustPolicy                    # 获取下拉框尺寸调整策略
      19.     
      20.     setMinimumContentsLength(int characters)                            # 设置最小内容长度
      21.     minimumContentsLength() -> int                                      # 获取最小内容长度
    • 清空
      1. clear()                                                                 # 清除所有存储的条目
      2. clearEditText()                                                         # 清除组合框中处于编辑的内容(清除选中内容)
    • 弹出
      showPopup()                                                             # 弹出下拉框
      
    • 完成器(过滤匹配项/隐藏不匹配项)
      1. setCompleter(QCompleter completer)                                      # 设置完成器
      2. completer() -> QCompleter # 获取完成器对象
      •  

    • 验证器
    • 详见:QValidator_验证器对象
      1. setValidator(QValidator validator)                                      # 设置验证器
      2. # 传入一个QValidator对象
      3. # 通过子类化QValidator类,重写validator() 和 fixup() 方法,对输入内容进行验证
      4. validator()                                                             # 获取验证器对象
  • 可用信号
    1. activated(int index)                # 某个条目被选中时(必须是用户交互), 造成的值改变才会发射这个信号,发送选中条目的索引
    2. activated(QString text)             # (重载)某个条目被选中时(必须是用户交互), 造成的值改变才会发射这个信号,发送选中条目的显示文本
    3. currentIndexChanged(int index)      # 当前选中的索引发生改变时(用户交互、代码控制),发送选中条目的索引
    4. currentIndexChanged(QString text)   # (重载)当前选中的索引发生改变时(用户交互、代码控制),发送选中条目的显示文本
    5. currentTextChanged(QString text)    # 当前的文本内容发生改变时,发送新的文本内容(包括重新选中条目、修改当前条目的显示文本)
    6. editTextChanged(QString text)       # 可编辑状态下,编辑的文本发生改变时,发送新的文本内容
    7. highlighted(int index)              # 高亮发生改变时,发送高亮条目的索引(鼠标放上去的时候)
    8. highlighted(QString text)           # (重载)高亮发生改变时,发送高亮条目的显示文本,鼠标放上去的时候
    9. textHighlighted(self, str)          # 显示文本高亮发生改变时,发送高亮条目的显示文本
    • 下拉选择框对象处于可编辑状态时
      • 修改文本内容时,触发 currentTextChanged 和 editTextChanged
      • 修改文本内容后按下回车,触发 activated 和 currentIndexChanged
  • 知识点补充


QFontComboBox

  • 描述
    • 字体家族选择下拉选择框
    • 组合框中填充了按字母顺序排列的字体系列名称列表,让用户选择字体家族
    • 后面还会学习字体选择对话框控件:QFontDialog
  • 继承自:QComboBox
  • 功能作用
    • 设置和获取当前字体
      1. setCurrentFont(QFont f)
      2. currentFont() -> QFont
    • 设置和获取过滤器
      1. setFontFilters(QFontComboBox.FontFilters)
      2. fontFilters() -> QFontComboBox.FontFilters
      3.     # 参数 QFontComboBox.FontFilters
      4.         QFontComboBox.AllFonts                  # 显示所有字体
      5.         QFontComboBox.ScalableFonts             # 显示可缩放字体
      6.         QFontComboBox.NonScalableFonts          # 显示不可缩放的字体
      7.         QFontComboBox.MonospacedFonts           # 显示等宽字体
      8.         QFontComboBox.ProportionalFonts         # 显示比例字体
  • 信号
    1. # 继承父类
    2. currentIndexChanged(QString int)        # 当前索引发生改变时发射信号,传递条目索引号
    3. currentIndexChanged(QString text)       # (重载)当前索引发生改变时发射信号,传递条目显示内容    
    4. currentFontChanged(QFont font)          # 当前字体发生改变时发射信号,传递一个QFont对象

  • 代码示例
  • 示例1:QComboBox创建使用
    1. from PyQt5.Qt import *
    2. import sys
    3. class Windows(QWidget):
    4.     def __init__(self):
    5.         super().__init__()
    6.         self.setWindowTitle('QComboBox-创建使用')
    7.         self.resize(500500)
    8.         self.widget_list()
    9.     def widget_list(self):
    10.         self.add_widget()
    11.     def add_widget(self):
    12.         cb = QComboBox(self)
    13.         cb.resize(15030)
    14.         cb.move(1050)
    15.         btn = QPushButton('获取数据1',self)
    16.         btn.move(10100)
    17.         btn2 = QPushButton('获取数据2', self)
    18.         btn2.move(120100)
    19.         pass # 添加条目
    20.         # ****************添加条目****************** 开始
    21.         # cb.addItem('湖南')
    22.         # cb.addItem('湖北')
    23.         # cb.addItem(QIcon('../images/jpg/home.jpg'), '北京')
    24.         # cb.addItems(['广东','四川','江西','广西'])
    25.         # ****************添加数据****************** 结束
    26.         pass  # 插入条目
    27.         # ****************插入条目****************** 开始
    28.         # cb.insertItem(0, '甘肃')
    29.         # cb.insertItem(1, QIcon('../images/jpg/save.jpg'), '陕西')
    30.         # cb.insertItems(1, ('黑龙江','吉林','辽宁'))
    31.         # ****************插入条目****************** 结束
    32.         pass  # 设置条目
    33.         # ****************设置条目****************** 开始
    34.         # cb.setItemIcon(0, QIcon('../images/jpg/save.jpg'))
    35.         # cb.setItemText(0,'甘肃省')
    36.         # cb.setItemData(0, '甘肃')
    37.         # ****************设置条目****************** 结束
    38.         pass # 模型操作
    39.         # ****************模型操作****************** 开始
    40.         # 模型操作、视图操作、代理设置后面会详细讲解
    41.         
    42.         # ****************模型操作****************** 结束
    43.         pass  # 删除条目
    44.         # ****************删除条目****************** 开始
    45.         # cb.removeItem(0)
    46.         # ****************删除条目****************** 结束
    47.         pass  # 插入分割线
    48.         # ****************插入分割线****************** 开始
    49.         # cb.insertSeparator(3)
    50.         # cb.insertSeparator(6)
    51.         # ****************插入分割线****************** 结束
    52.         pass  # 设置默认显示值
    53.         # ****************设置默认显示值****************** 开始
    54.         # cb.setCurrentIndex(4)
    55.         # cb.setCurrentText('广东')
    56.         # cb.setEditable(True)
    57.         # cb.setEditText('广东省啊')
    58.         # ****************设置默认显示值****************** 结束
    59.         pass # 获取数据
    60.         # ****************获取数据****************** 开始
    61.         # ls = ['湖南','广东', '四川', '江西', '广西', '黑龙江', '吉林', '辽宁','湖北']
    62.         # for i, v in enumerate(ls):
    63.         # cb.addItem(v, i * 10)
    64.         #
    65.         # def btn_cao():
    66.         # print('count:', cb.count())
    67.         # print('Index:', cb.currentIndex())
    68.         # print(' Text:', cb.currentText())
    69.         # print(' Date:', cb.currentData())
    70.         # print(' Icon:', cb.itemIcon(cb.currentIndex()))
    71.         #
    72.         # def btn_cao2():
    73.         # print(cb.itemIcon(cb.count()-1))
    74.         # print(cb.itemText(cb.count()-1))
    75.         # print(cb.itemData(cb.count()-1))
    76.         #
    77.         #
    78.         # btn.clicked.connect(btn_cao)
    79.         # # btn2.clicked.connect(btn_cao2)
    80.         # print(cb.count())
    81.         # btn2.clicked.connect(lambda _, index=cb.count()-1: print(cb.itemIcon(index), cb.itemText(index), cb.itemData(index)))
    82.         # # clicked(self, checked: bool = False)
    83.         # # 由于clicked信号会默认发射一个参数False(0) ,所以lambda中需要增加一个"_"变量来忽略这个参数(或者添加一个变量接收这个参数,后面不用)
    84.         # ****************获取数据****************** 结束
    85.         pass # 数据条目限制
    86.         # ****************数据条目限制****************** 开始
    87.         # cb.setMaxCount(20)
    88.         # cb.setMaxVisibleItems(15)
    89.         #
    90.         # ls = ['河北', '山西', '黑龙江', '吉林', '辽宁', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', \
    91.         # '湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', \
    92.         # '宁夏', '新疆', '北京', '天津', '上海', '重庆', '香港', '澳门']
    93.         # for i, v in enumerate(ls):
    94.         # cb.addItem(v, i * 10)
    95.         
    96.         # ****************数据条目限制****************** 结束
    97.         pass # 常规操作
    98.         # ****************常规操作****************** 开始
    99.         # ls = ['河北', '山西', '黑龙江', '吉林', '辽宁', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', \
    100.         # '湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', \
    101.         # '宁夏', '新疆', '北京', '天津', '上海', '重庆', '香港', '澳门']
    102.         # for i, v in enumerate(ls):
    103.         # cb.addItem(v, i * 10)
    104.         #
    105.         # cb.setEditable(True) # 选中条目是否允许被编辑
    106.         # cb.setDuplicatesEnabled(False) # 可编辑条目重复时,是否允许被追加到下拉框中
    107.         # cb.setFrame(False) # 是否显示边框
    108.         # # cb.setItemIcon(0, QIcon('../images/jpg/home.jpg')) # 设置条目图标
    109.         # # cb.setItemIcon(1, QIcon('../images/jpg/edit.jpg')) # 设置条目图标
    110.         # # cb.setIconSize(QSize(100, 100)) # 统一设置图标尺寸
    111.         # cb.setSizeAdjustPolicy(QComboBox.AdjustToContents) # 设置下拉框尺寸调整策略
    112.         # cb.setMinimumContentsLength(10) # 设置最小内容长度
    113.         # ****************常规操作****************** 结束
    114.         pass # 其他操作
    115.         # ****************其他操作****************** 开始
    116.         # ls = ['河北', '山西', '黑龙江', '吉林', '辽宁', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', \
    117.         # '湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', \
    118.         # '宁夏', '新疆', '北京', '天津', '上海', '重庆', '香港', '澳门']
    119.         # for i, v in enumerate(ls):
    120.         # cb.addItem(v, i * 10)
    121.         #
    122.         # cb.setEditable(True)
    123.         # btn.setText('清除所有条目')
    124.         # btn2.setText('清除编辑条目')
    125.         # btn.clicked.connect(lambda :cb.clear()) # 清除所有条目
    126.         # btn2.clicked.connect(lambda :cb.clearEditText()) # 清除当前编辑条目
    127.         # btn.setText('弹出下拉框')
    128.         # btn.clicked.connect(lambda :cb.showPopup())
    129.         # cp = QCompleter(['Fengzi','Shixinfeng','aaa','bbb','ababa'])
    130.         # cb.setCompleter(cp) # 完成器
    131.         # vld = QValidator
    132.         # cb.setValidator(vld)
    133.         # ****************其他操作****************** 结束
    134.         pass # 可用信号
    135.         # ****************可用信号****************** 开始
    136.         ls = ['河北''山西''黑龙江''吉林''辽宁''江苏''浙江''安徽''福建''江西''山东''河南''湖北', \
    137.               '湖南''广东''海南''四川''贵州''云南''陕西''甘肃''青海''台湾''内蒙古''广西''西藏', \
    138.               '宁夏''新疆''北京''天津''上海''重庆''香港''澳门']
    139.         for i, v in enumerate(ls):
    140.             cb.addItem(v, i * 10)
    141.         # cb.setEditable(True) # 选中条目是否允许被编辑
    142.         # cb.activated.connect(lambda val:print('选中条目发生了改变',val))
    143.         # cb.activated[str].connect(lambda val:print('选中条目发生了改变',val))
    144.         #
    145.         # cb.currentIndexChanged.connect(lambda val: print('当前选中的索引发生了改变',val))
    146.         # cb.currentIndexChanged[str].connect(lambda val: print('当前选中的索引发生了改变',val))
    147.         #
    148.         # cb.currentTextChanged.connect(lambda val: print('选中文本发生了改变', val))
    149.         #
    150.         # cb.editTextChanged.connect(lambda val:print('可编辑文本发生了改变', val))
    151.         #
    152.         # btn.clicked.connect(lambda :cb.setItemText(0, '测试一下'))
    153.         btn2.clicked.connect(lambda :cb.setCurrentIndex(2))
    154.         # cb.highlighted.connect(lambda val:print('高亮显示', val))
    155.         # cb.highlighted[str].connect(lambda val:print('高亮显示', val))
    156.         cb.textHighlighted.connect((lambda val:print('text高亮', val)))
    157.         # ****************可用信号****************** 结束
    158.         
    159. if __name__ == '__main__':
    160.     app = QApplication(sys.argv)
    161.     window = Windows()
    162.     window.show()
    163.     sys.exit(app.exec_())
  • 示例2:二级联动下拉框案例
  • 要求:给定城市数据,实现两级联动效果。选择城市后输出城市对应的ID
    1. from PyQt5.Qt import *
    2. import sys
    3. class Windows(QWidget):
    4.     def __init__(self):
    5.         super().__init__()
    6.         self.setWindowTitle('QComboBox-二级联动')
    7.         self.resize(500500)
    8.         self.pro_dic = {'湖南':
    9.                             {'长沙':'001001',
    10.                              '株洲':'001002',
    11.                              '湘潭':'001003',
    12.                              '衡阳':'001004',
    13.                              '邵阳':'001005',
    14.                              '岳阳':'001006',
    15.                              '张家界''001007',
    16.                              '益阳''001008',
    17.                              '常德''001009',
    18.                              '娄底''001010',
    19.                              '郴州''001011',
    20.                              '永州''001012',
    21.                              '怀化''001013'
    22.                              },
    23.                         '北京':{'东城区':'002001',
    24.                                 '西城区':'002002',
    25.                                 '朝阳区':'002003',
    26.                                 '丰台区':'002004',
    27.                                 '石景山区':'002005',
    28.                                 '海淀区':'002006',
    29.                                 '顺义区':'002007',
    30.                                 '通州区':'002008',
    31.                                 '大兴区':'002009',
    32.                                 '房山区':'002010',
    33.                                 '门头沟区':'002011',
    34.                                 '昌平区':'002012',
    35.                                 '平谷区':'002013',
    36.                                 '密云区':'002014',
    37.                                 '怀柔区':'002015',
    38.                                 '延庆区':'002016'},
    39.                         '广东':{'广州':'003001',
    40.                                 '深圳':'003002',
    41.                                 '珠海':'003003',
    42.                                 '汕头':'003004',
    43.                                 '佛山':'003005',
    44.                                 '韶关':'003006',
    45.                                 '湛江':'003007',
    46.                                 '肇庆':'003008',
    47.                                 '江门':'003009',
    48.                                 '茂名':'003010',
    49.                                 '惠州':'003011',
    50.                                 '梅州':'003012',
    51.                                 '汕尾':'003013',
    52.                                 '河源':'003014',
    53.                                 '阳江':'003015',
    54.                                 '清远':'003016',
    55.                                 '东莞':'003017',
    56.                                 '中山':'003018',
    57.                                 '潮州':'003019',
    58.                                 '揭阳':'003020'}
    59.                         }
    60.         self.widget_list()
    61.     def widget_list(self):
    62.         self.add_widget()
    63.     def add_widget(self):
    64.         cb_province = QComboBox(self)
    65.         cb_city = QComboBox(self)
    66.         self.cb_province = cb_province
    67.         self.cb_city = cb_city
    68.         cb_province.resize(15030)
    69.         cb_city.resize(15030)
    70.         x = 10
    71.         y = 10
    72.         cb_province.move(x, y)
    73.         cb_city.move(cb_province.x()+cb_province.width()+5, cb_province.y())
    74.         # 省份发生变化时触发信号,联动城市下拉框
    75.         cb_province.currentIndexChanged[str].connect(self.pro_changed)
    76.         # 城市发生变化时触发信号,打印城市对应的ID
    77.         self.cb_city.currentIndexChanged.connect(self.city_changed)
    78.         # 给省份下拉框控件添加数据
    79.         cb_province.addItems(self.pro_dic.keys())
    80.     def pro_changed(self,pro_name):
    81.         self.cb_city.blockSignals(True)     # 取消城市下拉框发射信号
    82.         # 清空城市下拉框条目
    83.         self.cb_city.clear()
    84.         self.cb_city.blockSignals(False)    # 恢复城市下拉框发射信号
    85.         # 城市下拉框控件添加省份对应城市和ID
    86.         for key,val in self.pro_dic[pro_name].items():
    87.             self.cb_city.addItem(key, val)
    88.     def city_changed(self, city_index):
    89.         # 获取城市ID
    90.         city_id = self.cb_city.itemData(city_index)
    91.         print(city_id)
    92. if __name__ == '__main__':
    93.     app = QApplication(sys.argv)
    94.     window = Windows()
    95.     window.show()
    96.     sys.exit(app.exec_())
  • 示例3:QFontComboBox示例
    1. from PyQt5.Qt import *
    2. import sys
    3. class Windows(QWidget):
    4.     def __init__(self):
    5.         super().__init__()
    6.         self.setWindowTitle('QFontComboBox-创建使用')
    7.         self.resize(500500)
    8.         self.widget_list()
    9.     def widget_list(self):
    10.         self.add_widget()
    11.     def add_widget(self):
    12.         labe = QLabel(self)
    13.         labe.setText("我喜欢学习Python编程!")
    14.         labe.move(2050)
    15.         fcb = QFontComboBox(self)
    16.         fcb.setEditable(False)          # 设置选中条目不可被编辑
    17.         fcb.move(20100)
    18.         # ****************设置过滤器****************** 开始
    19.         fcb.setFontFilters(QFontComboBox.AllFonts)  # 显示所有字体
    20.         # fcb.setFontFilters(QFontComboBox.ScalableFonts) # 显示可缩放字体
    21.         # fcb.setFontFilters(QFontComboBox.NonScalableFonts) # 显示不可缩放的字体
    22.         # fcb.setFontFilters(QFontComboBox.MonospacedFonts) # 显示等宽字体
    23.         # fcb.setFontFilters(QFontComboBox.ProportionalFonts) # 显示比例字体
    24.         # ****************设置过滤器****************** 结束
    25.         # ****************可用信号****************** 开始
    26.         # 当前字体发生改变时发生信号,传递一个QFont对象
    27.         fcb.currentFontChanged.connect(lambda font:labe.setFont(font))
    28.         # 当前索引号发生改变时发射信号,传递条目索引号
    29.         fcb.currentIndexChanged.connect(lambda index:print('index发生了改变',index))
    30.         # (重载)当前索引号发生改变时发射信号,传递条目显示文本
    31.         fcb.currentIndexChanged[str].connect(lambda s:print('index发生了改变',s))
    32.         # ****************可用信号****************** 结束
    33. if __name__ == '__main__':
    34.     app = QApplication(sys.argv)
    35.     window = Windows()
    36.     window.show()
    37.     sys.exit(app.exec_())
  • 示例4:QComboBox通过`QCompleter`生成器实现过滤(隐藏)不匹配项
    • 可编辑状态输入内容自动过滤出相匹配的选项

    •  
  1. from PyQt5.Qt import *
  2. import sys
  3. class MyTest(QWidget):
  4. def __init__(self):
  5. super(MyTest, self).__init__()
  6. self.items = ['item1', 'item2', 'item3', '张三', '李四', '王五']
  7. self.resize(200, 100)
  8. self.test()
  9. def test(self):
  10. cmb = QComboBox(self)
  11. self.cmb = cmb
  12. cmb.resize(100, 50)
  13. cmb.setEditable(True)
  14. cmb.setDuplicatesEnabled(False)
  15. # 给下拉选择框添加下拉选项
  16. cmb.addItems(self.items)
  17. # 下拉框编辑文本发生改变时触发事件
  18. cmb.editTextChanged.connect(self.cmb_textchanged)
  19. layout = QHBoxLayout()
  20. layout.addWidget(cmb)
  21. self.setLayout(layout)
  22. def cmb_textchanged(self, newtxt):
  23. commpleter = QCompleter(self.items, self.cmb)
  24. self.cmb.setCompleter(commpleter)
  25. if __name__ == '__main__':
  26. app = QApplication(sys.argv)
  27. win = MyTest()
  28. win.show()
  29. sys.exit(app.exec_())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/560472
推荐阅读
相关标签
  

闽ICP备14008679号