dal*_*ale 0 wxpython nested sizer
在wxPython中我有GridBagSizer,GS,与一些嵌套大小测定器s1和s2和一个按钮b,在单个小区中.
在一个EVT_BUTTON事件上,我得到了按钮对象.要将网格中的按钮对象移动到不同的网格单元格,我需要移动顶级sizer,s1,这是GridBagSizer的直接"子"(如果这是正确的术语),gs.找到顶级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))
Run Code Online (Sandbox Code Playgroud)
答案(到目前为止):我发现了一段我不知道应该归功于哪些代码 - 似乎与dabo有关.它在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
Run Code Online (Sandbox Code Playgroud)
到目前为止,这似乎适用于我在网格中的所有情况.目前还不确定我是否理解它,我将不得不深入研究代码 - 现在只需要完成这项工作.
我有时做过的一个技巧是使用我正在使用的sizer管理的一个小部件,获取它的父级,然后获取父级的sizer.除非你正在做一些非常奇怪的事情,应该是你正在使用的sizer的顶层父级sizer(或者如果它是那个层次结构顶部的sizer本身的sizer本身).
parentSizer = widget.GetParent().GetSizer()