Может ли wx.PyControl
содержать wx.Sizer
?
Обратите внимание, что на то, что я в конечном итоге пытаюсь сделать здесь (счетчик с плавающими значениями), уже дан ответ в другом вопросе.Меня особенно интересует макетирование виджетов в wx.PyControl
, навык, который может оказаться полезным, если я столкнусь с необходимостью создавать свои собственные виджеты.Я уже прочитал CreateCustomControls , но в подклассе wx.PyControl
он не использовал sizer.
Используя мой код ниже, мой CustomWidget
просто не выглядит правильным.Я еще не делаю DoGetBestSize
, потому что я думаю, что это относится к wx.Sizer
действующему на виджету.Я на самом деле wx.Sizer
делаю свое дело внутри a CustomWidget
.
Вот мой код (без привязки событий между подвиджетами):
РЕДАКТИРОВАТЬ: Вот мой исправленный код класса, благодаря Стивен Спроат :
import wx
class CustomWidget(wx.PyControl):
def __init__(self, parent):
wx.PyControl.__init__(self, parent=parent, style=wx.NO_BORDER) # Style added.
text = wx.TextCtrl(parent=self)
spin = wx.SpinButton(parent=self, style=wx.SP_VERTICAL)
sizer = wx.GridBagSizer()
self.layout(text, spin, sizer)
self.OnInit(text, sizer)
def OnInit(self, text, sizer):
text.SetValue(u"0.000")
def layout(self, text, spin, sizer):
self.SetSizer(sizer)
sizer.Add(text, pos=(0, 0), flag=wx.ALIGN_CENTER)
sizer.Add(spin, pos=(0, 1), flag=wx.ALIGN_CENTER)
self.Fit()
self.Layout() # This is what I lacked. I needed to call .Layout()
self.CenterOnParent()