pyqt5的QComboBox 使用模板的具体方法


Posted in Python onSeptember 06, 2018

QComboBox 的常规使用方法,在这个使用模板里,基本都有了。

QComboBox小部件是一个组合的按钮和弹出列表。

QComboBox提供了一种向用户呈现选项列表的方式,其占用最小量的屏幕空间。

组合框是一个显示当前项目的选择小部件,可以弹出可选项目列表。组合框可以是可编辑的,允许用户修改列表中的每个项目。

组合框可以包含图像以及字符串; 当然insertItem()和setItemText()函数需要适当重载。对于可编辑组合框,提供了函数clearEditText(),以清除显示的字符串而不更改组合框的内容。

如果组合框的当前项目发生更改,则会发出两个信号currentIndexChanged()和activated()。无论以编程方式或通过用户交互完成更改,currentIndexChanged()总是被发射,而只有当更改是由用户交互引起时才activated() 。highlighted()信号在用户突出显示组合框弹出列表中的项目时发出。所有三个信号都有两个版本,一个带有str参数,另一个带有int参数。如果用户选择或突出显示一个图像,则只会发出int信号。每当可编辑组合框的文本发生改变时,editTextChanged()信号就会发出。

当用户在可编辑的组合框中输入一个新的字符串时,该小部件可能会插入它,也可能不会插入它,并且可以将它插入到多个位置。默认策略是InsertAtBottom,但您可以使用setInsertPolicy()更改它。

可以使用QValidator将输入约束为可编辑的组合框;请参阅setValidator()。默认情况下,接受任何输入。

例如,可以使用插入函数insertItem()和insertItems()来填充组合框。可以使用setItemText()更改项目。一个项目可以使用removeItem()来移除,所有项目都可以使用clear()来移除。当前项目的文本由currentText()返回,项目的文本编号使用text()返回。当前项目可以使用setCurrentIndex()来设置。 count()返回组合框中的项目数;可以用setMaxCount()设置项目的最大数量。您可以允许使用setEditable()进行编辑。对于可编辑组合框,您可以使用setCompleter()设置自动完成,并且用户是否可以添加重复项由setDuplicatesEnabled()进行设置。

QComboBox为其弹出列表使用模型/视图框架并存储其项目。默认情况下,QStandardItemModel存储项目,QListView子类显示弹出列表。您可以直接访问模型和视图(使用model()和view()),但QComboBox还提供了设置和获取项目数据的函数(例如,setItemData()和itemText())。您还可以设置新的模型和视图(使用setModel()和setView())。对于组合框标签中的文本和图标,将使用具有Qt.DisplayRole和Qt.DecorationRole的模型中的数据。请注意,您不能通过使用setSelectionMode()来更改view()的SelectionMode。

类归属

PyQt5->QtWidgets->QComboBox

继承关系

PyQt5->QObject and QPaintDevice->QWidget->QFontComboBox->QComboBox

熟悉一下代码,直接就可以用了。

pyqt5的QComboBox 使用模板的具体方法

【如下代码,完全复制,直接运行,即可使用】

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
################################################

items_list=["C","C++","Java","Python","JavaScript","C#","Swift","go","Ruby","Lua","PHP"]

datas_list=[1972,1983,1995,1991,1992,2000,2014,2009,1995,1993,1995]

