2011-04-12 5 views
2

나는 다음과 같은 코드를 사용하여 해당 선별기의 마지막 요소 전에 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()을 호출 한 이유입니다. 왜 여전히 이전 위치에 있습니까? 그리고 내가하지 않는 것은 무엇이 오작동을 막을까요?

답변

2

자녀 양육에 문제가있는 것 같습니다. 객체의 부모 중 일부는 실제 구조 및/또는 사이 처와 일치하지 않습니다. 이 샘플을 사용해보십시오.

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() 
+0

감사합니다. 실제로 양육은 잘못되었습니다. 나 또한 레이아웃()과 Fit()을 sizer와 반대되는 부모에 대해 호출해야했습니다. 그렇지 않으면 부모 패널이 너무 작아서 새 패널을 유지할 수 없었습니다. 지금 일하는 모두, 도와 줘서 고마워! – redrah