zoukankan      html  css  js  c++  java
  • PyQt5Day21--输入控件QComboBox(组合框)+子类QFontComBox

    一、QComboBox(组合框)简介

      是一个组合控件,默认展示最小的空间给用户操作,可通过下拉选项界面选取更多预设选项。

    二、QComboBox的功能作用

    1、数据操作

    (1)框架

    (2)操作及展示

     1 cb = QComboBox(self)
     2 cb.resize(400, 30)
     3 
     4 # 单个添加条目
     5 # cb.addItem("xx1") # 添加条目项
     6 # cb.addItem(QIcon('xxx.png'),"xx2") # 添加带图标的条目
     7 # 多个添加
     8 # cb.addItems(['1','2','3']) # 可迭代对象(列表,元组)并且元素为字符串
     9 
    10 # 插入条目
    11 # cb.insertItem(1,"xxx") # 索引+内容
    12 # cb.insertItem(1,QIcon('xxx.png'),'xxx') # 索引+图标+内容
    13 # cb.insertItems(1,('a','b','c')) # 插入多项
    14 
    15 # 设置条目
    16 # cb.setItemIcon(3,QIcon('open.png')) # 设置图片
    17 # cb.setItemText(4,'哈哈') # 修改文本
    18 
    19 # 删除条目
    20 # cb.removeItem(5) # 移除索引为5的项
    21 
    22 # 插入分割线
    23 # cb.insertSeparator(2)
    24 
    25 # 设置当前编辑文本
    26 # cb.setCurrentIndex(4)  # 一开始显示的内容,通过索引指定
    27 # cb.setCurrentText('娃哈哈') # 修改当前编辑的内容
    28 # cb.setEditable(True) # 可编辑,可添加
    29 # cb.setEditText('itlike') # 编辑文本,在文本可编辑状态下才能操作
    30 
    31 # 了解
    32 model = QStandardItemModel()
    33 
    34 item1 = QStandardItem('item1')
    35 item2 = QStandardItem('item2')
    36 item22 = QStandardItem('item22')
    37 
    38 item2.appendRow(item22)
    39 model.appendRow(item1)
    40 model.appendRow(item2)
    41 cb.setModel(model)
    42 
    43 cb.setView(QTreeView(cb))  # 设置视图(多级显示)

    2、常用数据获取

    (1)框架

    (2)操作及展示

     1 cb = QComboBox(self)
     2 cb.resize(200, 40)
     3 
     4 cb.addItems(['abc', '123', '456'])
     5 cb.addItem(QIcon('xxx.png'), '娃哈哈', {'name': 'itlike'})  # 包含数据的条目
     6 
     7 btn = QPushButton(self)
     8 btn.move(300, 10)
     9 btn.setText("测试按钮")
    10 # btn.clicked.connect(lambda :print(cb.count())) # 获取条目数
    11 # btn.clicked.connect(lambda :print(cb.currentIndex())) # 获取当前的索引
    12 # btn.clicked.connect(lambda :print(cb.currentText())) # 获取当前的内容
    13 # btn.clicked.connect(lambda :print(cb.currentData())) # 获取当前提条目对应的数据
    14 btn.clicked.connect(
    15     lambda _, idx=cb.count() - 1: print(cb.itemIcon(idx), cb.itemText(idx), cb.itemData(idx)))  # 获取最后一个数据

    3、数据限制

    (1)框架

    (2)操作及展示

     1 cb = QComboBox(self)
     2 cb.resize(200, 40)
     3 
     4 cb.addItems(['abc', '123', '456'])
     5 cb.addItem(QIcon('xxx.png'), '娃哈哈', {'name': 'itlike'})  # 包含数据的条目
     6 
     7 btn = QPushButton(self)
     8 btn.move(300, 10)
     9 btn.setText("测试按钮")
    10 btn.clicked.connect(lambda: cb.addItem('it'))
    11 
    12 # 数据限制
    13 cb.setEditable(True)
    14 cb.setMaxCount(6)  # 设置最多数据条目
    15 cb.setMaxVisibleItems(3)  # 设置当前可展示的条目数

    4、常规操作

    (1)框架

    (2)操作及展示

     1 cb = QComboBox(self)
     2 cb.resize(200, 40)
     3 
     4 cb.addItems(['abc', '123', '456'])
     5 cb.addItem(QIcon('xxx.png'), '娃哈哈', {'name': 'itlike'})  # 包含数据的条目
     6 
     7 btn = QPushButton(self)
     8 btn.move(300, 10)
     9 btn.setText("测试按钮")
    10 
    11 # 常规操作
    12 cb.setEditable(True)
    13 
    14 cb.setDuplicatesEnabled(True)  # 可重复设置
    15 
    16 # cb.setFrame(False) # 取消边框
    17 
    18 cb.setIconSize(QSize(60, 60))  # 设置图标大小
    19 cb.setSizeAdjustPolicy(QComboBox.AdjustToContents)  # 参照内容调整位置
    20 
    21 # btn.clicked.connect(lambda :cb.clear()) # 清空所有条目
    22 # btn.clicked.connect(lambda :cb.clearEditText()) # 清空编辑的内容
    23 
    24 btn.clicked.connect(lambda: cb.showPopup())  # 修改为点击弹出
    25 
    26 cb.setCompleter(QCompleter(['123', 'abc', 'aaa', 'bbb']))  # 完成器,根据输入弹出相关内容
    27 
    28 # 还有验证器

    5、信号

    (1)框架

    (2)操作及展示

    1 cb.setEditable(True)
    2 # cb.activated.connect(lambda val:print("条目被激活",val)) # 信号默认发射整型数据,返回索引
    3 cb.activated[str].connect(lambda val: print("条目被激活", val))  # 信号传递为字符串,返回更改内容
    4 # cb.currentIndexChanged.connect(lambda val:print("当前索引改变",val)) # 返回改变的索引
    5 # cb.currentIndexChanged[str].connect(lambda val:print("当前索引改变",val)) # 返回改变索引对应的条目名称
    6 # cb.currentTextChanged.connect(lambda val:print("当前文本改变",val)) # 返回改变条目或者输入的内容
    7 cb.editTextChanged.connect(lambda val: print("当前编辑的文本改变", val))  # 当前编辑的文本,与上面的一个类似
    8 # cb.highlighted.connect(lambda val:print("高亮文本改变",val)) # 返回索引
    9 cb.highlighted[str].connect(lambda val: print("高亮文本改变", val))  # 返回条目

    6、综合案例

     1 # *******************QComboBox-综合案例**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("QComboBox综合案例")
     8         self.resize(500, 500)
     9         self.city_dic = {
    10             "北京":{
    11                 '东城':'001',
    12                 '西城':'002',
    13                 '朝阳':'003',
    14                 '丰台':'004'
    15             },
    16             '上海':{
    17                 '黄埔':'005',
    18                 '徐汇':'006',
    19                 '长宁':'007',
    20                 '静安':'008',
    21                 '松江':'009'
    22             },
    23             '广东':{
    24                 '广州':'010',
    25                 '深圳':'011',
    26                 '湛江':'012',
    27                 '佛山':'013'
    28             }
    29         }
    30         self.setup_ui()
    31 
    32     def setup_ui(self):
    33         # 1.创建两个下拉列表控件
    34         prov = QComboBox(self)
    35         city = QComboBox(self)
    36         prov.move(100,100)
    37         city.move(200,100)
    38         self.prov = prov
    39         self.city = city
    40 
    41 
    42         # 3.监听省下拉列表里面的当前值改变的信号
    43         prov.currentTextChanged[str].connect(self.prov_changed)
    44         # self.prov_changed(prov.currentText()) # 调用函数传参,因为上线的信号与槽第一次不会被调用
    45 
    46         # 4.监听城市下来列表的当前值发生改变的信号
    47         city.currentIndexChanged[int].connect(self.city_changed)
    48         # self.city_changed(city.currentIndex())
    49 
    50         # 2.展示数据到第一个下拉选项控件当中 (先监听信号,后添加数据,可以省略一些步骤)
    51         prov.addItems(self.city_dic.keys())
    52 
    53     def prov_changed(self,prov_name):
    54         print(prov_name)
    55         # 根据省的名称,获取字典里面对应的城市字典
    56         citys = self.city_dic[prov_name]
    57 
    58         self.city.blockSignals(True)  # 阻断信号发射
    59         self.city.clear()
    60         self.city.blockSignals(False)  # 打开信号发射
    61 
    62         # self.city.addItems(citys.keys())
    63         for key,val in citys.items():
    64             self.city.addItem(key,val)
    65 
    66     def city_changed(self,item_idx):
    67         # print(item_idx)
    68         print(self.city.itemData(item_idx))
    69 
    70 
    71 if __name__ == '__main__':
    72     import sys
    73 
    74     app=QApplication(sys.argv)
    75 
    76     window=Window()
    77     window.show()
    78     sys.exit(app.exec_())
    79 # *******************QComboBox-综合案例**********************结束
    综合案例

    三、子类QFontComboBox

      组合框中填充了按字母顺序排列的字体系列名称列表,让用户选择字体家族

      继承QComboBox。

     1 # *******************QFontComboBox**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("QFintComboBox")
     8         self.resize(500, 500)
     9         self.setup_ui()
    10 
    11     def setup_ui(self):
    12         fcb = QFontComboBox(self)
    13         fcb.resize(300,50)
    14 
    15         btn = QPushButton(self)
    16         btn.move(350,10)
    17         btn.setText("测试按钮")
    18 
    19         btn.clicked.connect(lambda :print(fcb.currentText())) # 获取当前字体
    20 
    21         label = QLabel(self)
    22         label.setText("哈哈哈,呵呵呵")
    23         label.move(200,225)
    24 
    25         fcb.currentFontChanged.connect(lambda font:label.setFont(font)) # 设置字体
    26 
    27 if __name__ == '__main__':
    28     import sys
    29 
    30     app=QApplication(sys.argv)
    31 
    32     window=Window()
    33     window.show()
    34     sys.exit(app.exec_())
    35 # *******************QFontComboBox**********************结束
  • 相关阅读:
    tomcat项目部署后,无法弹出浏览器窗口,IDEA控制台如何快速找到错误日志
    导入新的jar包后,提示ClassNotFoundException 怎么解决?
    Vue is not defined
    next(),nextLine(),nextInt的区别
    Properties类与流的相关方法,properties的键与值都应该是字符串
    Java并发编程从入门到精通
    Java并发编程从入门到精通
    Java并发编程从入门到精通
    Java并发编程从入门到精通
    Java并发编程从入门到精通
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12735467.html
Copyright © 2011-2022 走看看