Qspinbox值更改信号仅适用于箭头更改

时间:2018-12-13 20:44:22

标签: python pyqt pyqt5 qspinbox

我需要确定用户何时从旋转框更改值,但仅当使用箭头(根据步骤向上或向下)进行更改时,才需要确定。

我使用了valueChanged信号,但是当用户手动更改值(编辑数字)时,也会发出此信号,我想避免这种情况。

我正在使用PyQt5

1 个答案:

答案 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_())