2

ウィジェットは、私が作成する多くのサイザーの 1 つですが、これらのウィジェットのいずれかのサイザーを取得する方法は、たとえばwx.StaticText. まず、 wx.StaticText はGetSizer()から派生しているのでメソッドがあるのですがwx.Window、常に を返すNoneのですが、方法はありますか?

下手な言葉でごめんなさい。

編集 (2012 年 8 月 23 日)マイク Driscoll からのソリューション:

を使用していくつかのサイザーself.sizer.GetChildren()から取得し、次に使用してリストから実際のウィジェットを取得しますSizerItemListGetWindow()

4

1 に答える 1

1

sizer に子がある場合、GetChildren はウィジェットのリストを返します。wxPython 2.8で何度もやった. 2.9 や Phoenix での違いについて言及した人を覚えていないので、そうではないと思います。使用している OS と wxPython のバージョンを教えていただけますか?

任意のサイザーを取得する方法を知りたい場合は、GetContainingSizer を試すか、Widget Inspection Toolを使用してください。

編集 (2012 年 8 月 22 日): これが実際の例です。

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 に答える