【发布时间】:2019-05-15 03:18:57
【问题描述】:
我需要识别用户何时更改旋转框中的值,但前提是更改是使用箭头(根据步骤向上或向下)进行的。
我使用了 valueChanged 信号,但是当用户手动更改值(编辑数字)时也会发出这个信号,我想避免这种行为。
我正在使用 PyQt5
【问题讨论】:
标签: python pyqt pyqt5 qspinbox
我需要识别用户何时更改旋转框中的值,但前提是更改是使用箭头(根据步骤向上或向下)进行的。
我使用了 valueChanged 信号,但是当用户手动更改值(编辑数字)时也会发出这个信号,我想避免这种行为。
我正在使用 PyQt5
【问题讨论】:
标签: python pyqt pyqt5 qspinbox
在这种情况下,您可以通过覆盖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_())
【讨论】: