如果事件按照自己的方式進行,您可以隨時使用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()
感謝您的迴應。我在我的電腦上試過你的代碼:它出現在框中「一」和「三」被檢查。當我點擊這些時,他們沒有被檢查,我無法再檢查那些盒子。我正在運行Mac OSX 10.8.2,python 2.7.2。當我在運行Linux的另一臺計算機上嘗試您的程序時,它運行良好。我認爲Mac有這個問題。你有什麼想法繞過這個? – HuongOrchid 2013-04-12 16:29:23
嘗試向事件處理程序添加打印語句。事件處理程序是否只調用過一次? – Fenikso 2013-04-13 19:06:53
另外你的Mac系統的行爲就好像有'self.box.Check(index,False)'這樣的行。嘗試使用它來代替'self.box.Check(index)'。你也可以嘗試'self.box.Check(index,True)'。也許有一個錯誤的第二個參數的隱含值錯誤。 – Fenikso 2013-04-13 19:15:07