首页 > 其他分享 >pyqt5 下拉复选框的实现

pyqt5 下拉复选框的实现

时间:2023-02-16 14:23:52浏览次数:49  
标签:__ Form 实现 items self selected list pyqt5 复选框

PyQt5 创建下拉复选框

总体目录结构

要先自定义下拉复选框类

参考:自定义实现 PyQt5 下拉复选框 ComboCheckBox

# 下拉复选框测试/combocheckbox.py
from PyQt5.QtWidgets import QComboBox, QLineEdit, QListWidget, QCheckBox, QListWidgetItem


class ComboCheckBox(QComboBox):
    def __init__(self,parent):
        """
        initial function
        """
        super(ComboCheckBox, self).__init__(parent)

        self.box_list = []  # selected items
        self.text = QLineEdit()  # use to selected items
        self.state = 0  # use to record state
        # self.setStyleSheet("width: 300px; height: 50px; font-size: 21px; font-weight: bold")
        self.text.setReadOnly(True)
        self.setLineEdit(self.text)


    def myadditems(self,items ):
        """

        :param items: 传入下拉选项
        :return:
        """
        self.items = ["全选"] + items  # items list
        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)

        # q.setStyleSheet("font-size: 20px; font-weight: bold; height: 40px; margin-left: 5px")
        self.setModel(q.model())
        self.setView(q)

    def all_selected(self):
        """
        decide whether to check all
        :return:
        """
        # change state
        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:
        """
        get selected items
        :return:
        """
        ret = []
        for i in range(1, len(self.items)):
            if self.box_list[i].isChecked():
                ret.append(self.box_list[i].text())
        return ret

    def show_selected(self):
        """
        show selected items
        :return:
        """
        self.text.clear()
        ret = '; '.join(self.get_selected())
        self.text.setText(ret)

然后进行UI设计

# 下拉复选框测试/下拉复选框test.py
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.comboBox = ComboCheckBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(70, 60, 281, 21))
        self.comboBox.setObjectName("comboBox")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
from combocheckbox import ComboCheckBox

最后程序内容

import sys
from PyQt5.QtWidgets import QWidget, QApplication
from 下拉复选框test import Ui_Form


class QmyWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类构造函数,创建QWidget窗体
        self.__ui = Ui_Form()
        self.__ui.setupUi(self)  # self 是Widget窗体,可以作为参数传递给setupUi
        self.__ui.comboBox.myadditems(['a','b','c','d','e'])

if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWidget = QmyWidget()
    myWidget.show()
    sys.exit(app.exec_())

运行效果

标签:__,Form,实现,items,self,selected,list,pyqt5,复选框
From: https://www.cnblogs.com/meizhengchao/p/17126514.html

相关文章

  • 使用docker部署Python-Flask实现ChatGPT的使用
    首先说下背景:自从申请ChatGPT到现在也有个把月了,余额一直还很多,想想三月下旬就过期了,还是计划把里面的18美刀用掉,于是结合着之前做的Django简单cv一个"简易网站"。简......
  • 一个服务器对多个客户端的本地socket通信C语言实现
    对于同一台主机间的多个进程间通信,除了使用共享内存,消息队列等方式,使用本地socket也是很高效的一种选择。不同于网络socket,本地socket不需要指定ip地址,也不需要进行网......
  • 从实现到原理,聊聊Java中的SPI动态扩展
    原创:微信公众号码农参上,欢迎分享,转载请保留出处。八股文背多了,相信大家都听说过一个词,SPI扩展。有的面试官就很喜欢问这个问题,SpringBoot的自动装配是如何实现的?基本......
  • Python实现随机森林RF并对比自变量的重要性
      本文介绍在Python环境中,实现随机森林(RandomForest,RF)回归与各自变量重要性分析与排序的过程。  其中,关于基于MATLAB实现同样过程的代码与实战,大家可以点击查看MATLA......
  • .Net6 + GraphQL + MongoDb 实现Subscription监听功能
    介绍查询、添加、修改我们已经演示了,我们来看下订阅。订阅大家可以理解为音乐软件,我们用户=>订阅音乐频道<=服务发送新的音乐通知到频道。有新的通知进入频道后,频......
  • 一封传话一对多推送实现步骤
    前言前面介绍了一封传话聚合推送API的在线测试推送的步骤,可以实现一对一发送消息。但是我们希望实现:1.群组订阅功能:例如我和我的好友一起加入通道后,只推送一次我们两个......
  • apriori算法 python实现
    fromtypingimport*fromtypingimportList,TuplefromitertoolsimportcombinationsdefloadDataSet():return[{1,2,4,5},{2,3,5},{1,2,3,5},......
  • 一封传话一行代码实现微信消息推送
    一行代码实现微信消息推送介绍通过调用一个简单的接口,将要推送的消息提交后,您将在微信收到推送的消息,简单快捷可以应用的场景设备上下线,量化交易,网站公告,服务器异常信息......
  • 2023云原生开发者真实现状:K8s居容器榜首,Docker冲顶技术热词,微服务热度不减
    在数字化转型浪潮下,企业上云已成为企业和政府的普遍共识,云原生开发者迎来了最好的时代。从云原生概念提出后的爆炸式增长,到近年来进入稳定期,开发者也逐渐在各个技术领域中......
  • 一口气说出 6 种实现延时消息的方案,还有谁不会?!
    原文:juejin.cn/post/6844904150703013901延时消息(定时消息)指的在分布式异步消息场景下,生产端发送一条消息,希望在指定延时或者指定时间点被消费端消费到,而不是立刻被消费。......