繁体   English   中英

如何在kivy-language中正确编码下拉列表?

[英]How to code drop-down list properly in kivy-language?

我正在测试下拉列表以删除我的另一个代码中的一些按钮,但我无法让它工作。 在 kivy 的主页上,当谈到 kv lang 时,解释真的很肤浅。

我想做的是这个,按钮更少。 但我想在 kv lang 中做到这一点。 在我的测试代码中,下拉列表被“打开”,但它实际上什么也没显示。 你必须点击应该是一个按钮的文本片段才能关闭它,然后它就不会再打开了。

我如何正确编码?

这是我的 kv 代码:

<CustomDropDown>:

    Button:
        id: btn
        text: 'hello'
        on_release: dropdown.open(self)

    DropDown:
        id: dropdown
        size_hint_y: None
        on_select: btn.text = "{}".format(args)
        Button:
            text: 'btn 1'
            on_release: dropdown.select(self.text)

        Button:
            text: 'btn 2'
            on_release: dropdown.select(self.text)

        Button:
            text: 'btn 3'
            on_release: dropdown.select(self.text)

这是我的 Python 代码:

from kivy.app import App
from kivy.uix.widget import Widget


class CustomDropDown(Widget):
    pass


class TestesApp(App):
    def build(self):
        return CustomDropDown()


if __name__ == "__main__":
    TestesApp().run()

您可以创建CustomDropDown并将其作为WidgetProperty存储在kv ,然后CustomDropDown open()它。 这是您的代码的修改版本:

from kivy.app import App
from kivy.lang import Builder

kv = '''
#:import Factory kivy.factory.Factory

FloatLayout:
    Button:
        dropdown: Factory.CustomDropDown()
        id: btn
        pos_hint: {'center_x':0.5, 'center_y':0.5}
        size_hint: None, None
        size: 100, 44
        text: 'hello'
        on_release: self.dropdown.open(self)

<CustomDropDown@DropDown>:
    id: dropdown
    size_hint_y: None
    on_select: app.root.ids.btn.text = "{}".format(args[1])
    Button:
        text: 'btn 1'
        on_release: dropdown.select(self.text)
        size_hint_y: None
        height: 44

    Button:
        text: 'btn 2'
        on_release: dropdown.select(self.text)
        size_hint_y: None
        height: 44

    Button:
        text: 'btn 3'
        on_release: dropdown.select(self.text)
        size_hint_y: None
        height: 44
'''


class TestesApp(App):
    def build(self):
        return Builder.load_string(kv)


if __name__ == "__main__":
    TestesApp().run()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM