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

时间:2013-04-11 18:21:31

标签: python wxpython freeze checklistbox

我正在尝试在Python中实现wx.CheckListBox,我希望列表中的某些项目始终被检查。我曾尝试在事件SetCheckedStrings(stringList)上使用wx.EVT_CHECKLISTBOX。但是我得到了相反的结果,当我取消选中stringList中的一个项目时,它是未选中的;当我再次点击它来检查它时,它永远不会让我再次检查。

任何人都可以给我一些提示,让wx.CheckListBox中的某些项目始终得到检查或使其无法检查吗?

1 个答案:

答案 0 :(得分:0)

如果事件妨碍了您,您可以使用self.box.Unbind(wx.EVT_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()