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标准日志模块logging的使用方法
Nov 01 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
解决python多行注释引发缩进错误的问题
Aug 23 Python
python简单实现9宫格图片实例
Sep 03 Python
python3中编码获取网页的实例方法
Nov 16 Python
Python利用capstone实现反汇编
Apr 06 Python
Python字符串的转义字符
Apr 07 Python
python实现学员管理系统(面向对象版)
Jun 05 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php向js函数传参的几种方法
2014/08/10 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
js表头排序实现方法
2015/01/16 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Django返回json数据用法示例
2016/09/18 Python
Python continue继续循环用法总结
2018/06/10 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Python3离线安装Requests模块问题
2019/10/13 Python
python3排序的实例方法
2020/10/20 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
毕业实习计划书
2015/01/16 职场文书
捐助感谢信
2015/01/22 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
廉政承诺书范文
2015/04/28 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
python字典的元素访问实例详解
2021/07/21 Python