Python:如何在wxCheckListBox中冻结/禁用某些项?

Python:如何在wxCheckListBox中冻结/禁用某些项?,python,wxpython,freeze,checklistbox,Python,Wxpython,Freeze,Checklistbox,我试图在Python中实现一个wx.CheckListBox,我希望列表中的一些项目总是被选中。我已尝试在事件wx.EVT\u CHECKLISTBOX上使用SetCheckedStrings(stringList)。但是我得到了相反的结果,当我在stringList中取消选中一项时,它被取消选中;当我再次点击它来检查时,它再也不会让我检查了 有谁能给我一些提示,让我在wx.CheckListBox中保留一些项目始终处于选中状态或使其不可选中状态吗?如果事件以您的方式出现,您可以始终使用self

我试图在Python中实现一个
wx.CheckListBox
,我希望列表中的一些项目总是被选中。我已尝试在事件
wx.EVT\u CHECKLISTBOX
上使用
SetCheckedStrings(stringList)
。但是我得到了相反的结果,当我在
stringList
中取消选中一项时,它被取消选中;当我再次点击它来检查时,它再也不会让我检查了


有谁能给我一些提示,让我在
wx.CheckListBox
中保留一些项目始终处于选中状态或使其不可选中状态吗?

如果事件以您的方式出现,您可以始终使用
self.box.Unbind(wx.EVT\u CheckListBox)
禁用它一段时间。但是,即使不解开,此示例也适用于我:

import wx

CHOICES = ["One", "Two", "Three", "Four", "Five"]
ALWAYS_ON = ["One", "Three"]

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.box = wx.CheckListBox(self.panel, choices=CHOICES)

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.box)

        self.panel.SetSizerAndFit(self.sizer)  
        self.Show()

        self.box.Bind(wx.EVT_CHECKLISTBOX, self.OnCheckBoxList)
        self.box.SetCheckedStrings(ALWAYS_ON)

    def OnCheckBoxList(self, e):       
        index = e.GetSelection()
        label = self.box.GetString(index)
        if label in ALWAYS_ON:
            self.box.Check(index)           

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

谢谢你的回复。我在我的电脑上试过你的代码:它出现在复选框“一”和“三”中。当我点击它们时,它们被取消选中,我无法再次选中这些复选框。我正在运行MacOSX10.8.2和python 2.7.2。当我在另一台运行Linux的计算机上试用你的程序时,它运行得很好。我认为Mac对此有问题。您有没有想过绕过此操作?请尝试向事件处理程序添加打印语句。事件处理程序只调用一次吗?您的Mac系统的行为就像有这样的行
self.box。检查(index,False)
。尝试使用它而不是
self.box。选中(索引)
。您也可以尝试
self.box.Check(index,True)
。可能有一个错误,第二个参数的隐式值错误。我在事件处理程序中添加了print,只有在我选中/取消选中某个项目时才会调用它一次。当我尝试self.box.Check(index,False)时:第一次单击项目“One”时,它处于未选中状态,从第二次单击时,它处于选中状态,不能再次取消选中。当我尝试self.box.Check(index,True):当单击项目“One”时,它被取消选中,无法再次选中。因此,您必须使用
self.box.Check(index,False)
self.box.Check(index,True)
来获得所需的行为。不幸的是,我没有苹果操作系统来尝试它。您也可以在wxPython邮件列表中询问。