【Pyton-GUI】pysidepyqt5下拉复选框

【Pyton-GUI】pysidepyqt5下拉复选框,第1张

【Pyton-GUI】pyside/pyqt5下拉复选框 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_()

三、最终效果

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5572164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存