我需要确定用户何时从旋转框更改值,但仅当使用箭头(根据步骤向上或向下)进行更改时,才需要确定。
我使用了valueChanged信号,但是当用户手动更改值(编辑数字)时,也会发出此信号,我想避免这种情况。
我正在使用PyQt5
答案 0 :(得分:0)
在这种情况下,您可以通过覆盖mousePressEvent
方法来跟踪更改:
from PyQt5 import QtCore, QtWidgets
class SpinBox(QtWidgets.QSpinBox):
upClicked = QtCore.pyqtSignal()
downClicked = QtCore.pyqtSignal()
def mousePressEvent(self, event):
last_value = self.value()
super(SpinBox, self).mousePressEvent(event)
if self.value() < last_value:
self.downClicked.emit()
elif self.value() > last_value:
self.upClicked.emit()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
s = SpinBox()
l = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter)
w = QtWidgets.QWidget()
s.upClicked.connect(lambda: l.setText("Up"))
s.downClicked.connect(lambda: l.setText("Down"))
lay = QtWidgets.QVBoxLayout(w)
lay.addWidget(s)
lay.addWidget(l)
w.resize(320, w.sizeHint().height())
w.show()
sys.exit(app.exec_())