删除wxpython中动态创建的复选框

删除wxpython中动态创建的复选框,python,wxpython,Python,Wxpython,我是Python和wxpython的新手。我试图编写一个代码,其中我必须根据用户输入的组合框创建复选框。我能做到。但是当我更改选择时,旧的复选框仍然存在,我无法找到销毁或刷新它们的方法。任何帮助都将不胜感激。 这是我的密码: import wx class Form1(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) wx.EVT_COMBOBOX(self, 30

我是Python和wxpython的新手。我试图编写一个代码,其中我必须根据用户输入的组合框创建复选框。我能做到。但是当我更改选择时,旧的复选框仍然存在,我无法找到销毁或刷新它们的方法。任何帮助都将不胜感激。 这是我的密码:

import wx
class Form1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        wx.EVT_COMBOBOX(self, 30, self.EvtComboBox)
        self.lblhear = wx.StaticText(self,-1,"APPLICATION",wx.Point(30, 295))
        self.lblhear3 = wx.StaticText(self, -1, "TASKS TO BE DONE", wx.Point(30, 370))
        self.sampleList = ['ABC', 'PQR']
        self.edithear=wx.ComboBox(self, 30, "",
            wx.Point(110, 290), wx.Size(95, -1),
            self.sampleList, wx.CB_DROPDOWN)
        self.Bind(wx.EVT_COMBOBOX, self.AppSelect, self.edithear)
    def AppSelect(self, event):
        if event.GetString() == "ABC":
            self.Application = 'ABC'
            self.cb_list = []
            act_list = ['Task1','Task2']
        elif event.GetString() == "PQR":
            self.Application = 'PQR'
            self.cb_list = []
            act_list = ['Task3','Task4']
        pos_y = 380
        id_cb = 100
        for i in act_list:
            pos_y += 20
            id_cb += 20
            self.cb = wx.CheckBox(self, id_cb, label=i, pos=(50, pos_y))
            self.cb.SetValue(False)
            self.cb_list.append(self.cb)
    def EvtComboBox(self, event):
        if event.GetId() == 30:
            self.Application = self.event.GetString()
app = wx.PySimpleApp()
frame = wx.Frame(None, size=(1200,800))
Form1(frame)
frame.Show(1)
app.MainLoop()

您可以通过调用现有复选框小部件的
destroy
方法来销毁它们。也许是这样的:

for cb in self.cb_list:
    cb.Destroy()

我怀疑您的代码没有到达您创建复选框的位置。尝试观察程序输出并逐个删除错误。然后我们可以继续。另外,如果你发布一个代码的最小示例,你有更好的机会得到回答。嗨,彼得,谢谢你查看代码。但我不确定,你所说的“没有到达你创建CB的地方”是什么意思。我能够创建CB,但无法删除或销毁旧的CB。我已经按照你的建议编辑了脚本。你能提供一个?删除复选框后,您可能会忘记重新绘制框架嗨,Andrey,谢谢。我现在已经添加了最小的、完整的和可验证的示例。嗨,Robin,非常感谢您查看我的代码。我早些时候试过你的建议,但没有用。问题是,当我将光标移动到复选框上时,旧值会变得可见。Surjith,如果我将这些行添加到AppSelect顶部,并且将self.cb_list=[]添加到构造函数中的某个位置,它会起作用。如果我可以建议,请注意一个无关的注意事项,以后再查看大小。小部件的绝对定位是可行的,但当您遇到不同的DPI或字体大小设置时,事情可能会开始看起来很奇怪。例如,在我的设置中,我只看到应用程序,N被组合框覆盖。@Petr Blahos,非常感谢。如果我按照你的建议去做,它就行了。我将在我的新代码中添加尺码器,因为这更有意义。@RobinDunn我对您的帮助表示感谢。你的回答甚至在我疯狂的梦中都没有。