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随机生成信用卡卡号的实现方法
May 14 Python
Python实现按中文排序的方法示例
Apr 25 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
在python中bool函数的取值方法
Nov 01 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
对Django url的几种使用方式详解
Aug 06 Python
python第三方库学习笔记
Feb 07 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
python基本算法之实现归并排序(Merge sort)
Sep 01 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
短波收音机简介
2021/03/01 无线电
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php PDO异常处理详解
2016/11/20 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
python实现bitmap数据结构详解
2014/02/17 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python创建模块及模块导入的方法
2015/05/27 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
十佳护士先进事迹
2014/05/08 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
模范教师事迹材料
2014/12/16 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
Java输出Hello World完美过程解析
2021/06/13 Java/Android
Axios取消重复请求的方法实例详解
2021/06/15 Javascript