首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止QDoubleSpinBox更改值

如何防止QDoubleSpinBox更改值
EN

Stack Overflow用户
提问于 2016-03-02 23:48:29
回答 1查看 805关注 0票数 1

我为一个做几何计算的脚本写了一个GUI。某些范围的值破坏了计算(例如,找到两个不相交的形状的交集)。我在这些案件中提出了例外情况。我希望防止用户在引发异常的情况下调整spinbox值。

我已经尝试过覆盖QDoubleSpinBox的验证器方法。当我用键盘手动输入值时,这是很好的。但是,这并不能阻止我点击上下箭头。

如何限制用户运行超出可接受范围的值的能力?

注意:实际的some_complicated_function涉及来自5个不同的纺丝盒的值。

代码语言:javascript
复制
from PyQt4 import QtCore, QtGui
import sys

def some_complicated_function(val_a):
    if val_a + 3 < 10:
        return True
    else:
        raise Exception("Giant number!")

class SpinBoxSpecial(QtGui.QDoubleSpinBox):
    def validate(self, value, pos):
#         print float(value)
        try:
            some_complicated_function(float(value))
            print "yup"
            return QtGui.QValidator.Acceptable, QtGui.QValidator.Acceptable
        except:
            print "nope"
            return QtGui.QValidator.Invalid, QtGui.QValidator.Invalid

a = QtGui.QApplication(sys.argv)       
w = QtGui.QMainWindow()
w.resize(320, 100)
w.setWindowTitle("PyQT Python Widget!") 

spinbox = SpinBoxSpecial(w)
spinbox.move(20, 20)
spinbox.CorrectionMode = QtGui.QAbstractSpinBox.CorrectToPreviousValue

w.show() 

sys.exit(a.exec_())

编辑:基本问题是:我想在一个旋转框的值改变时(通过鼠标或键盘)调用一个函数。如果该函数抛出一个异常,我希望将该纺丝盒的值恢复为原来的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-03 02:32:58

下面是一种动态地在尖端盒上设置范围的简单方法:

代码语言:javascript
复制
class SpinBoxSpecial(QtGui.QDoubleSpinBox):
    def __init__(self, parent=None):
        super(SpinBoxSpecial, self).__init__(parent)
        self._last = self.value()
        self.valueChanged.connect(self.handleValueChanged)

    def handleValueChanged(self, value):
        try:
            some_complicated_function(float(value))
            print "yup", value
            self._last = value
        except:
            print "nope", value
            if value > self._last:
                self.setMaximum(self._last)
            else:
                self.setMinimum(self._last)

编辑

刚刚意识到,如果直接输入一个值,上面的内容将不能正常工作,因为它可能过早地修复min/max。所以也许这样会更好

代码语言:javascript
复制
    def handleValueChanged(self, value):
        try:
            some_complicated_function(float(value))
            print "yup", value
            self._last = value
        except:
            print "nope", value
            self.setValue(self._last)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35760540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档