使 QSpinBox.valueChanged() 只响应鼠标滚轮
Make QSpinBox.valueChanged() only respond to Mouse Wheel
我将 QSpinBox 的 Signal valueChanged
连接到 QWidget 的函数,例如:
class MyWidget(QtGui.QWidget):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
#just an example
mySpinBox = QtGui.QSpinBox()
mySpinBox.valueChanged.connect(self.foo)
def foo(self):
if value was changed by Mouse Wheel:
#do this
else:
#do nothing
派生 QSpinBox 并覆盖 wheelevent
http://pyqt.sourceforge.net/Docs/PyQt4/qwidget.html#wheelEvent
您可以定义自己的信号,wheelevent 将发出该信号以获得您想要的行为。
有关示例/教程,请参阅:
http://pythoncentral.io/pysidepyqt-tutorial-creating-your-own-signals-and-slots/
基于 Gombat's answer and this 问题(因为在提供的教程中如何解释它会引发错误)我在小部件中做了这个
class MyWidget(QtGui.QWidget):
mySignal1 = QtCore.pyqtSignal() #these have to be here or...
mySignal2 = QtCore.pyqtSignal() #...there will be an attribute error
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
#just an example
self.mySpinBox1 = QtGui.QSpinBox()
self.mySpinBox2 = QtGui.QSpinBox()
self.mySpinBox1.installEventFilter(self)
self.mySpinBox2.installEventFilter(self)
self.mySignal1.connect(self.foo)
self.mySignal2.connect(self.bar)
def eventFilter(self, source, event):
if source is self.spinBox1:
if event.type() == QtCore.QEvent.Wheel:
self.spinBox1.wheelEvent(event)
self.mySignal1.emit()
return True
else:
return False
elif source is self.spinBox2:
if event.type() == QtCore.QEvent.Wheel:
self.spinBox2.wheelEvent(event)
self.mySignal2.emit()
return True
else:
return False
else:
return QtGui.QWidget.eventFilter(self, source, event)
def foo(self):
#right here, when a mouse wheel event occured in spinbox1
def bar(self):
#right here, when a mouse wheel event occured in spinbox2
希望这对您有所帮助。谢谢(未经测试,因为只是示例,可能会有错误)
我将 QSpinBox 的 Signal valueChanged
连接到 QWidget 的函数,例如:
class MyWidget(QtGui.QWidget):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
#just an example
mySpinBox = QtGui.QSpinBox()
mySpinBox.valueChanged.connect(self.foo)
def foo(self):
if value was changed by Mouse Wheel:
#do this
else:
#do nothing
派生 QSpinBox 并覆盖 wheelevent
http://pyqt.sourceforge.net/Docs/PyQt4/qwidget.html#wheelEvent
您可以定义自己的信号,wheelevent 将发出该信号以获得您想要的行为。
有关示例/教程,请参阅: http://pythoncentral.io/pysidepyqt-tutorial-creating-your-own-signals-and-slots/
基于 Gombat's answer and this 问题(因为在提供的教程中如何解释它会引发错误)我在小部件中做了这个
class MyWidget(QtGui.QWidget):
mySignal1 = QtCore.pyqtSignal() #these have to be here or...
mySignal2 = QtCore.pyqtSignal() #...there will be an attribute error
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
#just an example
self.mySpinBox1 = QtGui.QSpinBox()
self.mySpinBox2 = QtGui.QSpinBox()
self.mySpinBox1.installEventFilter(self)
self.mySpinBox2.installEventFilter(self)
self.mySignal1.connect(self.foo)
self.mySignal2.connect(self.bar)
def eventFilter(self, source, event):
if source is self.spinBox1:
if event.type() == QtCore.QEvent.Wheel:
self.spinBox1.wheelEvent(event)
self.mySignal1.emit()
return True
else:
return False
elif source is self.spinBox2:
if event.type() == QtCore.QEvent.Wheel:
self.spinBox2.wheelEvent(event)
self.mySignal2.emit()
return True
else:
return False
else:
return QtGui.QWidget.eventFilter(self, source, event)
def foo(self):
#right here, when a mouse wheel event occured in spinbox1
def bar(self):
#right here, when a mouse wheel event occured in spinbox2
希望这对您有所帮助。谢谢(未经测试,因为只是示例,可能会有错误)