在从wx.Panel中删除控件方面,您会建议什么? 我有一个控件的列表列表,如:
['cb':wx.CheckBox,'label':wx.StaticText,'input':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原因不明
那么从面板中删除控件的正确方法是什么?我应该在持有控件的面板上做些什么吗?
答案 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 = []