それぞれ3つのボタンを含む3つのドロップダウンを含むドロップダウンを作成したいと思います。Python KIVY:再帰的ドロップダウン
3つのDropDownをさらに開くようにしたいのですが、そのうちの1つをクリックすると、3つのボタンが表示され、いずれの場合でも、ボタンが表示されます。あなたが2回目のドロップダウンをクリックすると、子ウィジェットが隠されます。
私はドロップダウンリストを作成するには、この方法を使用しています:
の.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")
はどうもありがとうございました。コードを実行してアイテム2をクリックすると、2番目のドロップダウンがアイテム3の下に表示されます。 2番目のドロップダウンを親(項目2)の下に表示させ、項目3を押し下げることは可能ですか? –
私はDropDownを使ってそれが可能だとは思わない。 DropDownは、GridLayoutの非常にシンプルなサブクラスであり、多くの装飾がありません。より好きなことをしたい場合は、DropDownの使用を排除して、Pythonコードでメイン画面からボタンを追加/削除するだけです。 –