2017-02-26 85 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() 

,這是千伏代碼:

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

代碼工作細如原代碼所做的:當我按下主按鈕的下拉菜單當我在菜單中選擇一個項目或單擊菜單外的某個位置時,它會打開並消失。還行吧。

我的問題是: 當我再次按下主按鈕時,下拉菜單不會消失(關閉)。當我這樣做時,菜單再次打開...

有沒有什麼辦法讓下拉菜單消失白色的第二次點擊主按鈕? 在此先感謝。

回答

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