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()