2013-04-11 3 views
2

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

감사합니다. 내 컴퓨터에서 코드를 보았습니다. "One"및 "Three"상자가 선택된 것으로 나타났습니다. 내가 클릭하면, 그들은 체크되지 않았고, 나는 그 박스를 다시 확인할 수 없었다. 저는 Mac OSX 10.8.2, python 2.7.2를 사용하고 있습니다. Linux를 실행하는 다른 컴퓨터에서 프로그램을 시험해 보았을 때 잘 작동했습니다. 나는 맥이 이것에 문제가 있다고 생각한다. 이것을 우회 할 생각이 있습니까? – HuongOrchid

+0

이벤트 처리기에 print 문을 추가해보십시오. 이벤트 핸들러는 한 번만 호출됩니까? – Fenikso

+0

또한 Mac 시스템은'self.box.Check (index, False)'와 같은 줄이있는 것처럼 작동합니다. 'self.box.Check (index)'대신에 이것을 사용해보십시오. 'self.box.Check (index, True)'를 시도해 볼 수도 있습니다. 두 번째 매개 변수에 잘못된 암시 적 값이있는 버그가있을 수 있습니다. – Fenikso