具有64位整数的PyQt4 spinbox

具有64位整数的PyQt4 spinbox,qt4,pyqt4,biginteger,Qt4,Pyqt4,Biginteger,是否可以修改PyQt spinbox以处理大于32位的整数(-2147483648-2147483647)?我知道在C++中用64位int数据类型编写一个新的旋转框是可能的,但是这会使问题复杂化。< P>可以使用大于32位的值获得一个旋转框。 顾名思义,这将为您提供最大值为2**53(9007199254740992)的双精度(即浮点)值。如果需要整数值,只需使用将精度设置为零。(注意:由于某些原因,Qt Designer不允许您为任何一个内置旋转框设置大于9999999的最大值,因此您必须“手

是否可以修改PyQt spinbox以处理大于32位的整数(-2147483648-2147483647)?我知道在C++中用64位int数据类型编写一个新的旋转框是可能的,但是这会使问题复杂化。

< P>可以使用大于32位的值获得一个旋转框。 顾名思义,这将为您提供最大值为2**53(9007199254740992)的双精度(即浮点)值。如果需要整数值,只需使用将精度设置为零。(注意:由于某些原因,Qt Designer不允许您为任何一个内置旋转框设置大于9999999的最大值,因此您必须“手动”进行设置)


如果您想要大于2**53的值,请重新实现相关方法(,并且可能),然后提供您认为必要的任何其他方法(例如,
value/setValue
)。

您可以通过使用获得值大于32位的旋转框

顾名思义,这将为您提供最大值为2**53(9007199254740992)的双精度(即浮点)值。如果需要整数值,只需使用将精度设置为零。(注意:由于某些原因,Qt Designer不允许您为任何一个内置旋转框设置大于9999999的最大值,因此您必须“手动”进行设置)


如果您想要大于2**53的值,请重新实现相关方法(,并且可能),然后提供您认为必要的任何其他方法(例如
value/setValue
)。

非常感谢您的提示。我尝试了QDoubleSpinBox,但没有尝试手动设置值。因为它不符合我的目的,我已经写了我自己的spinbox。下面是代码。也许这对其他人有帮助。关于QAbstractSpinBox子类化的文档有点少。 默认最大值与numpy.uint64的最大值一致。理论上应该没有限制,因为QLineEdit用于表示。如果需要长度超过20个符号的数字,只需调整验证器正则表达式即可

class BigIntSpinbox(QtGui.QAbstractSpinBox):

    def __init__(self, parent=None):
        super(BigIntSpinbox, self).__init__(parent)

        self._singleStep = 1
        self._minimum = -18446744073709551616
        self._maximum = 18446744073709551615

        self.lineEdit = QtGui.QLineEdit(self)

        rx = QtCore.QRegExp("[1-9]\\d{0,20}")
        validator = QtGui.QRegExpValidator(rx, self)

        self.lineEdit.setValidator(validator)
        self.setLineEdit(self.lineEdit)

    def value(self):
        try:
            return int(self.lineEdit.text())
        except:
            raise
            return 0

    def setValue(self, value):
        if self._valueInRange(value):
            self.lineEdit.setText(str(value))

    def stepBy(self, steps):
        self.setValue(self.value() + steps*self.singleStep())

    def stepEnabled(self):
        return self.StepUpEnabled | self.StepDownEnabled

    def setSingleStep(self, singleStep):
        assert isinstance(singleStep, int)
        # don't use negative values
        self._singleStep = abs(singleStep)

    def singleStep(self):
        return self._singleStep

    def minimum(self):
        return self._minimum

    def setMinimum(self, minimum):
        assert isinstance(minimum, int) or isinstance(minimum, long)
        self._minimum = minimum

    def maximum(self):
        return self._maximum

    def setMaximum(self, maximum):
        assert isinstance(maximum, int) or isinstance(maximum, long)
        self._maximum = maximum

    def _valueInRange(self, value):
        if value >= self.minimum() and value <= self.maximum():
            return True
        else:
            return False
类BigIntSpinbox(QtGui.QAbstractSpinBox):
def uuu init uuu(self,parent=None):
超级(BigIntSpinbox,self)。\uuuu init\uuuu(父级)
self.\u singleStep=1
自最小值=-18446744073709551616
自身最大值=18446744073709551615
self.lineEdit=QtGui.QLineEdit(self)
rx=QtCore.QRegExp(“[1-9]\\d{0,20}”)
validator=QtGui.QRegExpValidator(rx,self)
self.lineEdit.setValidator(验证器)
self.setLineEdit(self.lineEdit)
def值(自身):
尝试:
返回int(self.lineEdit.text())
除:
提升
返回0
def设置值(自身,值):
如果自身值在范围内(值):
self.lineEdit.setText(str(值))
def步进(自身,步进):
self.setValue(self.value()+步骤*self.singleStep())
def步骤已启用(自):
返回self.steppupenabled | self.steppdownabled
def设置单步(自身,单步):
断言isinstance(单步,int)
#不要使用负值
self.\u singleStep=abs(singleStep)
def单步(自):
返回自我。\u单步
def最小值(自身):
返回自我。\u最小值
def设置最小值(自身,最小值):
断言isinstance(最小值,int)或isinstance(最小值,长)
自最小值=最小值
def最大值(自身):
返回自我。\u最大值
def设置最大值(自身、最大值):
断言isinstance(最大值,int)或isinstance(最大值,长)
自身最大值=最大值
def_值范围(自身,值):

如果value>=self.minimum()和value非常感谢您的提示。我尝试了QDoubleSpinBox,但没有尝试手动设置值。因为它不符合我的目的,我已经写了我自己的spinbox。下面是代码。也许这对其他人有帮助。关于QAbstractSpinBox子类化的文档有点少。 默认最大值与numpy.uint64的最大值一致。理论上应该没有限制,因为QLineEdit用于表示。如果需要长度超过20个符号的数字,只需调整验证器正则表达式即可

class BigIntSpinbox(QtGui.QAbstractSpinBox):

    def __init__(self, parent=None):
        super(BigIntSpinbox, self).__init__(parent)

        self._singleStep = 1
        self._minimum = -18446744073709551616
        self._maximum = 18446744073709551615

        self.lineEdit = QtGui.QLineEdit(self)

        rx = QtCore.QRegExp("[1-9]\\d{0,20}")
        validator = QtGui.QRegExpValidator(rx, self)

        self.lineEdit.setValidator(validator)
        self.setLineEdit(self.lineEdit)

    def value(self):
        try:
            return int(self.lineEdit.text())
        except:
            raise
            return 0

    def setValue(self, value):
        if self._valueInRange(value):
            self.lineEdit.setText(str(value))

    def stepBy(self, steps):
        self.setValue(self.value() + steps*self.singleStep())

    def stepEnabled(self):
        return self.StepUpEnabled | self.StepDownEnabled

    def setSingleStep(self, singleStep):
        assert isinstance(singleStep, int)
        # don't use negative values
        self._singleStep = abs(singleStep)

    def singleStep(self):
        return self._singleStep

    def minimum(self):
        return self._minimum

    def setMinimum(self, minimum):
        assert isinstance(minimum, int) or isinstance(minimum, long)
        self._minimum = minimum

    def maximum(self):
        return self._maximum

    def setMaximum(self, maximum):
        assert isinstance(maximum, int) or isinstance(maximum, long)
        self._maximum = maximum

    def _valueInRange(self, value):
        if value >= self.minimum() and value <= self.maximum():
            return True
        else:
            return False
类BigIntSpinbox(QtGui.QAbstractSpinBox):
def uuu init uuu(self,parent=None):
超级(BigIntSpinbox,self)。\uuuu init\uuuu(父级)
self.\u singleStep=1
自最小值=-18446744073709551616
自身最大值=18446744073709551615
self.lineEdit=QtGui.QLineEdit(self)
rx=QtCore.QRegExp(“[1-9]\\d{0,20}”)
validator=QtGui.QRegExpValidator(rx,self)
self.lineEdit.setValidator(验证器)
self.setLineEdit(self.lineEdit)
def值(自身):
尝试:
返回int(self.lineEdit.text())
除:
提升
返回0
def设置值(自身,值):
如果自身值在范围内(值):
self.lineEdit.setText(str(值))
def步进(自身,步进):
self.setValue(self.value()+步骤*self.singleStep())
def步骤已启用(自):
返回self.steppupenabled | self.steppdownabled
def设置单步(自身,单步):
断言isinstance(单步,int)
#不要使用负值
self.\u singleStep=abs(singleStep)
def单步(自):
返回自我。\u单步
def最小值(自身):
返回自我。\u最小值
def设置最小值(自身,最小值):
断言isinstance(最小值,int)或isinstance(最小值,长)
自最小值=最小值
def最大值(自身):
返回自我。\u最大值
def设置最大值(自身、最大值):
断言isinstance(最大值,int)或isinstance(最大值,长)
自身最大值=最大值
def_值范围(自身,值):
如果值>=self.minimum()和