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