Вызов wxSizer.Insert () скрывает элемент - PullRequest
2 голосов
/ 12 апреля 2011

Я пытаюсь вставить панель в wxBoxSizer перед последним элементом в этом классификаторе, используя следующий код:

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 (), он все еще находится в своем старом положении и что я не делаю, чтобы остановить его неправильное поведение?

1 Ответ

2 голосов
/ 12 апреля 2011

Ваше воспитание, вероятно, неправильно. Некоторые из родителей объекта не соответствуют фактической структуре и / или размерам. Попробуйте этот образец:

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