gpt4 book ai didi

python - 如何防止 QDoubleSpinBox 更改值

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:01 25 4
gpt4 key购买 nike

我已经为执行一些几何计算的脚本编写了一个 GUI。某些值范围会破坏计算(例如,找到不相交的两个形状的交集。)在这些情况下我会引发异常。我想阻止用户将旋转框值调整到超出引发异常的点。

我尝试覆盖 QDoubleSpinBox 的验证器方法。当我用键盘手动输入值时,这非常有用。但是,它并不妨碍我单击向上和向下箭头。

如何限制用户将值提高到可接受范围之外的能力?

注意:实际的 some_complicated_function 涉及来自 5 个不同旋转框的值。

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

编辑:基本问题是:我想在旋转框的值发生变化(通过鼠标或键盘)时调用函数。如果该函数引发异常,我希望旋转框的值恢复到原来的值。

最佳答案

这是动态设置旋转框范围的简单方法:

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)

编辑:

刚刚意识到,如果直接输入值,上面的方法将无法正常工作,因为它可能会过早地修复最小值/最大值。所以也许这会更好:

    def handleValueChanged(self, value):
try:
some_complicated_function(float(value))
print "yup", value
self._last = value
except:
print "nope", value
self.setValue(self._last)

关于python - 如何防止 QDoubleSpinBox 更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com