2016-06-21 1 views
1

в моем приложении я динамически создать аккордеон виджет и сохранить список индексов:Какие возможные триггеры обратного вызова доступны для изменения атрибута киевского аккордеона?

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

и в соответствующем файл кв у меня есть:

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>, но вы bind к <property_name>. (Также см. properties and events.)

+0

Hi zeeMonkeez, спасибо за разъяснение. Однако я все еще боюсь. Так что если acc_panel содержит виджет аккордеона (acc_panel.add_widget (acc), то его дочерние элементы являются AccordionItems.Это правильно? Когда я затем привязываю всех этих детей в цикле к моему обратному вызову: acc_panel.children [idx] .bind (collapse = self.do_print), я ожидаю, что каждый раз, когда я нажимаю на название аккордеонита, будет напечатан соответствующий заголовок, но это происходит только для первого аккордеона. Что мне не хватает .... –

+0

К сожалению, цикл выше. В самом деле, это действительно так и сейчас работает как прелесть. Еще раз спасибо. –