2016-11-26 1 views
1

Я хочу, чтобы раскрывающийся список оставался видимым после того, как был сделан выбор (вместо исчезновения). Я попробовал несколько синтаксисов с BooleanProperty увольнять_поиск, но не могу понять, как это понять. Я новичок в Python и Kivy. Где и как я могу установить это свойство? Благодаряkivy dropdown автоматически отклоняется

from kivy.base import runTouchApp 
from kivy.lang import Builder 
from kivy.factory import Factory 
from kivy.properties import ListProperty, ObjectProperty 
from kivy.uix.dropdown import DropDown 
from kivy.uix.button import Button 

class MultiSelectSpinner(Button): 


    dropdown = ObjectProperty(None) 

    values = ListProperty([]) 
    """Values to choose from.""" 
    selected_values = ListProperty([]) 
    """List of values selected by the user.""" 


    def __init__(self, **kwargs): 
     self.bind(dropdown=self.update_dropdown) 
     self.bind(values=self.update_dropdown) 
     super(MultiSelectSpinner, self).__init__(**kwargs) 
     self.bind(on_release=self.toggle_dropdown) 

    def toggle_dropdown(self, *args): 
     if self.dropdown.parent: 
      self.dropdown.dismiss() 
     else: 
      self.dropdown.open(self) 

    def update_dropdown(self, *args): 
     if not self.dropdown: 
      self.dropdown = DropDown() 
     values = self.values 
     if values: 
      if self.dropdown.children: 
       self.dropdown.clear_widgets() 
      for value in values: 
       b = Factory.MultiSelectOption(text=value) 
       b.bind(state=self.select_value) 
       self.dropdown.add_widget(b) 

    def select_value(self, instance, value): 
     if value == 'down': 
      if instance.text not in self.selected_values: 
       self.selected_values.append(instance.text) 
     else: 
      if instance.text in self.selected_values: 
       self.selected_values.remove(instance.text) 

    def on_selected_values(self, instance, value): 
     if value: 
      self.text = ', '.join(value) 
     else: 
      self.text = '' 

kv = ''' 
BoxLayout: 
    orientation: 'vertical' 

    BoxLayout: 
     Label: 
      text: 'Color selection' 
     MultiSelectSpinner: 
      id: color 
      values: 'White','Black' 

    BoxLayout: 
     Label: 
      text: 'Shape selection' 
     MultiSelectSpinner: 
      id: shape 
      values: 'Circle','Square' 

<[email protected]>: 
    size_hint: 1, None 
    height: '60dp' 
''' 

runTouchApp(Builder.load_string(kv)) 

ответ

0

Создать DropDown с auto_dismiss=False ключевое слово в или отредактировать в на лету:

d = DropDown() 
d.auto_dismiss = False 

Для будущих случаев, пожалуйста, проверьте documentation, прежде чем спрашивать.

+0

Даже если добавить их все еще, кажется, не работает в моем коде: – Hector

+0

Защиту __init __ (я, auto_dismiss = False, dismiss_on_select = False, ** kwargs): супер (MultiSelectSpinner, самость) .__ INIT __ (auto_dismiss = Ложные, dismiss_on_select = False, ** kwargs) self.bind (on_release = self.toggle_dropdown) защиту toggle_dropdown (я, auto_dismiss = False, dismiss_on_select = False, *): Args защиту update_dropdown (я, auto_dismiss = False, reject_on_select = False, * args): – Hector

+0

@Hector Is 'MultiSelectSpinner'' DropDown'? Нет. Где находится «DropDown»? 'self.dropdown = DropDown()', поэтому обновляйте объект _that_, а не '__init__' случайной вещи. :П – KeyWeeUsr

 Смежные вопросы

  • Нет связанных вопросов^_^