2

该小部件是我制作的众多尺寸器之一,但如何获取这些小部件之一的尺寸器,例如在wx.StaticText. 首先,我虽然 wx.StaticText 有一个方法GetSizer(),因为它派生自wx.Window,但它总是返回None,有没有办法?

对不起我语言不好。

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

用于从一些 sizer 中获取,然后用于self.sizer.GetChildren()从列表中获取实际的小部件SizerItemListGetWindow()

4

1 回答 1

1

如果 sizer 有子项,则 GetChildren 会返回一个小部件列表。我已经用 wxPython 2.8 做过很多次了。我不记得有人提到它在 2.9 或 Phoenix 中有所不同,所以我猜它不是。您能告诉我们您使用的是哪个操作系统和 wxPython 版本吗?

如果您想知道如何获取任意大小,您可以尝试 GetContainingSizer 或使用小部件检查工具

编辑(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()
于 2012-08-20T14:20:29.747 回答