2010-02-19 85 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

相關問題