动态添加和删除面板
问题描述:
我正在尝试使框架动态添加面板。 另外我也想动态移除面板。动态加法工作完美。去除部分根本不工作。 请参阅下面的代码:动态添加和删除面板
# 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()'是否存在......或者如果它与面板一起工作......
答
根据你想要做什么,你可以使用sizer的Remove或分离方法。删除将删除面板,然后销毁它。分离将基本隐藏面板,然后您可以重新使用它。你可以使用Hide()而不是Detach()。如果在销毁和创建时看到闪烁,则需要查看冻结/解冻方法。
最后,我写了演示如何面板,可以帮助你太之间切换的小文章:http://www.blog.pythonlibrary.org/2010/06/16/wxpython-how-to-switch-between-panels/
有人贴出了解决办法....... [链接](HTTP://我的学习-code.googlecode.com/...emove_panel.py) 试试这个吧.....它工作........... 移除方法did'nt work ......我看看这个分离和隐藏........ – 2012-02-14 12:22:37