Wxpython 从wx面板移除控件的最佳方法

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()

关于从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


那么,从面板上移除控件的正确方法是什么?我是否应该在保存控件的面板上执行其他操作?

您试图从正在迭代的同一列表中删除元素,这肯定会产生不良副作用。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 = []

我已经弄明白了,你的答案是正确的。。。将列表设置为空列表修复了它。谢谢我已经弄明白了,你的答案是正确的。。。将列表设置为空列表修复了它。谢谢