Wxpython 从wx面板移除控件的最佳方法
关于从wx.Panel中删除控件,您有什么建议? 我有一个控制命令列表,类似于: ['cb':wx.CheckBox,'label':wx.StaticText,'input':wx.TextCtrl] 我试图在发生某些事情时删除它们,以便添加新的 我的做法是:Wxpython 从wx面板移除控件的最佳方法,wxpython,Wxpython,关于从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()
# 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
那么,从面板上移除控件的正确方法是什么?我是否应该在保存控件的面板上执行其他操作?您试图从正在迭代的同一列表中删除元素,这肯定会产生不良副作用。e、 举个简单的例子
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 = []
您试图从正在迭代的同一列表中删除元素,这肯定会产生不良的副作用。e、 举个简单的例子
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 = []
我已经弄明白了,你的答案是正确的。。。将列表设置为空列表修复了它。谢谢我已经弄明白了,你的答案是正确的。。。将列表设置为空列表修复了它。谢谢