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中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
Random 在 Python 中的使用方法
Aug 09 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
python动态文本进度条的实例代码
Jan 22 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
python获取整个网页源码的方法
Aug 03 Python
详解Python流程控制语句
Oct 28 Python
Python如何使用循环结构和分支结构
Apr 13 Python
python标准库ElementTree处理xml
May 20 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新手上路(三)
2006/10/09 PHP
mysql数据库差异比较的PHP代码
2012/02/05 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
python处理大数字的方法
2015/05/27 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
浅谈django中的认证与登录
2016/10/31 Python
Python正则表达式和元字符详解
2018/11/29 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
基于FME使用Python过程图解
2020/05/13 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
python遍历路径破解表单的示例
2020/11/21 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
大学生求职自荐信
2013/12/12 职场文书
大学生交通专业求职信
2014/09/01 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
大足石刻导游词
2015/02/02 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
vue3中的组件间通信
2021/03/31 Vue.js