wx.SpinCtrl
仅限于整数旋转,而不是浮动。因此,我正在构建一个wx.TextCtrl
+ wx.SpinButton
组合类,这使我能够跨越浮点数。我能够以编程方式对它们进行大小和布局,以使组合看起来与普通wx.SpinCtrl
完全相同。
我从wx.TextCtrl
继承了这个组合,因为我希望它的父面板能够捕获wx.EVT_TEXT
个事件。如果你能改进我的这个论点,我将不胜感激。
来自wx.EVT_SPIN_UP
的{{1}}和wx.EVT_SPIN_DOWN
事件都是内部实现,而父框架并不关心这些事件。
现在,我刚碰到一堵砖墙。我的组合类与sizer不兼容。将{2}组合课程wx.SpinButton
移至.Add()
后,wx.GridBagSizer
内只会列出wx.TextCtrl
。 wx.GridBagSizer
本身就是独立的。但wx.SpinButton
绑定工作得非常好。
我的问题是布局。如果我希望wx.EVT_SPIN*
将其视为一个小部件,我该如何编写该类?
这是我的组合类代码:
wx.GridBagSizer
答案 0 :(得分:3)
如果你想控制你,你需要覆盖DoGetBestSize() 由sizer正确管理。看看CreatingCustomControls。
您还可以查看wxPython附带的FloatSpin (在wx.lib.agw中)从版本2.8.9.2开始。
回应你的意见:
答案 1 :(得分:1)
正如Kit的评论中所提到的,FloatSpin
现在已经成为可能。
它已集成在最新版本中。
以下是一个简单的用法示例:
import wx
from wx.lib.agw.floatspin import FloatSpin
class Example_FloatSpin(wx.Frame):
def __init__(self, parent, title):
super(Example_FloatSpin, self).__init__(parent, title=title, size=(480, 250))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
spin = FloatSpin(panel, value=0.0, min_val=0.0, max_val=8.0, increment=0.5, digits=2, size=(100,-1))
vbox.Add(spin, proportion=0, flag=wx.CENTER, border=15)
panel.SetSizer(vbox)
self.Centre()
self.Show()
if __name__ == '__main__':
app = wx.App()
Example_FloatSpin(None, title='Check FloatSpin')
app.MainLoop()