2016-06-21 1 views
1

동적으로 아코디언 위젯을 구축하고 색인 목록 유지 : 내가 가지고있는 kivy 아코디언 항목 변경에 사용할 수있는 콜백 트리거는 무엇입니까? 내 응용 프로그램에서

  acc_panel = self.ids.acc_panel 
      tpitem = string.Template(''' 
AccordionItem: 
    id: '$acc_id' 
    title: '$acc_title' 
    font_name: 'Roboto' 
    min_space: 30 
    RstDocument: 
     background_color: 1, 1, 1, 1 
     source: '$rstdoc' 
      ''') 

      for idx in range(0, self.totevents): 
       event = str(idx + 1) 
       acc_id = 'acc_' + event 
       evidx = 'Event' + event + ':' 
       rstdoc = qglobals.PROJDIR + tempInstrData[evidx]['RstDoc:'] 
       acc_title = str(tempInstrData[evidx]['Instruction:']) 

       new_acc = tpitem.substitute(vars()) 
       acc = Builder.load_string(new_acc) 
       acc_panel.add_widget(acc) 

      n = len(acc_panel.children) 
      for i in range (0,n): 
       acc_panel.children[i].collapse = True 
       acclabel[i+1] = n-1-i 
      acc_panel.children[n-1].collapse = False 
      accactive = 1 
      activeEvent = 1 
      self.change_accitem() 

과 관련 KV 파일

:

Accordion: 
     id: acc_panel 
     orientation: 'vertical' 
     min_space: 30 
     font_name: 'Roboto' 

을 지금은 AccordionItem에 대한 몇 가지 조치를 추가 할을 새 항목을 콜백 함수에 바인딩하여 변경하십시오. on_collapse라는 속성을 사용하려고했지만 그 중 하나는 작동하지 않습니다. 여기에 어떤 가능성이 있습니까?

답변

2

AccordionItem에는 collapse이라는 속성이 있습니다. 이것은 당신이 바인딩 무엇 : 자동으로 클래스 내에서 호출

ai = AccordionItem() 
ai.bind(collapse=my_callback) 

이벤트 핸들러 on_<property_name>라고하지만, 당신에게 <property_name>bind. (properties and events도 참조하십시오.)

+0

안녕하세요, zeeMonkeez, 해명 해 주셔서 감사합니다. 그러나 나는 아직도 고심하고있다. 그래서 acc_panel이 아코디언 위젯 (acc_panel.add_widget (acc))을 보유하고 있다면 그 아이들은 AccordionItems입니다. 정확합니까? 그러면 콜백에 이러한 모든 자식들을 루프로 묶을 때 : acc_panel.children [idx] .bind (collapse = self.do_print), 나는 accordionitem의 제목을 클릭 할 때마다 각각의 제목이 인쇄 될 것이라고 기대한다. 그러나 이것은 첫 번째 accordionitem에만 발생한다. 내가 무엇을 놓쳤는가 ....? –

+0

죄송합니다. 위의 루프는 사실입니다. 지금은 매력으로 작동합니다. 다시 한 번 감사드립니다. –