Can a wx.PyControl
can contain a wx.Sizer
?wxPython:wx.PyControl是否可以包含一個wx.Sizer?
請注意,我最終試圖在這裏做什麼(微調浮動值)已經在另一個問題中回答。我特別感興趣的是在wx.PyControl
內部佈置小部件,如果我遇到需要製作自己的自定義小部件的技巧,這項技巧可能會很有用。我已經閱讀了CreatingCustomControls,但它沒有在wx.PyControl
子類中使用sizer。我的CustomWidget
只是看起來不正確。我還沒有執行DoGetBestSize
,因爲我認爲這適用於wx.Sizer
代理上的小部件。我實際上有一個wx.Sizer
做它的東西裏面 a CustomWidget
。
這裏是我的代碼(無子部件之間的事件綁定):
編輯:這裏是我糾正類代碼,這要歸功於Steven Sproat:
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()
這很棒!並感謝關於可運行示例的社區小貼士。我下次會這樣做:)我也編輯了我的問題以包含您的解決方案。 – Kit 2010-07-18 01:14:19
我對這個做了一些更多的實驗,但是我認爲當'CustomWidget'是'wx.Panel'的子元素而不是'wx.Frame'時,它會崩潰。你的想法? – Kit 2010-07-22 00:59:00
你是否按照羅賓的建議嘗試? – 2010-07-22 10:26:19