在wxpython中,我有一個GridBagSizer,gs,在一個單元中有一些嵌套的sizer s1
和s2
以及一個按鈕b
。什麼是在嵌套sizer中查找「父」sizer的最佳方式?
在EVT_BUTTON
事件中,我得到按鈕對象。要將網格中的按鈕對象移動到不同的網格單元,我需要移動GridBagSizer的gs直接「子」(如果這是正確的術語)的頂級sizer,s1。找到最高級別的sizer的最佳方法是什麼?
object.GetContainingSizer()
返回按鈕對象的sizer,s2,但我看不到如何去s1。我是否需要在s2(或b)對象中存儲對s1的引用?這似乎相當不雅?
# pseudocode
panel=wx.Panel(None)
gs= wx.GridBagSizer()
s1= wx.BoxSizer()
s2= wx.BoxSizer()
b= wx.Button(panel, wx.ID_ANY, 'AButton')
s2.Add(b)
s1.Add(s2)
gs.Add(s1, (row,col))
答案(到目前爲止):我發現了一段代碼的,我不知道是誰的信用 - 似乎有事情做與達博。它在dGridSizer.py,但它確實我在尋找類似的事情:
szitm= grid_sizer.FindItemAtPosition((row,col))
if szitm:
if szitm.IsWindow():
itm=szitm.GetWindow()
elif szitm.IsSizer():
itm=szitm.GetSizer()
try: # in case some other IsSomething() I don't have covered
grid_sizer.SetItemPosition(itm, (newrow,col))
except:
pass
這似乎在所有我在電網迄今爲止的情況下工作。我不確定在這一點上我明白了,以後我必須深入研究代碼 - 現在只需完成這項工作即可。
有GetContainingSizer小部件方法,它會給你sizer的小部件已被添加到,但由於sizer不跟蹤他們的父母,只有他們的孩子,沒有辦法從sizer到sizer,它正在被管理,如果有的話。 – RobinDunn