如何将QSpinBox约束为有效值

时间:2017-01-25 06:00:25

标签: python pyqt pyqt4

假设我希望QSpinBox具有从0到10的有效值,步长为2(即0,2,4,6,8,10)。 我可以将QSpinBox设置为最小值为0,最大值为10,singleStep为2.如果用户单击向上/向下箭头,则效果很好。但是,如果用户键入奇数(例如3),则旋转框仍然认为它是有效的并接受它。 我应该这样做,我的QSpinBox在这种情况下不会允许奇数吗?

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可以实现valueChanged信号,验证值是否正确,如果它不是modicas,相反,如果不是,则放置前一个值。

示例:

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