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中进行自动化单元测试的教程
Apr 15 Python
详解Golang 与python中的字符串反转
Jul 21 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
python 如何实现遗传算法
Sep 22 Python
python 解决Windows平台上路径有空格的问题
Nov 10 Python
解决Python字典查找报Keyerror的问题
May 26 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
PHP crc32()函数讲解
2019/02/14 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
js实现动态时钟
2020/03/12 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
使用Python生成XML的方法实例
2017/03/21 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
了解AppleTalk协议吗
2014/04/01 面试题
和解协议书
2014/04/16 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
武夷山导游词
2015/02/03 职场文书
教师节获奖感言
2015/07/31 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript