2016-11-26 18 views
1

選択後にドロップダウンリストを表示したままにする(消滅させるのではなく)。私は、BooleanProperty dismiss_on_selectでいくつかの構文を試しましたが、それを理解できないようです。私はPythonとKivyが初めてです。 このプロパティはどこでどのように設定できますか?おかげkivyドロップダウンが自動的に解除される

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

DropDownauto_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を、*引数): デフupdate_dropdown(自己、auto_dismiss = False、dismiss_on_select = False、* args): – Hector

+0

@Hector 'MultiSelectSpinner'は' DropDown'ですか?いいえ。「DropDown」はどこですか? 'self.dropdown = DropDown()'なので、ランダムなものの '__init__'ではなく、_that_オブジェクトを更新します。 :P – KeyWeeUsr

関連する問題