リファクタリングセッション中に、多くのGUIコードを小さな関数に入れて、データをwx.Sizerオブジェクトに直接挿入します。
たとえば、この小さな関数は次のとおりです。
def buildStatusDisplay(self, status_disp, flag):
grid = wx.FlexGridSizer(cols=1, hgap=5, vgap=0)
font = wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.LIGHT, False, 'Segoe UI')
for option in status_disp:
left = wx.StaticText(self, -1, option)
left.SetFont(font)
grid.Add(left, 0, flag=flag)
return grid
したがって、throwawayを使用してすべてのStaticTextオブジェクトを作成し、left
を返しますFlexGrid
。ただし、ユーザー入力に基づいて更新するには、StaticTextオブジェクトのラベルの一部が必要ですが、それらにアクセスする方法がわかりません。
関数から返されるサイザーをループしましたが、サイザーを構成するオブジェクトへの参照を取得する方法に関連するものは何もありません。
for i in dir(sizer):
print i
>>Add
>>AddF
>>AddGrowableCol
>>AddGrowableRow
>>AddItem
>>AddMany
>>AddSizer
>>AddSpacer
>>AddStretchSpacer
>>AddWindow
>>CalcMin
>>CalcRowsCols
>>Children
>>ClassName
>>Clear
>>ColWidths
>>Cols
>>ComputeFittingCli
>>ComputeFittingWin
>>ContainingWindow
>>DeleteWindows
>>Destroy
>>Detach
>>Fit
>>FitInside
>>FlexibleDirection
>>GetChildren
>>GetClassName
>>GetColWidths
>>GetCols
>>GetContainingWind
>>GetFlexibleDirect
>>GetHGap
>>GetItem
>>GetItemIndex
>>GetMinSize
>>GetMinSizeTuple
>>GetNonFlexibleGro
>>GetPosition
>>GetPositionTuple
>>GetRowHeights
>>GetRows
>>GetSize
>>GetSizeTuple
>>GetVGap
>>HGap
>>Hide
>>Insert
>>InsertF
>>InsertItem
>>InsertSizer
>>InsertSpacer
>>InsertStretchSpac
>>InsertWindow
>>IsSameAs
>>IsShown
>>Layout
>>MinSize
>>NonFlexibleGrowMo
>>Position
>>Prepend
>>PrependF
>>PrependItem
>>PrependSizer
>>PrependSpacer
>>PrependStretchSpa
>>PrependWindow
>>RecalcSizes
>>Remove
>>RemoveGrowableCol
>>RemoveGrowableRow
>>RemovePos
>>RemoveSizer
>>RemoveWindow
>>Replace
>>RowHeights
>>Rows
>>SetCols
>>SetContainingWind
>>SetDimension
>>SetFlexibleDirect
>>SetHGap
>>SetItemMinSize
>>SetMinSize
>>SetNonFlexibleGro
>>SetRows
>>SetSizeHints
>>SetVGap
>>SetVirtualSizeHin
>>Show
>>ShowItems
>>Size
>>VGap
>>_ReplaceItem
>>_ReplaceSizer
>>_ReplaceWin
>>_SetItemMinSize
>>__class__
>>__del__
>>__delattr__
>>__dict__
>>__doc__
>>__format__
>>__getattribute__
>>__hash__
>>__init__
>>__module__
>>__new__
>>__reduce__
>>__reduce_ex__
>>__repr__
>>__setattr__
>>__sizeof__
>>__str__
>>__subclasshook__
>>__swig_destroy__
>>__weakref__
>>_setOORInfo
GetChildren()
SizerItems
基になるオブジェクトへの参照も保持していないように見えるものだけを返します。
サイザー内の何かにアクセスする方法を知っている人はいますか?関数を少し分解して、オブジェクトとサイザーのリストを返すか、関数を単純にダンプして、メインで変更する必要のあるオブジェクトの識別子を保持できると思います。しかし...私のGUIコードすでに十分なスパゲッティです。避けられれば避けたいと思います。