【问题标题】:how to dismiss the dropdown menu in kivy without selecting anything如何在不选择任何内容的情况下关闭kivy中的下拉菜单
【发布时间】:2017-02-26 13:16:59
【问题描述】:

我稍微修改了此处的代码 (Creating DropDown in kivy with only kv file)。

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

该代码与原始代码一样工作正常:当我按下主按钮时,下拉菜单打开,当我选择菜单中的项目或单击菜单外的某个位置时它消失。还行吧。

我的问题是: 当我第二次按下主按钮时,下拉菜单不会消失(关闭)。当我这样做时,菜单会再次打开……

有什么方法可以让下拉菜单在第二次点击主按钮时消失? 提前致谢。

【问题讨论】:

    标签: python kivy dropdown dismiss


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多