이 문제를 해결하려면 valueChanged 신호를 구현하고 값이 올바른지 확인하십시오. 아무 것도하지 않으면 대조를 사용하고 그렇지 않으면 이전 값을 배치하십시오.
예 : 마법처럼
import sys
from PyQt4.QtCore import pyqtSignal
from PyQt4.QtGui import QApplication, QSpinBox
class SpinBox(QSpinBox):
# Replaces the valueChanged signal
newValueChanged = pyqtSignal(int)
def __init__(self, parent=None):
super(SpinBox, self).__init__(parent=parent)
self.valueChanged.connect(self.onValueChanged)
self.before_value = self.value()
self.newValueChanged.connect(self.slot)
def onValueChanged(self, i):
if not self.isValid(i):
self.setValue(self.before_value)
else:
self.newValueChanged.emit(i)
self.before_value = i
def isValid(self, value):
if (self.minimum() - value % self.singleStep()) == 0:
return True
return False
def slot(self, value):
print(value)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = SpinBox()
w.setMinimum(0)
w.setMaximum(10)
w.setSingleStep(2)
w.show()
sys.exit(app.exec_())
작품. 거의 수정하지 않고 이전 값을 유지하는 대신 가장 가까운 유효한 값으로 값을 설정할 수 있습니다. 감사. – Hongzheng
신중한 테스트를 거친 후 현재 구현에서 몇 가지 문제가 발견되었습니다. 유효하지 않은 값 3에 사용자 유형이 있다고 가정하십시오. 현재 구현에서는 SpinBox.valueChanged 신호가 유효하지 않은 값인 3으로 계속 방출됩니다.이 주소는 어떻게 지정합니까? – Hongzheng
@Hongzheng 물론 신호가 방출되지만 코드가 값을 수정합니다. – eyllanesc