2017-02-26 5 views
2

ここで見つけたコードを少し修正しました(Creating DropDown in kivy with only kv file)。何も選択せずにkivyのドロップダウンメニューを解除する方法

これは、Pythonのコードです:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 

class CustomDropDown(BoxLayout): 
    pass 

class ttddkvApp(App): 
    def build(self): 
     return CustomDropDown() 

if __name__=='__main__': 
    ttddkvApp().run() 

と、これはKVコードです:

<CustomDropDown>: 

    Button: 
     id: mainbtn 
     text: 'Difficulty Level' 
     on_release: dropdown.open(self) 
     size_hint_y: None 
     height: 50 

    DropDown: 
     id: dropdown 
     on_parent: self.dismiss() 
     on_select: mainbtn.text = '{}'.format(args[1]) 
     Button: 
      text: 'easy' 
      size_hint_y: None 
      height: 50 
      on_release: dropdown.select(self.text) 

     Button: 
      text: 'difficult' 
      size_hint_y: None 
      height: 50 
      on_release: dropdown.select(self.text) 

元のコードがするようにコードが正常に動作します:私はメインボタンにドロップダウンメニューを押すと、メニュー内のアイテムを選択するか、メニューの外のどこかをクリックすると消えます。これで結構です。

私の問題は次のとおりです。 2回目のメインボタンを押すとドロップダウンメニューが消えません。私がこれを行うと、メニューが再び開きます...

メインボタンを2回クリックしてドロップダウンメニューを消す方法はありますか? ありがとうございます。

答えて

1

あなた自身の状態ブール変数を作成して、ドロップダウンが開いているか閉じているかを確認できます。そうすれば、kvlangの条件で、ドロップダウンを必要に応じて行うことができます。
コードの書き換え例:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 
from kivy.properties import BooleanProperty 


Builder.load_string(''' 

<CustomDropDown>: 

    Button: 
     id: mainbtn 
     text: 'Difficulty Level' 
     on_release: 
      if not root.state: dropdown.open(self); root.state = True 
      else: dropdown.dismiss(); root.state = False 
     size_hint_y: None 
     height: 50 

    DropDown: 
     id: dropdown 
     on_parent: 
      self.dismiss() 
     on_select: mainbtn.text = '{}'.format(args[1]); root.state = False 
     Button: 
      text: 'easy' 
      size_hint_y: None 
      height: 50 
      on_release: dropdown.select(self.text) 

     Button: 
      text: 'difficult' 
      size_hint_y: None 
      height: 50 
      on_release: dropdown.select(self.text) 

''') 

class CustomDropDown(BoxLayout): 
    state = BooleanProperty(False) 

class ttddkvApp(App): 
    def build(self): 
     return CustomDropDown() 

if __name__=='__main__': 
    ttddkvApp().run() 
関連する問題