2012-02-11 5 views
0

동적 패널을 추가 할 프레임을 만들려고합니다. 또한 패널을 동적으로 제거하려고합니다. 동적 추가가 완벽하게 작동합니다. 제거 부분이 전혀 작동하지 않습니다.패널의 동적 추가 및 제거

# panels.py 
#self.Fit() causes the whole frame to shrink.So we are using self.Layout instead 

import wx 


class Panels(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title) 

     self.vbox = wx.BoxSizer(wx.VERTICAL) 
     panel = wx.Panel(self,-1) 
     hbox= wx.BoxSizer(wx.HORIZONTAL) 
     b1 = wx.Button(panel, -1, 'Add') 
     b2 = wx.Button(panel, -1, 'Remove') 
     hbox.Add(b1,-1,wx.ALL,10) 
     hbox.Add(b2,-1,wx.ALL,10) 
     panel.SetSizer(hbox) 

     panel2 = wx.Panel(self,-1) 
     hbox2= wx.BoxSizer(wx.HORIZONTAL) 
     b1_2 = wx.Button(panel2, -1, 'Button 3') 
     b2_2 = wx.Button(panel2, -1, 'Button 4') 
     hbox2.Add(b1_2,-1,wx.ALL,10) 
     hbox2.Add(b2_2,-1,wx.ALL,10) 
     panel2.SetSizer(hbox2) 
     self.vbox.Add(panel,-1,wx.EXPAND,10) 
     self.vbox.Add((-1, 10)) 
     self.vbox.Add(panel2,-1,wx.EXPAND,10) 


     self.SetSizer(self.vbox) 
     self.Layout() 
     self.Bind(wx.EVT_BUTTON,self.tst, b1) 
     self.Bind(wx.EVT_BUTTON,self.remove, b2) 

     self.Centre() 

     self.Show(True) 

    def tst(self,event): 
     self.panel3 = wx.Panel(self,-1) 
     hbox3= wx.BoxSizer(wx.HORIZONTAL) 
     b1_3 = wx.Button(self.panel3, -1, 'Button 5') 
     b2_3 = wx.Button(self.panel3, -1, 'Button 6') 
     hbox3.Add(b1_3,-1,wx.ALL,10) 
     hbox3.Add(b2_3,-1,wx.ALL,10) 
     self.panel3.SetSizer(hbox3) 
     self.vbox.Add((-1, 10)) 
     self.vbox.Add(self.panel3,-1,wx.EXPAND,10) 
     self.SetSizer(self.vbox) 
     self.Layout() 
     return 

    def remove(self,event): 


     self.vbox.Remove(self.panel3) 
     self.SetSizer(self.vbox) 
     self.Layout() 
     return 




app = wx.App() 
Panels(None, -1, 'Panels') 
app.MainLoop() 

사람이 작업 할 수있는 방법 어떤 제안이 있습니다 아래의 코드를 참조하십시오? '.Remove()'가 전혀 없다면 ... 또는 패널과 함께 작동하는 경우 ......

답변

1

원하는대로 sizer의 제거 또는 제거를 사용할 수 있습니다. 방법을 분리하십시오. Remove (제거)를 클릭하면 패널이 제거 된 다음 삭제됩니다. Detach는 기본적으로 패널을 숨긴 다음 재사용 할 수 있습니다. Detach() 대신 Hide()를 사용할 수 있습니다. 파괴 및 생성시 깜박임이 보이면 Freeze/Thaw 방법을 살펴보아야합니다. http://www.blog.pythonlibrary.org/2010/06/16/wxpython-how-to-switch-between-panels/

+0

누군가가 솔루션을 게시 ....... [링크] (HTTP :

마지막으로, 나는 당신이 너무 도움이 될 패널 사이를 전환하는 방법을 보여주는 작은 기사를 쓴 // 내 학습 -code.googlecode.com/...emove_panel.py) 시도해보세요. ... 작동했습니다 ........... 제거 방법 did'nt work ...... .이 분리와 숨기기를 들여다 보면 ........ –