Python Kivy下拉列表不是';t显示

Python Kivy下拉列表不是';t显示,python,kivy,Python,Kivy,我正在用kivy制作一个类似HTML的“SelectBox”小部件。我希望能够在kvlang中这样定义它: (test.kv) 我制作了如下的小部件,但由于某些原因,当我点击按钮时,什么也没有出现。openDropDown确实会被调用,DropDown似乎有子窗口小部件,但它们没有显示出来 (widgets.py) 这将是应用程序: (TestApp.py) 问题在于SelectOptions的高度。他们需要将size\u hint\u y设置为无,并设置固定高度 有一次我把它们换成了 clas

我正在用kivy制作一个类似HTML的“SelectBox”小部件。我希望能够在kvlang中这样定义它:

(test.kv)

我制作了如下的小部件,但由于某些原因,当我点击按钮时,什么也没有出现。
openDropDown
确实会被调用,
DropDown
似乎有子窗口小部件,但它们没有显示出来

(widgets.py)

这将是应用程序:
(TestApp.py)


问题在于
SelectOption
s的高度。他们需要将
size\u hint\u y
设置为无,并设置固定高度

有一次我把它们换成了

class SelectOption(Label):
    value = StringProperty('')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.size_hint_y = None
        self.height = '32dp'

它成功了。

请提供一个。@JohnAnderson好的,其中的代码有99%是可复制的示例,但我添加了额外的代码,以获得一个带有布局的完整示例。
from kivy.event import EventDispatcher
from kivy.graphics import Color, Rectangle
from kivy.properties import StringProperty
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
from kivy.uix.label import Label
from kivy.uix.stacklayout import StackLayout


class SelectOption(Label):
    value = StringProperty('')

    def __init__(self,
                 *args,
                 **kwargs):
        super().__init__(*args, **kwargs)
        self.background_color = Color(rgba=(1, 1, 1, 1))
        self.bind(on_touch_down=self.select)
        with self.canvas.before:
            Color(self.background_color)
            Rectangle(pos=self.pos, size=self.size)

    def select(self, *args):
        self.parent.select(self.value)


class SelectBox(StackLayout, EventDispatcher):
    label = StringProperty('Select an option')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.dropdown = DropDown()
        self.value = None
        self.button = Button(text=self.label)
        self.button.id = 'dropdown_label'
        self.add_widget(self.button)
        self.button.bind(on_release=self.openDropDown)
        self.dropdown.bind(on_select=self.set_value)

    def on_label(self, instance, value):
        self.button.text = value

    def add_widget(self, child):
        if isinstance(child, SelectOption):
            self.dropdown.add_widget(child)
        else:
            super().add_widget(child)

    def openDropDown(self, *args):
        self.dropdown.open(self)

    def set_value(self, instance, value):
        self.ids.dropdown_label.text = value
from kivy.app import App


class TestApp(App):
    pass

if __name__ == '__main__':
    TestApp().run()
class SelectOption(Label):
    value = StringProperty('')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.size_hint_y = None
        self.height = '32dp'