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 相关文章推荐
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
Python如何使用神经网络进行简单文本分类
Feb 25 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
smtp邮件发送一例
2006/10/09 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
Python实现Const详解
2015/01/27 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python实现控制COM口的示例
2019/07/03 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
木工主管岗位职责
2013/12/08 职场文书
医生进修自我鉴定
2014/01/19 职场文书
人事任命书格式
2014/06/05 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
临时租车协议范本
2014/09/23 职场文书
健康状况证明模板
2014/10/23 职场文书
先进个人事迹材料
2014/12/29 职场文书