Pyqt5自定义下拉框点击事件
实现功能
在信息管理模块中,我需要增加删除用户的功能,每次点击下拉框时可以实时扫描当前用户信息(每个用户是单独放在文件夹内,相当于扫描一个大文件夹下的文件夹名),然后选择对应的id进行删除。
comboBox
初步想法是为cBox添加点击事件,每次点击都调用一个函数去扫描指定文件夹下的文件名。
QComboBox类中的常用方法如表
方法 | 描述 |
---|---|
addItem() | 添加一个下拉选项 |
addItems() | 从列表中添加下拉选项 |
Clear() | 删除下拉选项集合中的所有选项 |
count() | 返回下拉选项集合中的数目 |
currentText() | 返回选中选项的文本 |
itemText(i) | 获取索引为i的item的选项文本 |
currentIndex() | 返回选中项的索引 |
setItemText(int index,text) | 改变序列号为index的文本 |
QComboBox类中的常用信号
信号 | 含义 |
---|---|
Activated | 当用户选中一个下拉选项时发射该信号 |
currentIndexChanged | 当下拉选项的索引发生改变时发射该信号 |
highlighted | 当选中一个已经选中的下拉选项时,发射该信号 |
虽然cbox没有像button那样直接有一个点击事件的函数,但是我们可以想到通过自定义槽函数来实现类似点击的触发效果。
具体操作如下:
原有的combobox类不含有点击事件,因此我们需要重写一个mycombobox(添加clicked事件)
class MyComboBox(QComboBox): # 继承原有类 clicked = pyqtSignal() #创建一个信号 def showPopup(self): #重写showPopup函数 self.clicked.emit() #发送信号 super(MyComboBox, self).showPopup()# 调用父类的showPopup()
使用该类创建一个cbox
self.cbox = MyComboBox(self.layoutWidget)
绑定clicked事件
self.cbox.clicked.connect(self.scan_DirList)
添加点击事件
scan_Dirlist
def scan_DirList(self): # 获取用户名 dirs = os.listdir(self.saveDir) AllItems = [self.cbox.itemText(i) for i in range(self.cbox.count())] if dirs ==[] : QMessageBox.warning(self," ","当前没有用户数据") self.cbox.clear() else : # 注意cbox选项不能有重复的因此需要判断 for i in dirs : if i not in AllItems: self.cbox.addItem(i)