2013-04-11 12 views
2

我想在Python中實現一個wx.CheckListBox,我希望列表中的某些項目總是被檢查。我試圖在事件wx.EVT_CHECKLISTBOX上使用SetCheckedStrings(stringList)。但是,我得到了相反的結果,當我在stringList中取消選中一個項目時,未選中;當我再次點擊它來檢查它,它永遠不會讓我再次檢查。Python:如何凍結/解除wxCheckListBox中的某些項目?

任何人都可以給我一些提示,以保持一些項目在wx.CheckListBox總是得到檢查或讓那些無法檢查?

回答

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() 
+0

感謝您的迴應。我在我的電腦上試過你的代碼:它出現在框中「一」和「三」被檢查。當我點擊這些時,他們沒有被檢查,我無法再檢查那些盒子。我正在運行Mac OSX 10.8.2,python 2.7.2。當我在運行Linux的另一臺計算機上嘗試您的程序時,它運行良好。我認爲Mac有這個問題。你有什麼想法繞過這個? – HuongOrchid 2013-04-12 16:29:23

+0

嘗試向事件處理程序添加打印語句。事件處理程序是否只調用過一次? – Fenikso 2013-04-13 19:06:53

+0

另外你的Mac系統的行爲就好像有'self.box.Check(index,False)'這樣的行。嘗試使用它來代替'self.box.Check(index)'。你也可以嘗試'self.box.Check(index,True)'。也許有一個錯誤的第二個參數的隱含值錯誤。 – Fenikso 2013-04-13 19:15:07

相關問題