wxPython,尝试从sizer中删除所有按钮,总是剩下一个

jmo*_*gee 6 python wxpython

我有以下代码将4个按钮添加到BoxSizer

for word in words:
    btn = wx.Button(self, label=word)
    btn.Bind(wx.EVT_BUTTON, self.onWordSelect)
Run Code Online (Sandbox Code Playgroud)

在我的onWordSelect方法中,我试图删除我在Sizer上创建的所有按钮,以便我可以重新创建新按钮.我的问题是除最后一个按钮外,所有按钮都被删除了.

这是我删除按钮的代码:

for child in self.sizer.GetChildren():
    self.sizer.Remove(child.Window)
    self.sizer.Layout()
Run Code Online (Sandbox Code Playgroud)

检查len(self.sizer.GetChildren())时返回0,但最后一个按钮仍然在屏幕上可见.

kra*_*mer 4

来自http://wxpython.org/docs/api/wx.Sizer-class.html#Remove

由于历史原因,使用 wx.Window 参数调用此方法已被弃用,因为它无法销毁窗口,因为它由其父级拥有。您应该使用 Detach 来代替。

您从 sizer 中删除了元素,但它们仍然存在,并被打印在另一个之上:在循环中添加一行destroyhide它们,它应该很好。