在 wxpython 中,我在单个单元格中有一个 GridBagSizer、gs、一些嵌套的 sizers1
和s2
一个 button 。b
在一个EVT_BUTTON
事件中,我得到了按钮对象。要将网格中的按钮对象移动到不同的网格单元格,我需要移动顶级大小调整器 s1,它是 GridBagSizer gs 的直接“子项”(如果这是正确的术语)。找到顶级尺寸器的最佳方法是什么?
object.GetContainingSizer()
返回按钮对象的大小,s2,但我看不到如何到达 s1。我是否需要将 s1 的引用存储在我的 s2(或 b)对象中?这似乎相当不雅?
# 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))
答案(到目前为止):我发现了一段代码,我不知道该归功于谁 - 似乎与 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
到目前为止,这似乎适用于我在网格中的所有情况。不确定我现在是否理解它,稍后我将不得不深入研究代码 - 现在只需要完成这项工作。