怎么在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实现多选功能

怎么在pyqt5中利用ComboBox实现一个鼠标点击触发事件

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

功能:

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实现一个鼠标点击触发事件问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-03-17 20:55:22
收藏
分享
海报
0 条评论
174
上一篇:怎么在windows中批量执行Mysql的sql语句 下一篇:怎么在java8项目中对List对象属性去重
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码