赞
踩
QComboBox使用鼠标进行滚动时,如果滚动到第一项或最末项会停止滚动。并且获取到的索引是变化后的,如向上滚动时第二项变至第一项,获得的索引为0,与在第一项向上滚动相同,可利用此特性判断是否需要循环滚动。
也因此不能直接在槽函数中获取当前索引来判断。,需重写鼠标滚动事件,提前获取未滚动前的索引。并在索引为0时设为最末,索引为最末时设为0。
- class ComboBox(QComboBox):
- wheeled = pyqtSignal()
-
- def __init__(self, parent=None):
- super(ComboBox, self).__init__(parent)
-
- def wheelEvent(self, event):
- idx = self.currentIndex() # 滚动前
- super().wheelEvent(event)
- idx1 = self.currentIndex() # 滚动后
- if event.isAccepted():
- if idx == idx1 == 0:
- self.setCurrentIndex(self.count() - 1)
- self.wheeled.emit()
- elif idx == idx1 == self.count() - 1:
- self.setCurrentIndex(0)
- self.wheeled.emit()
-
- '''
- # 信号与槽(打印索引示例):
- cbl = ComboBox()
- cbl.addItems([1, 2, 3, 4, 5])
- cbl.activated.connect(lambda : print(cbl.currentIndex()))
- cbl.wheeled.connect(lambda : print(cbl.currentIndex()))
- '''
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。