• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用pyqt5 实现ComboBox的鼠标点击触发事件

    一、自定义MyComboBox

    # MyComboBox.py
    from PyQt5.QtWidgets import QComboBox
    from PyQt5.QtCore import pyqtSignal       
    class MyComboBox(QComboBox):
      clicked = pyqtSignal()     #创建一个信号
      def showPopup(self):      #重写showPopup函数
        self.clicked.emit()     #发送信号
        super(MyComboBox, self).showPopup()   # 调用父类的showPopup()
    

    二、使用MyComboBox创建窗口空间

    # test_ui.py
        self.PrintersList = MyComboBox(self.groupBox) # 修改后
        # self.PrintersList = QtWidgets.QComboBox(self.groupBox) # 修改前

    三、main函数中对clicked 信号进行绑定

    # main_loop.py
      self.PrintersList.clicked.connect(self.scan_printer_list_slot)    # 信号与槽函数的绑定
     # 槽函数的实现
      def scan_printer_list_slot(self):
       print("扫描打印机并刷新列表")
    

    补充:PyQt5中QComboBox实现多选功能

    网上大佬太多了,写的啥没看懂,自己摸索着也写了个出来,也勉强能用。

    功能:

    QComboBox实现多选功能

    返回选中的文本列表

    一键全选和取消全选功能

    from PyQt5 import QtCore, QtGui, QtWidgets
    import sys
     
    class CheckableComboBox(QtWidgets.QComboBox):
      def __init__(self, parent=None):
        super(CheckableComboBox, self).__init__(parent)
        self.setModel(QtGui.QStandardItemModel(self))
        self.view().pressed.connect(self.handleItemPressed)
        self.checkedItems = []
        self.view().pressed.connect(self.get_all)
        self.view().pressed.connect(self.getCheckItem)
        self.status = 0
     
      def handleItemPressed(self, index):              #这个函数是每次选择项目时判断状态时自动调用的,不用管(自动调用)
        item = self.model().itemFromIndex(index)
        if item.checkState() == QtCore.Qt.Checked:
          item.setCheckState(QtCore.Qt.Unchecked)
        else:
          item.setCheckState(QtCore.Qt.Checked)
     
      def getCheckItem(self):
        # getCheckItem方法可以获得选择的项目列表,自动调用。
        for index in range(1,self.count()):
          item = self.model().item(index)
          if item.checkState() == QtCore.Qt.Checked:
            if item.text() not in self.checkedItems:
              self.checkedItems.append(item.text())
          else:
            if item.text() in self.checkedItems:
              self.checkedItems.remove(item.text())
        print("self.checkedItems为:",self.checkedItems)
        return self.checkedItems          #实例化的时候直接调用这个self.checkedItems就能获取到选中的值,不需要调用这个方法,方法会在选择选项的时候自动被调用。
     
      def get_all(self):              #实现全选功能的函数(自动调用)
        all_item = self.model().item(0)
     
        for index in range(1,self.count()):    #判断是否是全选的状态,如果不是,全选按钮应该处于未选中的状态
          if self.status ==1:
            if self.model().item(index).checkState() == QtCore.Qt.Unchecked:
              all_item.setCheckState(QtCore.Qt.Unchecked)
              self.status = 0
              break
     
        if all_item.checkState() == QtCore.Qt.Checked:
          if self.status == 0 :
            for index in range(self.count()):
              self.model().item(index).setCheckState(QtCore.Qt.Checked)
              self.status = 1
     
        elif all_item.checkState() == QtCore.Qt.Unchecked:
          for index in range(self.count()):
            if self.status == 1 :
              self.model().item(index).setCheckState(QtCore.Qt.Unchecked)
          self.status = 0
     
    if __name__ == "__main__":
      app = QtWidgets.QApplication(sys.argv)
      dialog = QtWidgets.QMainWindow()
      mainWidget = QtWidgets.QWidget()
      dialog.setCentralWidget(mainWidget)
      ComboBox = CheckableComboBox(mainWidget)
      ComboBox.addItem("全选")
      for i in range(6):
        ComboBox.addItem("Combobox Item " + str(i))
      dialog.show()
      sys.exit(app.exec_())

    总结(用法):

    直接实例化一个Qcombox

    使用ComboBox.addItem方法添加项目

    调用ComboBox.checkedItems的属性就能获取到选中的文本列表

    内置函数基本都是自动的,统统不用管

    调用checkedItems属性的时候最后写在ComboBox的槽函数里,这样才能获取到更改后的属性,不然可能得到的会是空值。

    补充:

    定义一个槽函数self.get_checkedItems_slot用于获取更改后的checkedItems属性,下面三种ComboBox的信号槽选一种来用就行,推荐第一种。

    ComboBox.activated.connect(self.get_checkedItems_slot) #推荐
    ComboBox.highlighted.connect(self.get_checkedItems_slot)
    ComboBox.currentIndexChanged.connect(self.get_checkedItems_slot)

    挺不容易的,网上资料有关Pyqt太少了,要么是Qt的,要么写得太复杂,要么没讲解的,大多是靠自己摸索出来的。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • PyQt5 QListView 高亮显示某一条目的案例
    • pyqt5 QListWidget的用法解析
    • Pyqt5 实现多线程文件搜索的案例
    • PyQt5按下按键选择文件夹并显示的实现
    • 关于PyQt5主窗口图标显示问题汇总
    • PyQt5设置登录界面及界面美化的实现
    上一篇:PyQt5 QListView 高亮显示某一条目的案例
    下一篇:python 编码中为什么要写类型注解?
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    使用pyqt5 实现ComboBox的鼠标点击触发事件 使用,pyqt5,实现,ComboBox,的,