【问题标题】:Calling wxSizer.Insert() hides item调用 wxSizer.Insert() 隐藏项目
【发布时间】:2011-04-12 15:07:38
【问题描述】:

我正在尝试使用以下代码将面板插入到 wxBoxSizer 中该 sizer 中的最后一个元素之前:

sizer = event.EventObject.Parent.GetSizer()

# Add new panel from xrc        
res = xrc.XmlResource('add_panel.xrc')
panel = res.LoadPanel(self, 'panel')
sizer.Insert(len(sizer.Children) -1, panel)

sizer.Layout()

但是当我运行它时,新面板会正确显示,但之前是表格中最后一个元素的按钮却无处可寻。有几次我看到按钮部分被遮住了,所以很明显它仍然是以前的位置,但隐藏在新面板后面。问题是,调用了 sizer.Layout() 为什么它仍然在原来的位置,我没有做什么会阻止它行为不端?

【问题讨论】:

    标签: python wxpython wxwidgets


    【解决方案1】:

    你的养育方式可能是错误的。一些对象的父对象与实际结构和/或大小不对应。试试这个示例:

    import wx
    
    class MainWindow(wx.Frame):
        def __init__(self, *args, **kwargs):
            wx.Frame.__init__(self, *args, **kwargs)
            self.panel = wx.Panel(self)
            self.button = wx.Button(self.panel, label="New")
            self.button.Bind(wx.EVT_BUTTON, self.OnButton)
            self.buttons = []
            self.sizer = wx.BoxSizer()
            self.sizer.Add(self.button)
            self.panel.SetSizerAndFit(self.sizer)
            self.Show()
    
        def OnButton(self, e):
            button = wx.Button(self.panel, label=str(len(self.buttons)))
            self.buttons.append(button)
            self.sizer.Insert(len(self.sizer.Children) - 1, button)
            self.sizer.Layout()
    
    app = wx.App(False)
    win = MainWindow(None)
    app.MainLoop()
    

    【讨论】:

    • 谢谢,育儿确实是错的。我还必须在父面板上调用 Layout() 和 Fit() 而不是 sizer,否则父面板太小而无法容纳新面板。不过现在一切正常,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2014-10-08
    相关资源
    最近更新 更多