如何在不选择任何内容的情况下关闭kivy中的下拉菜单
how to dismiss the dropdown menu in kivy without selecting anything
我稍微修改了此处找到的代码 (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)
该代码与原始代码一样工作正常:当我按下主按钮时,下拉菜单打开,当我 select 菜单中的某个项目或单击菜单外的某处时,它会消失。还行吧。
我的问题是:
当我第二次按下主按钮时,下拉菜单不会消失(关闭)。当我这样做时,菜单再次打开......
有什么方法可以让下拉菜单在再次单击主按钮时消失吗?
提前致谢。
您可以创建自己的状态布尔变量来查看下拉列表是打开还是关闭。这样您就可以根据需要使用下拉菜单,并在 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()
我稍微修改了此处找到的代码 (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)
该代码与原始代码一样工作正常:当我按下主按钮时,下拉菜单打开,当我 select 菜单中的某个项目或单击菜单外的某处时,它会消失。还行吧。
我的问题是: 当我第二次按下主按钮时,下拉菜单不会消失(关闭)。当我这样做时,菜单再次打开......
有什么方法可以让下拉菜单在再次单击主按钮时消失吗? 提前致谢。
您可以创建自己的状态布尔变量来查看下拉列表是打开还是关闭。这样您就可以根据需要使用下拉菜单,并在 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()