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 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
Feb 15 Python
python实现PID算法及测试的例子
Aug 08 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
django中的图片验证码功能
Sep 18 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
Django自带用户认证系统使用方法解析
Nov 12 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中array_map与array_column之间的关系分析
2014/08/19 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
iframe 异步加载技术及性能分析
2011/07/19 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
python开发之thread线程基础实例入门
2015/11/11 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python版本单链表实现代码
2018/09/28 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
基于FME使用Python过程图解
2020/05/13 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
食品仓管员岗位职责
2015/04/01 职场文书
公司表扬信格式
2015/05/04 职场文书
小学德育工作总结2015
2015/05/12 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python