wxPython: как получить sizer из wx.StaticText?

Виджет находится в одном из многих размеров, которые я делаю, но как получить размер одного из этих виджетов, например, в wx.StaticText, Во-первых, хотя у wx.StaticText есть метод GetSizer() потому что это происходит от wx.Window, но это всегда возвращение Noneесть ли способ?

Извините за мой плохой язык.

РЕДАКТИРОВАТЬ (23.08.2012) Решение от Майка Дрисколла:

С помощью self.sizer.GetChildren() получить SizerItemList от какого-то sizer, затем с помощью GetWindow() получить актуальный виджет из списка

1 ответ

Решение

Если у sizer есть потомки, то GetChildren возвращает список виджетов. Я делал это много раз с wxPython 2.8. Я не помню, чтобы кто-нибудь упоминал, что в 2.9 или Фениксе все было по-другому, так что, полагаю, это не так. Можете ли вы сказать нам, какую версию ОС и wxPython вы используете?

Если вы хотите узнать, как получить произвольный классификатор, вы можете попробовать GetContainedSizer или использовать инструмент Widget Inspection Tool

РЕДАКТИРОВАТЬ (22.08.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()
Другие вопросы по тегам