PyQt5下拉式复选框QComboCheckBox的实例


Posted in Python onJune 25, 2019

笔者在用PyQt5写GUI时碰到了需要使用下拉式复选框的情况,但是PyQt5中没有相应的组件,而网上找到的方法大多是qt使用的,所以不能直接拿来用。

没办法,在这种让人无奈的情况下,笔者只能根据网上大神们的方法试着自己写一个喽。

你还别说,真就让我写出来了。(笔者是个菜鸟新手,所以这小小的成功让我很开心)

然后笔者就很严肃地将这个组件命名为QComboCheckBox,也就是QComboBox和QCheckBox的拼接。

废话不多说,直接先上效果图:

PyQt5下拉式复选框QComboCheckBox的实例

然后是代码:(第一个是基础,第二个是带全选和清空功能)

from PyQt5.QtWidgets import QComboBox,QLineEdit,QListWidget,QCheckBox,QListWidgetItem
 
class ComboCheckBox(QComboBox):
  def __init__(self,items):#items==[str,str...]
    super(ComboCheckBox,self).__init__()
    self.items=items
    self.qCheckBox=[]
    self.qLineEdit=QLineEdit()
    self.qLineEdit.setReadOnly(True)
    qListWidget=QListWidget()
 
    self.row_num=len(self.items)
    for i in range(self.row_num):
      self.qCheckBox.append(QCheckBox())
      qItem=QListWidgetItem(qListWidget)
      self.qCheckBox[i].setText(self.items[i])
      qListWidget.setItemWidget(qItem,self.qCheckBox[i])
      self.qCheckBox[i].stateChanged.connect(self.show)
    
    self.setLineEdit(self.qLineEdit)     
    self.setModel(qListWidget.model())
    self.setView(qListWidget)
 
  def Selectlist(self):
    Outputlist=[]
    for i in range(self.row_num):
      if self.qCheckBox[i].isChecked()==True:
        Outputlist.append(self.qCheckBox[i].text())
    return Outputlist
 
  def show(self):
    show=''
    self.qLineEdit.setReadOnly(False)
    self.qLineEdit.clear()
    for i in self.Selectlist():
      show+=i+';'
    self.qLineEdit.setText(show)
    self.qLineEdit.setReadOnly(True)
from PyQt5.QtWidgets import QComboBox,QLineEdit,QListWidget,QCheckBox,QListWidgetItem
 
class ComboCheckBox(QComboBox):
  def __init__(self,items):#items==[str,str...]
    super(ComboCheckBox,self).__init__()
    self.items=items
    self.items.insert(0,'全部')
    self.row_num=len(self.items)
    self.Selectedrow_num=0
    self.qCheckBox=[]
    self.qLineEdit=QLineEdit()
    self.qLineEdit.setReadOnly(True)
    self.qListWidget=QListWidget()
    self.addQCheckBox(0)
    self.qCheckBox[0].stateChanged.connect(self.All)
    for i in range(1,self.row_num):
      self.addQCheckBox(i)
      self.qCheckBox[i].stateChanged.connect(self.show)
    self.setModel(self.qListWidget.model())
    self.setView(self.qListWidget)
    self.setLineEdit(self.qLineEdit)     
 
  def addQCheckBox(self,i):
    self.qCheckBox.append(QCheckBox())
    qItem=QListWidgetItem(self.qListWidget)
    self.qCheckBox[i].setText(self.items[i])
    self.qListWidget.setItemWidget(qItem,self.qCheckBox[i])    
 
  def Selectlist(self):
    Outputlist=[]
    for i in range(1,self.row_num):
      if self.qCheckBox[i].isChecked()==True:
        Outputlist.append(self.qCheckBox[i].text())
    self.Selectedrow_num=len(Outputlist)
    return Outputlist 
 
  def show(self):
    show=''
    Outputlist=self.Selectlist()
    self.qLineEdit.setReadOnly(False)
    self.qLineEdit.clear()
    for i in Outputlist:
      show+=i+';'
    if self.Selectedrow_num==0:
      self.qCheckBox[0].setCheckState(0)
    elif self.Selectedrow_num==self.row_num-1:
      self.qCheckBox[0].setCheckState(2)
    else:
      self.qCheckBox[0].setCheckState(1)
    self.qLineEdit.setText(show)
    self.qLineEdit.setReadOnly(True)
 
  def All(self,zhuangtai):
    if zhuangtai==2:
      for i in range(1,self.row_num):
        self.qCheckBox[i].setChecked(True)
    elif zhuangtai==1:
      if self.Selectedrow_num==0:
        self.qCheckBox[0].setCheckState(2)
    elif zhuangtai==0:
      self.clear()
 
  def clear(self):
    for i in range(self.row_num):
      self.qCheckBox[i].setChecked(False)

使用方法:

a=ComboCheckBox('子项列表')
Selectlist()获取被选子项列表
All()全选
clear()清空已选项

以上这篇PyQt5下拉式复选框QComboCheckBox的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
使用Python构建Hopfield网络的教程
Apr 14 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
pytorch 查看cuda 版本方式
Jun 23 Python
python Cartopy的基础使用详解
Nov 01 Python
python 命令行传参方法总结
May 25 Python
Python制作表白爱心合集
Jan 22 Python
在Pandas中处理NaN值的方法
Jun 25 #Python
python实现websocket的客户端压力测试
Jun 25 #Python
python中metaclass原理与用法详解
Jun 25 #Python
python实现接口并发测试脚本
Jun 25 #Python
Python实现EXCEL表格的排序功能示例
Jun 25 #Python
python实现动态创建类的方法分析
Jun 25 #Python
python pandas写入excel文件的方法示例
Jun 25 #Python
You might like
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
python中的常量和变量代码详解
2018/07/25 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
python获取整个网页源码的方法
2020/08/03 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
公司周年庆典致辞
2015/07/30 职场文书
清洁工工作总结
2015/08/11 职场文书