怎么在pyqt5中利用ComboBox实现一个鼠标点击触发事件
怎么在pyqt5中利用ComboBox实现一个鼠标点击触发事件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
一、自定义MyComboBox
#MyComboBox.py fromPyQt5.QtWidgetsimportQComboBox fromPyQt5.QtCoreimportpyqtSignal classMyComboBox(QComboBox): clicked=pyqtSignal()#创建一个信号 defshowPopup(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)#信号与槽函数的绑定 #槽函数的实现 defscan_printer_list_slot(self): print("扫描打印机并刷新列表")
补充:PyQt5中QComboBox实现多选功能
网上大佬太多了,写的啥没看懂,自己摸索着也写了个出来,也勉强能用。
功能:
QComboBox实现多选功能
返回选中的文本列表
一键全选和取消全选功能
fromPyQt5importQtCore,QtGui,QtWidgets importsys classCheckableComboBox(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 defhandleItemPressed(self,index):#这个函数是每次选择项目时判断状态时自动调用的,不用管(自动调用) item=self.model().itemFromIndex(index) ifitem.checkState()==QtCore.Qt.Checked: item.setCheckState(QtCore.Qt.Unchecked) else: item.setCheckState(QtCore.Qt.Checked) defgetCheckItem(self): #getCheckItem方法可以获得选择的项目列表,自动调用。 forindexinrange(1,self.count()): item=self.model().item(index) ifitem.checkState()==QtCore.Qt.Checked: ifitem.text()notinself.checkedItems: self.checkedItems.append(item.text()) else: ifitem.text()inself.checkedItems: self.checkedItems.remove(item.text()) print("self.checkedItems为:",self.checkedItems) returnself.checkedItems#实例化的时候直接调用这个self.checkedItems就能获取到选中的值,不需要调用这个方法,方法会在选择选项的时候自动被调用。 defget_all(self):#实现全选功能的函数(自动调用) all_item=self.model().item(0) forindexinrange(1,self.count()):#判断是否是全选的状态,如果不是,全选按钮应该处于未选中的状态 ifself.status==1: ifself.model().item(index).checkState()==QtCore.Qt.Unchecked: all_item.setCheckState(QtCore.Qt.Unchecked) self.status=0 break ifall_item.checkState()==QtCore.Qt.Checked: ifself.status==0: forindexinrange(self.count()): self.model().item(index).setCheckState(QtCore.Qt.Checked) self.status=1 elifall_item.checkState()==QtCore.Qt.Unchecked: forindexinrange(self.count()): ifself.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("全选") foriinrange(6): ComboBox.addItem("ComboboxItem"+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)
关于怎么在pyqt5中利用ComboBox实现一个鼠标点击触发事件问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。
推荐阅读
-
Python+PyQt如何实现数据库表格动态增删改
-
PyQt5如何使用mimeData实现拖拽事件
-
Python PyQt5如何实现文件拷贝器
-
pyqt5与html数据交互的原理是什么
pyqt5与html数据交互的原理是什么本文小编为大家详细介绍“p...
-
怎么用Python+PyQT5实现手绘图片生成器
-
如何使用PyQT5制作一个敏感词检测工具
-
怎么用PyQT5制作一个桌面摸鱼工具
怎么用PyQT5制作一个桌面摸鱼工具这篇文章主要介绍“怎么用PyQ...
-
如何在pyqt5中展示pyecharts生成的图像
-
如何实现pyqt5圆形label显示打开的摄像头功能
-
pyqt5蒙版遮罩mask,setmask的使用