pyside/pyqt5下拉复选框
我们实际项目中经常会遇到需要下拉多选的情况,以下记录pyside2生成下拉复选框,支持多选,全选等用来支撑日常项目需求
一、构建ui文件
用qt designer画出界面,保存文件ComboCheckBox.ui,界面如下:
二、python代码如下
from PySide2.QtWidgets import QApplication, QCheckBox, QLineEdit, QListWidget,\
QListWidgetItem,QMessageBox
from PySide2.QtUiTools import QUiLoader
import sys
class comboCheckbox():
def __init__(self):
self.ui = QUiLoader().load('ui/ComboCheckBox.ui')
self.combo_checkbox()
self.ui.button_001.clicked.connect(self.print_combocheck)
def print_combocheck(self):
QMessageBox.about(self.ui,'提示',self.ui.combocheckbox.currentText())
def combo_checkbox(self):
self.items = ["全选","Python","C++","Java","JavaScript"]
self.box_list = []
self.text = QLineEdit()
global state
self.state = 0
q = QListWidget()
for i in range(len(self.items)):
self.box_list.append(QCheckBox())
self.box_list[i].setText(self.items[i])
item = QListWidgetItem(q)
q.setItemWidget(item, self.box_list[i])
if i == 0:
self.box_list[i].stateChanged.connect(self.all_selected)
else:
self.box_list[i].stateChanged.connect(self.show_selected)
self.text.setReadOnly(True)
self.ui.combocheckbox.setLineEdit(self.text)
self.ui.combocheckbox.setModel(q.model())
self.ui.combocheckbox.setView(q)
def all_selected(self):
if self.state == 0:
self.state = 1
for i in range(1, len(self.items)):
self.box_list[i].setChecked(True)
else:
self.state = 0
for i in range(1, len(self.items)):
self.box_list[i].setChecked(False)
self.show_selected()
def get_selected(self) -> list:
result = []
for i in range(1, len(self.items)):
if self.box_list[i].isChecked():
result.append(self.box_list[i].text())
return result
def show_selected(self):
self.text.clear()
result = '; '.join(self.get_selected())
self.text.setText(result)
if __name__ == '__main__':
app = QApplication(sys.argv)
stats = comboCheckbox()
stats.ui.show()
app.exec_()