首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌套式sizer中找到“父”sizer的最佳方法是什么?

在嵌套式sizer中找到“父”sizer的最佳方法是什么?
EN

Stack Overflow用户
提问于 2013-07-23 15:53:44
回答 2查看 2.1K关注 0票数 1

在wxpython中,我在单个单元格中有一个GridBagSizer、gs和一些嵌套的sizer s1s2,还有一个按钮b

在一个EVT_BUTTON事件中,我得到了按钮对象。要将网格中的按钮对象移动到不同的网格单元格,我需要移动顶级的sizer,s1,它是GridBagSizer,gs的直接“子”(如果这是正确的话)。什么是最好的方法找到最高级的筛检器?

object.GetContainingSizer()返回按钮对象的sizer,s2,但是我不知道如何到达s1。是否需要将对s1的引用存储在s2 (或b)对象中?这看起来很不雅致?

代码语言:javascript
复制
# 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,但它做了一个类似的事情,我正在寻找:

代码语言:javascript
复制
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

这似乎适用于到目前为止我在我的网格中的所有情况。现在我不确定我是否理解它,稍后我将不得不深入研究代码--现在只需要让它工作。

EN

回答 2

Stack Overflow用户

发布于 2013-07-24 03:44:41

我有时做的一个技巧是,使用我正在使用的sizer管理的一个小部件,获取它的父部件,然后获取父部件的sizer。除非您正在做一些非常奇怪的事情,否则应该是您正在使用的测试器的顶级父级测试器(或者,如果它位于该层次结构的顶端,则应该是测试器本身)。

代码语言:javascript
复制
`parentSizer = widget.GetParent().GetSizer()`
票数 6
EN

Stack Overflow用户

发布于 2013-07-23 20:09:47

不,您不需要在sizer中存储引用,但是您必须存储对sizer的引用。将您的sizer定义如下:

代码语言:javascript
复制
self.gs = wx.GridBagSizer()
self.s1 = wx.BoxSizer()
self.s2 = wx.BoxSizer()

然后,您可以访问应用程序的其他部分,并根据需要添加或删除小部件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17815109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档