小部件是我制作的许多大小调整器之一,但是如何获得其中一个小部件的大小调整器,例如在wx.StaticText
中。首先,我虽然wx.StaticText有一个方法GetSizer()
,因为它派生自wx.Window
,但它始终返回None
,有没有办法?
抱歉我的语言不好。
编辑(08/23/2012) Mike Driscoll的解决方案:
使用self.sizer.GetChildren()
从某个sizer获取SizerItemList
,然后使用GetWindow()
从列表中获取实际的小部件
答案 0 :(得分:1)
如果sizer有子节点,则GetChildren会返回小部件列表。我用wxPython 2.8做了很多次。我不记得有人提到它在2.9或凤凰城有所不同,所以我猜它不是。你能告诉我们你使用的操作系统和wxPython版本吗?
如果您想知道如何获取任意sizer,可以尝试使用GetContainingSizer或使用Widget Inspection Tool
EDIT(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()