怎么自定义实现PyQt5下拉复选框ComboCheckBox

  介绍

小编给大家分享一下怎么自定义实现PyQt5下拉复选框ComboCheckBox,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

自定义实现PyQt5下拉复选框ComboCheckBox

<强>一、前言

由于最近的项目需要具有复选功能,但过多的复选框会影响界面布局和美观,因而想到把PyQt5的下拉列表和复选框结合起来,但在PyQt5中并没有这样的组件供我们使用,所以想要自己实现一个下拉复选框,主要就是继承QComboBox类,然后将复选框QCheckBox加入其中,并实现相应的功能。

最终实现的下拉复选框效果如下:

怎么自定义实现PyQt5下拉复选框ComboCheckBox

<强>二、代码实现

1。主要方法

在PyQt5中,有几个主要的方法需要了解一下,方法名称和对应的含义如下:

QtWidgets.QComboBox。setView (itemView):设置组合框弹出窗口中使用的视图,组合框获取视图的所有权。
QtWidgets.QcomboBox。setLineEdit (QLineEdit):设置组合框使用的行,而不是当前行编辑窗口小部件。
QtWidgets.QListWidget。setItemWidget(项目,小部件):设置要在给定的项目中的部件组件。

2。具体代码

实现下拉复选框的思路为用setView()方法将QComboBox下拉列表的视图改为QListWidget组件,然后将QCheckBox复选框用在QListWiget中,具体代码如下:

class  ComboCheckBox (QComboBox):   def 才能;__init__(自我,,项目:,列表):   ,,,,,,   ,,,initial 函数   ,,,:param 项目:,,items  of 从而列表   ,,,,,,   ,,,超级(ComboCheckBox,,自我). __init__ ()   ,,,self.items =, items  #, items 列表   ,,,self.box_list =, [], #, selected 项目   ,,,self.text =, QLineEdit (), #, use 用selected 项目   ,,,self.text.setReadOnly(真正的)   ,,,q =, QListWidget ()   ,,,for 小姐:拷贝范围(len (self.items)):   ,,,,,self.box_list.append (QCheckBox ())   ,,,,,self.box_list[我]. settext (self.items[我])   ,,,,,item =, QListWidgetItem (q)   ,,,,,q.setItemWidget(项目,,self.box_list[我])   ,,,,,self.box_list[我].stateChanged.connect (self.show_selected)   ,,,self.setLineEdit (self.text)   ,,,self.setModel (q.model ())   ,,,self.setView (q)   def 才能get_selected(自我),→,列表:   ,,,,,,   ,,,get  selected 项目   ,,,:返回:   ,,,,,,   ,,,ret =, []   ,,,for 小姐:拷贝范围(len (self.items)):   ,,,,,if  self.box_list[我].isChecked ():   ,,,,,,,ret.append (self.box_list[我]。text ())   ,,,return 受潮湿腐烂   def 才能show_selected(自我):   ,,,,,,   ,,,show  selected 项目   ,,,:返回:   ,,,,,,   ,,,self.text.clear ()   ,,,ret =, & # 39;;, & # 39; . join (self.get_selected ())   ,,,self.text.setText (ret)

其中<代码> show_selected() 用于显示被选中的内容,<代码> get_selected() 则用于获取所有被选中的内容并返回。

<强> 3。增加全选

要增加全选功能,首先是要在最前面加一个全选的选择框,然后为这个全选的选择框绑定相应的方法,用于实现全选功能和取消全选功能,具体代码如下:

def  all_selected(自我):   “才能”;“   decide 才能;whether 用check 所有   ,,:返回:   “才能”;“   #,才能change 状态   if 才能;self.state ==, 0:   ,,,self.state =1   ,,,for 小姐:拷贝范围(1,len (self.items)):   ,,,,,self.box_list[我].setChecked(真正的)   其他的才能:   ,,,self.state =0   ,,,for 小姐:拷贝范围(1,len (self.items)):   ,,,,,self.box_list[我].setChecked(假)   self.show_selected才能()

4。修改样式

由于默认的样式并不美观,所以我们可以对控件的样式进行自定义,例如字体大小,字体粗细等等,例如:

q.setStyleSheet(“字体大小:20 px;粗细:大胆的;高度:40像素;margin-left: 5 px") self.setStyleSheet(“宽度:300 px;高度:50 px;字体大小:21 px;粗细:bold")

<强>三,完整程序

完善后的下拉复选框的运行程序代码如下:

得到PyQt5.QtWidgets  import  QComboBox,, QLineEdit,, QListWidgetItem,, QListWidget, QCheckBox,, \   ,,QApplication, QVBoxLayout, QWidget   import 系统   class  ComboCheckBox (QComboBox):   def 才能;__init__(自我,,项目:,列表):   ,,,,,,   ,,,initial 函数   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么自定义实现PyQt5下拉复选框ComboCheckBox