栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Pyton-GUI】pyside/pyqt5下拉复选框

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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_()

三、最终效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号