Python 带浮点值的WxSlider?
我正在寻找将wxSlider与浮点值一起使用的可能性,但找不到任何有效的示例。提出了一个子类,但我不知道是否所有方法都必须重新定义Python 带浮点值的WxSlider?,python,wxpython,floating-point,slider,Python,Wxpython,Floating Point,Slider,我正在寻找将wxSlider与浮点值一起使用的可能性,但找不到任何有效的示例。提出了一个子类,但我不知道是否所有方法都必须重新定义 非常感谢可能的指示。它只修改返回值;所有其他方法应自动从wx.Slider派生。它应该按照给定的方式工作 为什么不试试看呢?看看这个类。我提出了以下解决方案,它在Linux中运行良好。 (不需要重写GetRange,因为它会自动与重写的GetMin/Max一起工作。) 我需要一个滑块,我可以初始化为最大值,如2.5,即浮点值和wx.Slider构造函数只取整数。事实
非常感谢可能的指示。它只修改返回值;所有其他方法应自动从wx.Slider派生。它应该按照给定的方式工作
为什么不试试看呢?看看这个类。我提出了以下解决方案,它在Linux中运行良好。 (不需要重写GetRange,因为它会自动与重写的GetMin/Max一起工作。)
我需要一个滑块,我可以初始化为最大值,如2.5,即浮点值和wx.Slider构造函数只取整数。事实上,我试过了,但没有成功。毕竟,我在这门课上做到了一切。谢谢!我在前面的代码中修改了SetRange以避免min>max,并实现了Get/SetRes。
""" floating point slider customized from wx.Slider """
import wx
class FloatSlider(wx.Slider):
def __init__(self, parent, id, value, minval, maxval, res,
size=wx.DefaultSize, style=wx.SL_HORIZONTAL,
name='floatslider'):
self._value = value
self._min = minval
self._max = maxval
self._res = res
ival, imin, imax = [round(v/res) for v in (value, minval, maxval)]
self._islider = super(FloatSlider, self)
self._islider.__init__(
parent, id, ival, imin, imax, size=size, style=style, name=name
)
self.Bind(wx.EVT_SCROLL, self._OnScroll)
def _OnScroll(self, event):
ival = self._islider.GetValue()
imin = self._islider.GetMin()
imax = self._islider.GetMax()
if ival == imin:
self._value = self._min
elif ival == imax:
self._value = self._max
else:
self._value = ival * self._res
event.Skip()
#print 'OnScroll: value=%f, ival=%d' % (self._value, ival)
def GetValue(self):
return self._value
def GetMin(self):
return self._min
def GetMax(self):
return self._max
def GetRes(self):
return self._res
def SetValue(self, value):
self._islider.SetValue(round(value/self._res))
self._value = value
def SetMin(self, minval):
self._islider.SetMin(round(minval/self._res))
self._min = minval
def SetMax(self, maxval):
self._islider.SetMax(round(maxval/self._res))
self._max = maxval
def SetRes(self, res):
self._islider.SetRange(round(self._min/res), round(self._max/res))
self._islider.SetValue(round(self._value/res))
self._res = res
def SetRange(self, minval, maxval):
self._islider.SetRange(round(minval/self._res), round(maxval/self._res))
self._min = minval
self._max = maxval
if __name__ == '__main__':
app = wx.PySimpleApp()
myframe = wx.Frame(None, size=(100, 30), pos=(200, 200),
style=wx.FIXED_MINSIZE|wx.CLOSE_BOX)
fslider = FloatSlider(myframe, -1, 0.2, 0.10004, 1.00008, 1e-4)
myframe.Show()
app.MainLoop()