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 相关文章推荐
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
Python代码缩进和测试模块示例详解
May 07 Python
python生成ppt的方法
Jun 07 Python
selenium+python自动化测试之环境搭建
Jan 23 Python
基于python历史天气采集的分析
Feb 14 Python
Python数据类型之Set集合实例详解
May 07 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
通过案例解析python鸭子类型相关原理
Oct 10 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过滤★等特殊符号的正则
2014/01/27 PHP
破解Session cookie的方法
2006/07/28 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
python继承和抽象类的实现方法
2015/01/14 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Python中文竖排显示的方法
2015/07/28 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
电大毕业自我鉴定
2014/02/03 职场文书
超市促销活动方案
2014/03/05 职场文书
跳槽求职信范文
2014/05/26 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
如何利用python实现Simhash算法
2022/06/28 Python