我们实际项目中经常会遇到需要下拉多选的情况,以下记录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_()三、最终效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)