2012-02-11 23 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

サイザーの削除または削除を使用することができますメソッドをデタッチします。削除するとパネルが削除され、破棄されます。 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) これも試してみてください...それは働きました........... メソッドを削除していません...... 。このデタッチと非表示を見てみましょう........ –

関連する問題