wxPython:如何从wx.StaticText获取sizer?

时间:2012-08-20 02:02:43

标签: wxpython sizer

小部件是我制作的许多大小调整器之一,但是如何获得其中一个小部件的大小调整器,例如在wx.StaticText中。首先,我虽然wx.StaticText有一个方法GetSizer(),因为它派生自wx.Window,但它始终返回None,有没有办法?

抱歉我的语言不好。

编辑(08/23/2012) Mike Driscoll的解决方案:

使用self.sizer.GetChildren()从某个sizer获取SizerItemList,然后使用GetWindow()从列表中获取实际的小部件

1 个答案:

答案 0 :(得分:1)

如果sizer有子节点,则GetChildren会返回小部件列表。我用wxPython 2.8做了很多次。我不记得有人提到它在2.9或凤凰城有所不同,所以我猜它不是。你能告诉我们你使用的操作系统和wxPython版本吗?

如果您想知道如何获取任意sizer,可以尝试使用GetContainingSizer或使用Widget Inspection Tool

EDIT(08/22/2012):这是一个有效的例子:

import wx

########################################################################
class MyApp(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Example")
        panel = wx.Panel(self)

        lbl = wx.StaticText(panel, label="I'm a label!")
        txt = wx.TextCtrl(panel, value="blah blah")
        btn = wx.Button(panel, label="Clear")
        btn.Bind(wx.EVT_BUTTON, self.onClear)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(lbl, 0, wx.ALL, 5)
        self.sizer.Add(txt, 0, wx.ALL, 5)
        self.sizer.Add(btn, 0, wx.ALL, 5)

        panel.SetSizer(self.sizer)

    #----------------------------------------------------------------------
    def onClear(self, event):
        """"""
        children = self.sizer.GetChildren()

        for child in children:
            widget = child.GetWindow()
            print widget
            if isinstance(widget, wx.TextCtrl):
                widget.Clear()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MyApp()
    frame.Show()
    app.MainLoop()