wx.Panel边框不会被Destroy()方法破坏

时间:2011-05-05 08:23:28

标签: python wxpython wxwidgets

所以我开始使用wx来生成我的GUI。我使用FlexGridSizer创建了一个自定义表,然后我想在按下按钮时清除表。所以我的方法是:

def clearPressed(self,event):
    self.label_ID.Destroy()
    self.label_NAME.Destroy()
    self.label_ADMIN.Destroy()
    self.label_SELECTED.Destroy()
    self.label_OPERATION.Destroy()
    self.label_STRUCTURE.Destroy()
    i = 0
    while i < self.nrEntries:
        self.idsGUI[i].Destroy()
        self.pidsGUI[i].Destroy()
        self.aidsGUI[i].Destroy()
        self.sidsGUI[i].Destroy()
        self.nidsGUI[i].Destroy()
        self.stidsGUI[i].Destroy()
        i = i + 1
    self.clearBut.Destroy()
    self.tableTitleLabel.Destroy()
    self.tableGrid.Layout() 

这些基本上都是我在表格上的组件。此方法适用于StaticText按钮radiobutons。但这并没有给我一个表格外观。所以我google了一下,发现你无法绘制网格的边框。所以我在每个网格位置添加了一个面板,在其上面我绘制了我的表组件。表看起来更好,但现在destroy方法不会清除面板的边框。

我正在创建这样的组件:

        panel = wx.Panel(self, -1, style=wx.BORDER_SIMPLE)
        wx.RadioButton(panel,-1,self.sids[i])
        self.sidsGUI.append(panel)

clearPressed方法现在会破坏所有组件甚至部分边框,但不会破坏所有组件。我的基本gui结构如下:

Frame-&gt; MainFlexGridSizer-&gt; OneVerticalBoxSizer(这包含一些其他按钮以及我不想删除的内容) -------------------------------------&gt; TableArrangementFlexGridSizer-&gt; VetricalBoxSizer(包含表格标题和一些信息) -------------------------------------------------- ---------------------------------&gt; TableFlexGrid(包含表格的实际面板,其边框不会在销毁时消失) -------------------------------------------------- ---------------------------------&gt; VerticalBoxSizer(其他一些页脚按钮和信息)

此致 波格丹

2 个答案:

答案 0 :(得分:1)

这似乎是一种非常复杂的方法。你看过使用wxGrid吗?您可能会失去一点灵活性,但是您将不得不编写大量代码来管理例如此类的常规网格管理任务。

答案 1 :(得分:0)

当你说“clearPressed方法现在破坏所有组件甚至部分边界但不是全部它们”时,你的意思是什么?这是否意味着在销毁所有组件后您在框架上看到了一些工件?如果是这样,那么尝试在clearPressed方法之后调用顶部框架的Refresh()方法。此方法将重绘框架及其所有子项。