在KV代码中更改嵌套属性

Change nested property in KV code

在我的 KV 文件中,我在 window 上创建了一个 Spinner 小部件,其中包含大约 10 个项目。但是,当我打开下拉菜单时,它会填满 window.

的整个垂直 space

我在网上找到了一些解决方案,但它们只显示直接 Python 代码。

示例:

spinner = Spinner(text='Test', values=('Hi', 'how', 'are', 'you', '?'))

spinner.dropdown_cls.max_height = 100

这是我当前的 KV 代码:

Spinner:
    size_hint_x: None
    width: 300
    font_size: 30
    text: "Static"
    values: "Static", "Breathing", "Spectrum Cycle", "Rainbow", "Wipe", "Bullet", "Strobe", "Starlight", "Nightlight"

我的问题是如何在我的 KV 代码中设置 'dropdown_cls.max_height' 属性?

解决方案

在 kv 文件中,执行以下操作。有关详细信息,请参阅代码段和示例。

下拉菜单 max_height

创建 class 规则,<MyDropdown@DropDown>: 并添加 max_height: 100

<MyDropdown@DropDown>:
    max_height: 100

微调器填充整个垂直方向 window space

size_hint_x: None 替换为 size_hint: (None, None) 以防止 Spinner 填充 window.

的整个垂直 space

例子

main.py

from kivy.lang import Builder
from kivy.base import runTouchApp

runTouchApp(Builder.load_string('''
#:import Factory kivy.factory.Factory

<MySpinnerOptions@SpinnerOption>:
    background_color: .4, .4, .4, 1

<MyDropdown@DropDown>:
    max_height: 100

<MySpinner@Spinner>:
    size_hint: (None, None)
    width: 300
    font_size: 30
    text: "Static"
    values: "Static", "Breathing", "Spectrum Cycle", "Rainbow", "Wipe", "Bullet", "Strobe", "Starlight", "Nightlight"

    dropdown_cls: Factory.MyDropdown
    option_cls: Factory.MySpinnerOptions

GridLayout:
    cols: 1

    MySpinner:

'''))

输出