2010-02-19 4 views
1

wx.Panel에서 컨트롤을 제거하는 관점에서 무엇을 권하고 싶습니까?wx 패널에서 컨트롤을 제거하는 가장 좋은 방법

내가 노력하고 있어요 [: wx.CheckBox, '라벨': wx.StaticText, '입력'wx.TextCtrl 'CB']

: 나는 컨트롤의 dicts의 목록 같은 것을 가지고 무언가가 일어 났을 때 그것들을 제거해서 새로운 것들을 추가 할 수 있습니다.

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

하지만 난 항상

그래서 제거하는 적절한 방법 무엇을 알 수없는 이유로 렌 (self.controls)> 0를 가진 끝낼 것 같다 :

나는 그것을 할 방법은 패널에서 통제? 컨트롤이있는 패널에서 다른 작업을해야합니까?

답변

1

반복중인 동일한 목록에서 나쁜 부작용을 만드는 확실한 방법 인 요소를 제거하려고합니다. 예 : 간단한 예를 들어보세요

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

출력이 어떻게되어야한다고 생각하십니까? 그것은 당신이 모든 항목을 제거하고 출력 '[]'해야하지만 항목을 제거하여 당신이 interation 내부 인덱스를 변경하기 때문에 출력이

[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

관련 문제