我想创建一个包含3个其他DropDowns的DropDown,每个都包含3个按钮。
我希望第一个DropDown打开另外三个DropDowns,当我们点击其中一个时,三个按钮出现,并且在任何情况下当一个按钮出现时,它是向下的,没有显示错误。当你第二次点击下拉菜单时,它会隐藏它的子窗口小部件。
我使用这种方式来创建一个下拉列表:
.py:
from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.properties import StringProperty
class MyScreenManager(ScreenManager):
button_text = StringProperty('Show possibilities')
def __init__(self, **kwargs):
super(MyScreenManager, self).__init__(**kwargs)
self.dropdown = CustomDropDown(self)
def open_drop_down(self, widget):
self.dropdown.open(widget)
class MyScreen(Screen):
def __init__(self, **kwargs):
super(MyScreen, self).__init__(**kwargs)
class CustomDropDown(DropDown):
def __init__(self, screen_manager, **kwargs):
super(CustomDropDown, self).__init__(**kwargs)
self.sm = screen_manager
def on_select(self, data):
self.sm.button_text = data
Builder.load_file("debug.kv")
class MyAppli(App):
def build(self):
return MyScreenManager()
if __name__ == '__main__':
MyAppli().run()
.kv:
<MyScreenManager>:
MyScreen:
AnchorLayout:
anchor_x: 'center'
anchor_y: 'top'
Button:
text: root.button_text
size:(200,50)
size_hint:(None,None)
on_release: root.open_drop_down(self)
<CustomDropDown>:
Button:
text:"Item 1"
size:(200,50)
size_hint:(None,None)
on_release: root.select("ONE")
Button:
text:"Item 2"
size:(200,50)
size_hint:(None,None)
on_release: root.select(self.text)
Button:
text:"Item 3"
size:(200,50)
size_hint:(None,None)
on_release: root.select("THREE")
发布于 2017-12-22 08:13:14
添加另一个自定义下拉类,并添加一个按钮方法来打开/关闭第二个下拉列表。open_drop2()
方法执行打开/关闭操作。将padding
添加到每个Button
中,以尝试显示一些级联。额外的级联可以使用相同的方案来完成,例如,添加一个通过CustomDropDown2
中的按钮打开的CustomDropDown3
类。请注意,kv文件中的dismiss_on_select: False
需要确保is2Displayed
属性正确更新。
.py:
from kivy.app import App
from kivy.properties import StringProperty
from kivy.uix.dropdown import DropDown
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
class MyScreenManager(ScreenManager):
button_text = StringProperty('Show possibilities')
def __init__(self, **kwargs):
super(MyScreenManager, self).__init__(**kwargs)
self.dropdown = CustomDropDown1(self)
def open_drop_down(self, widget):
self.dropdown.open(widget)
class MyScreen(Screen):
def __init__(self, **kwargs):
super(MyScreen, self).__init__(**kwargs)
class CustomDropDown1(DropDown):
def __init__(self, screen_manager, **kwargs):
super(CustomDropDown1, self).__init__(**kwargs)
self.sm = screen_manager
self.dropdown2 = CustomDropDown2(self.sm)
self.is2Displayed = False
def on_select(self, data):
self.sm.button_text = data
def open_drop2(self):
if not self.is2Displayed:
self.dropdown2.open(self)
self.is2Displayed = True
else:
self.dropdown2.dismiss()
self.is2Displayed = False
class CustomDropDown2(DropDown):
def __init__(self, screen_manager, **kwargs):
super(CustomDropDown2, self).__init__(**kwargs)
self.sm = screen_manager
def on_select(self, data):
self.sm.button_text = data
Builder.load_file("debug.kv")
class MyAppli(App):
def build(self):
return MyScreenManager()
if __name__ == '__main__':
MyAppli().run()
.kv:
<MyScreenManager>:
MyScreen:
FloatLayout:
Button:
text: root.button_text
size: (200, 50)
size_hint:(None,None)
pos_hint: {'center_x': 0.5, 'top': 1.0}
on_release: root.open_drop_down(self)
<CustomDropDown1>:
padding: [0,0,0,0]
Button:
text:"Item 1"
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (10,0)
on_release: root.select(self.text)
Button:
text:"Item 2"
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (10,0)
on_release: root.open_drop2()
Button:
text:"Item 3"
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (10,0)
on_release: root.select(self.text)
<CustomDropDown2>:
dismiss_on_select: False
Button:
text:"Item 1,2"
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (50,0)
on_release: root.select(self.text)
Button:
text:"Item 2,2"
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (50,0)
on_release: root.select(self.text)
Button:
text:"Item 3,2"
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (50,0)
on_release: root.select(self.text)
https://stackoverflow.com/questions/47893756
复制相似问题