窗口小部件是一个许多施胶剂我做的,但如何让这些小部件之一的分级机,例如在wx.StaticText
。 首先,我虽然wx.StaticText有一个方法GetSizer()
因为它源自wx.Window
,但它总是返回None
,有没有办法?
对不起,我可怜的语言。
编辑(2012年8月23日)解决方案从麦克·德里斯科尔:
使用self.sizer.GetChildren()
获得SizerItemList
一些分级机,然后使用GetWindow()
从列表中得到实际的小部件
如果分级机有孩子,那么的GetChildren不会返回小部件列表。 我已经与wxPython的2.8做了很多次。 我不记得任何人提到它是2.9或凤凰城不同,所以我猜它不是。 你能告诉我们您所使用的操作系统和wxPython的版本?
如果你想知道如何获得一个任意施胶机,你可以尝试GetContainingSizer或使用的Widget检测工具
编辑(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()