您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:使用pyqt5 实现ComboBox的鼠标点击触发事件

51自学网 2021-10-30 22:48:59
  python
这篇教程使用pyqt5 实现ComboBox的鼠标点击触发事件写得很实用,希望能帮到您。

一、自定义MyComboBox

# MyComboBox.pyfrom PyQt5.QtWidgets import QComboBoxfrom 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, QtWidgetsimport 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的,要么写得太复杂,要么没讲解的,大多是靠自己摸索出来的。

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


PyQt5 QListView 高亮显示某一条目的案例
python 编码中为什么要写类型注解?
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。