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