QComboBox实现鼠标循环滚动

3 篇文章 0 订阅

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()))
'''

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值