/
ComboCheckBox.py
122 lines (106 loc) · 4.17 KB
/
ComboCheckBox.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/4/19 0:02
# @Author : Aries
# @Site :
# @File : ComboCheckBox.py
# @Software: PyCharm
from PyQt4.QtGui import QComboBox,QListWidget,QCheckBox,QListWidgetItem,QLineEdit,QStandardItemModel
from PyQt4 import QtCore
class ComboCheckBox(QComboBox):
def __init__(self, itemdicts): # items==[str,str...]
super(ComboCheckBox, self).__init__()
self.itemdict = itemdicts
self.items = self.itemdict.keys()
self.items.insert(0, u'全部')
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)
self.show()
# self.qListWidget.setAlternatingRowColors(True)
# self.qLineEdit.setAlternatingRowColors(True)
# self.qLineEdit.setStyleSheet("background-color:transparen ")
# self.qListWidget.setStyleSheet("background-color:#ee3333 ")
def addQCheckBox(self, i):
self.qCheckBox.append(QCheckBox())
qItem = QListWidgetItem(self.qListWidget)
self.qCheckBox[i].setText(self.items[i])
if i >0 and self.itemdict[self.items[i]] == "1":
self.qCheckBox[i].setChecked(True)
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, state):
if state == 2:
for i in range(1, self.row_num):
self.qCheckBox[i].setChecked(True)
elif state == 1:
if self.Selectedrow_num == 0:
self.qCheckBox[0].setCheckState(2)
elif state == 0:
self.clear()
def clear(self):
for i in range(self.row_num):
self.qCheckBox[i].setChecked(False)
class CheckableComboBox(QComboBox):
def __init__(self, parent=None):
super(CheckableComboBox, self).__init__(parent)
self.view().pressed.connect(self.handleItemPressed)
self.setModel(QStandardItemModel(self))
def handleItemPressed(self, index):
item = self.model().itemFromIndex(index)
if item.checkState() == QtCore.Qt.Checked:
item.setCheckState(QtCore.Qt.Unchecked)
else:
item.setCheckState(QtCore.Qt.Checked)
def getCheckItem(self):
#getCheckItem可以获得选择的项目text
checkedItems = []
for index in range(self.count()):
item = self.model().item(index)
if item.checkState() == QtCore.Qt.Checked:
checkedItems.append(item.text())
return checkedItems
def checkedItems(self):
checkedItems = []
for index in range(self.count()):
item = self.model().item(index)
if item.checkState() == QtCore.Qt.Checked:
checkedItems.append(item)
return checkedItems
def initItem(self,itemList):
for index, element in enumerate(itemList):
self.addItem(element[0])
item = self.model().item(index, 0)
item.setCheckState(QtCore.Qt.Unchecked)