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中使用NLTK库实现对词干的提取的教程
Apr 08 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
Python中str.format()详解
Mar 12 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
python 实现字符串下标的输出功能
Feb 13 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
python如何调用百度识图api
Sep 29 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
Django数据统计功能count()的使用
Nov 30 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
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
javascript中this指向详解
2016/04/23 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
python求列表交集的方法汇总
2014/11/10 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
深入理解python中的atexit模块
2017/03/07 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
django-allauth入门学习和使用详解
2019/07/03 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
幼儿园家长评语
2014/02/10 职场文书
西式婚礼主持词
2014/03/13 职场文书
激励口号大全
2014/06/17 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL