- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
wx.SpinCtrl
仅限于整数旋转,而不是 float 。因此,我正在构建一个 wx.TextCtrl
+ wx.SpinButton
组合类,它使我能够旋转 float 。我能够以编程方式调整它们的大小和布局,以便组合看起来与普通的 wx.SpinCtrl
完全一样。
我从 wx.TextCtrl
继承这个组合,因为我希望它的父面板捕捉 wx.EVT_TEXT
事件。如果您能改进我的这个论点,我将不胜感激。
来自 wx.SpinButton
的 wx.EVT_SPIN_UP
和 wx.EVT_SPIN_DOWN
事件都是内部实现,父框架不关心关于这些事件。
现在,我碰壁了。我的组合类不适用于 sizer。在 .Add()
将组合类添加到 wx.GridBagSizer
之后,只有 wx.TextCtrl
在 wx 中布局.GridBagSizer
。 wx.SpinButton
由它自己保留。不过,wx.EVT_SPIN*
绑定(bind)工作得很好。
我的问题是布局。如果我想让 wx.GridBagSizer
把它当作一个小部件,我应该怎么写这个类?
这是我的组合类代码:
class SpinnerSuper(wx.TextCtrl):
def __init__(self, parent, max):
wx.TextCtrl.__init__(self, parent=parent, size=(48, -1))
spin = wx.SpinButton(parent=parent, style=wx.SP_VERTICAL, size=(-1, 21))
self.OnInit()
self.layout(spin)
self.internalBindings(spin)
self.SizerFlag = wx.ALIGN_CENTER
self.min = 0
self.max = max
def OnInit(self):
self.SetValue(u"0.000")
def layout(self, spin):
pos = self.GetPosition()
size = self.GetSize()
RightEdge = pos[0] + size[0]
TopEdge = pos[1] - (spin.GetSize()[1]/2 - size[1]/2)
spin.SetPosition((RightEdge, TopEdge))
def internalBindings(self, spin):
spin.Bind(wx.EVT_SPIN_UP, self.handlerSpinUp(self), spin)
spin.Bind(wx.EVT_SPIN_DOWN, self.handlerSpinDown(self), spin)
def handlerSpinUp(CallerObject, *args):
def handler(CallerObject, *data):
text = data[0]
prev = text.GetValue()
next = float(prev) + 0.008
text.SetValue("{0:0.3f}".format(next))
return lambda event: handler(CallerObject, *args)
def handlerSpinDown(CallerObject, *args):
def handler(CallerObject, *data):
text = data[0]
prev = text.GetValue()
next = float(prev) - 0.008
text.SetValue("{0:0.3f}".format(next))
return lambda event: handler(CallerObject, *args)
最佳答案
如果你想让你的控件成为由 sizer 正确管理。看看CreatingCustomControls .
你也可以看看 FloatSpin wxPython 附带的(在 wx.lib.agw 中)从 2.8.9.2 版本开始。
回应您的评论:
关于python - wxPython: "Super"wx.SpinCtrl with float values, layout inside sizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261342/
我正在尝试创建一个带有步进增量的自定义 SpinCtrl。这看起来是一件很简单的事情,所以我很惊讶原生的 SpinCtrl 似乎没有这个功能,而且谷歌在这件事上也被证明非常无用。 但是,当我尝试制作自
wx.SpinCtrl 仅限于整数旋转,而不是 float 。因此,我正在构建一个 wx.TextCtrl + wx.SpinButton 组合类,它使我能够旋转 float 。我能够以编程方式调整它
我是一名优秀的程序员,十分优秀!