from PyQt5.QtWidgets import QComboBox, QLineEdit, QListWidget, QCheckBox, QListWidgetItem, QApplication
from PyQt5.QtCore import pyqtSignal
import sys
"""
1.将show函数改成show0
2.增加changeitemlist函数
3.增加信号signa
"""
class ComboCheckBox(QComboBox):
signa = pyqtSignal(list)
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.show0)
self.setModel(self.qListWidget.model())
self.setView(self.qListWidget)
self.setLineEdit(self.qLineEdit)
self.setMaxVisibleItems(100) # 避免滑条的出现引起滑条偷吃标签的问题
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 show0(self):
show0 = ''
Outputlist = self.Selectlist()
self.signa.emit(Outputlist)
self.qLineEdit.setReadOnly(False)
self.qLineEdit.clear()
for i in Outputlist:
show0 += 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(show0)
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)
def changeitemlist(self, itemlist):
self.items = itemlist
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.show0)
self.setModel(self.qListWidget.model())
self.setView(self.qListWidget)
self.setLineEdit(self.qLineEdit)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = ComboCheckBox(['装置ID', '传感器ID', "采样时间", '装置电源电压', "信号强度",'装置ID', '传感器ID', "采样时间", '装置电源电压', "信号强度"])
def solt11(x):
print(x)
mainWindow.signa.connect(solt11)
mainWindow.show()
sys.exit(app.exec_())
原始代码来源于:https://blog.youkuaiyun.com/LJX4ever/article/details/78039318