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 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
Python-ElasticSearch搜索查询的讲解
Feb 25 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
Python imread、newaxis用法详解
Nov 04 Python
Python笔记之代理模式
Nov 20 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
python中数组和列表的简单实例
Mar 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
一个程序下载的管理程序(四)
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php header功能的使用
2013/10/28 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
Exjs 入门篇
2010/04/07 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
开源Web应用框架Django图文教程
2017/03/09 Python
Python 多线程实例详解
2017/03/25 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
python列表生成器迭代器实例解析
2019/12/19 Python
python基于win32api实现键盘输入
2020/12/09 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
Noon埃及:埃及在线购物
2019/11/26 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
小学教师事迹材料
2014/01/13 职场文书
致裁判员加油稿
2014/02/08 职场文书
健康家庭事迹材料
2014/05/02 职场文书
旷课检讨书500字
2014/10/14 职场文书
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python