盘的动态增减

2024-06-16 14:45:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图制作一个框架,我们添加动态面板。 我还想动态删除面板。动态添加正在工作太好了。那个拆卸部件根本不工作。 请参见以下代码:

# 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()”是否存在……或者它是否适用于面板。。。。。。在


Tags: selfaddbuttonallb2b1wxlayout
1条回答
网友
1楼 · 发布于 2024-06-16 14:45:32

根据您要执行的操作,您可以使用sizer的Remove或Detach方法。“移除”将移除面板,然后将其销毁。分离将基本上隐藏面板,然后您可以重用它。为此,可以使用Hide()而不是Detach()。如果在销毁和创建时看到闪烁,则需要研究冻结/解冻方法。在

最后,我写了一篇小文章,展示了如何在面板之间切换,这可能对您也有帮助:http://www.blog.pythonlibrary.org/2010/06/16/wxpython-how-to-switch-between-panels/

相关问题 更多 >