wxPython的:如何从wx.StaticText得到分级机?(wxPython: How to

2019-09-21 09:16发布

窗口小部件是一个许多施胶剂我做的,但如何让这些小部件之一的分级机,例如在wx.StaticText 。 首先,我虽然wx.StaticText有一个方法GetSizer()因为它源自wx.Window ,但它总是返回None ,有没有办法?

对不起,我可怜的语言。

编辑(2012年8月23日)解决方案从麦克·德里斯科尔:

使用self.sizer.GetChildren()获得SizerItemList一些分级机,然后使用GetWindow()从列表中得到实际的小部件

Answer 1:

如果分级机有孩子,那么的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()


文章来源: wxPython: How to get sizer from wx.StaticText?