2010-02-19 120 views
1

对于从wx.Panel中删除控件,您有何建议? 我的控件类型的字典列表,像这样:从wx面板中删除控件的最佳方法

[ 'CB':wx.CheckBox, '标签':wx.StaticText, '输入':wx.TextCtrl]

,我试图在发生某些事情时将其删除,以便我可以添加新的。

我做到这一点的方法是:

# remove previous controls 
    for c in self.controls: 
     c['cb'].Destroy() 
     c['label'].Destroy() 
     c['input'].Destroy() 
     self.controls.remove(c) 

但似乎我总是最后有LEN(self.controls)> 0未知原因

那么什么是去除的正确方法控制面板?我应该在控制面板上做些别的事吗?

回答

1

您正尝试从您正在迭代的同一列表中删除元素,这是创建不良副作用的一种可靠方法。例如举一个简单的例子

l = range(10) 
for a in l: 
    l.remove(a) 
print l 

你认为输出应该是什么?看来你要删除所有项目,并输出应该是“[]”,但输出

[1, 3, 5, 7, 9] 

,因为通过移除项目,你改变了互为作用的内部指标,所以不是你应该做它的副本如

l = range(10) 
for a in l[:]: 
    l.remove(a) 
print l 

但在你的情况下,因为你知道你正在删除所有项目,只需在循环后设置空列表例如

for c in self.controls: 
    c['cb'].Destroy() 
    c['label'].Destroy() 
    c['input'].Destroy() 

self.controls = [] 
+0

我已经弄清楚了,你的回答是正确的......将列表设置为空列表固定它。谢谢! – hyperboreean 2010-02-22 10:28:25

相关问题