################################################
class Widget(QWidget):
  def __init__(self, *args, **kwargs):
    super(Widget, self).__init__(*args, **kwargs)
    layout = QVBoxLayout(self)
    self.combobox1 = QComboBox(self, minimumWidth=200)
    self.combobox2 = QComboBox(self, minimumWidth=200)
    self.combobox3 = QComboBox(self, minimumWidth=200)
    self.combobox4 = QComboBox(self, minimumWidth=200)

    layout.addWidget(QLabel("增加单项,不带数据", self))
    layout.addWidget(self.combobox1)
    layout.addItem(QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))

    layout.addWidget(QLabel("增加单项,附带数据", self))
    layout.addWidget(self.combobox2)
    layout.addItem(QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))

    layout.addWidget(QLabel("增加多项,不带数据", self))
    layout.addWidget(self.combobox3)
    layout.addItem(QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))

    layout.addWidget(QLabel("设置模型,不带数据", self))
    layout.addWidget(self.combobox4)


    #初始化combobox
    self.init_combobox1()
    self.init_combobox2()
    self.init_combobox3()
    self.init_combobox4()

    #增加选中事件
    self.combobox1.activated.connect(self.on_combobox1_Activate)
    self.combobox2.activated.connect(self.on_combobox2_Activate)
    self.combobox3.activated.connect(self.on_combobox3_Activate)
    self.combobox4.activated.connect(self.on_combobox4_Activate)

  ####### addItem() 增加单项元素,不带数据 #########
  def init_combobox1(self):
    for i in range(len(items_list)):
      self.combobox1.addItem(items_list[i])
    self.combobox1.setCurrentIndex(-1)

  def on_combobox1_Activate(self, index):
    print(self.combobox1.count())
    print(self.combobox1.currentIndex())
    print(self.combobox1.currentText())
    print(self.combobox1.currentData())
    print(self.combobox1.itemData(self.combobox1.currentIndex()))
    print(self.combobox1.itemText(self.combobox1.currentIndex()))
    print(self.combobox1.itemText(index))

  ####### addItem() 增加单项元素,附带数据 #########
  def init_combobox2(self):
    for i in range(len(items_list)):
      self.combobox2.addItem(items_list[i],datas_list[i])
    self.combobox2.setCurrentIndex(-1)

  def on_combobox2_Activate(self, index):
    print(self.combobox2.count())
    print(self.combobox2.currentIndex())
    print(self.combobox2.currentText())
    print(self.combobox2.currentData())
    print(self.combobox2.itemData(self.combobox2.currentIndex()))
    print(self.combobox2.itemText(self.combobox2.currentIndex()))
    print(self.combobox2.itemText(index))

  ####### addItems() 增加多项元素,不带数据 #########
  def init_combobox3(self):
    self.combobox3.addItems(items_list)
    self.combobox3.setCurrentIndex(-1)

  def on_combobox3_Activate(self, index):
    print(self.combobox3.count())
    print(self.combobox3.currentIndex())
    print(self.combobox3.currentText())
    print(self.combobox3.currentData())
    print(self.combobox3.itemData(self.combobox3.currentIndex()))
    print(self.combobox3.itemText(self.combobox3.currentIndex()))
    print(self.combobox3.itemText(index))

  ####### setModel() 设置数据模型,不带数据 #########
  def init_combobox4(self):
    self.tablemodel = QStringListModel(items_list)
    self.combobox4.setModel(self.tablemodel)
    self.combobox4.setCurrentIndex(-1)

  def on_combobox4_Activate(self, index):
    print(self.combobox4.count())
    print(self.combobox4.currentIndex())
    print(self.combobox4.currentText())
    print(self.combobox4.currentData())
    print(self.combobox4.itemData(self.combobox4.currentIndex()))
    print(self.combobox4.itemText(self.combobox4.currentIndex()))
    print(self.combobox4.itemText(index))

if __name__ == "__main__":
  app = QApplication(sys.argv)
  w = Widget()
  w.show()
  sys.exit(app.exec_())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的二叉树查找算法模块使用指南
Jul 04 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
TensorFlow平台下Python实现神经网络
Mar 10 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
python文件排序的方法总结
Sep 13 Python
Django与数据库交互的实现
Jun 03 Python
Python实现双向链表
May 25 Python
Python多线程编程之多线程加锁操作示例
Sep 06 #Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 #Python
Python json模块dumps、loads操作示例
Sep 06 #Python
Python 字符串换行的多种方式
Sep 06 #Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 #Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 #Python
python使用__slots__让你的代码更加节省内存
Sep 05 #Python
You might like
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
原生js中ajax访问的实例详解
2017/09/19 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
pandas 数据实现行间计算的方法
2018/06/08 Python
python实现文件的备份流程详解
2019/06/18 Python
详解python中各种文件打开模式
2020/01/19 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
Python logging模块handlers用法详解
2020/08/14 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
公证委托书模板
2014/04/03 职场文书
十八大宣传标语
2014/10/09 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
介绍信的格式
2015/01/30 职场文书
西游降魔篇观后感
2015/06/15 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
Redis基本数据类型String常用操作命令
2022/06/01 Redis
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript