Kivy:限制下拉菜单大小

0 投票
1 回答
1400 浏览
提问于 2025-04-20 07:30

有没有办法限制下拉框的大小?我想把它限制在4到5个选项的大小,而不是让它一直延伸到屏幕边缘。我开始尝试使用下拉框,因为Spinner没有提供这样的接口。对我来说,这两个元素应该是一样的,但下拉框似乎提供了更多的灵活性,因为我需要自己组合选择器。不幸的是,改变下拉框的提示或大小似乎没有效果,因为列表还是会完全展开。

这是我现在的代码:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown

class DropDownPicker(Button):
    def __init__(self, listOfChoices, **kwargs):
        result = super(DropDownPicker, self).__init__(**kwargs)

        self.text='Select'

        pickerList = DropDown()

        for item in listOfChoices:
            choiceButton = Button(text=item, size_hint_y=None, height=25)
            choiceButton.bind(on_release=lambda btn: pickerList.select(btn.text))
            pickerList.add_widget(choiceButton)

        self.bind(on_release=pickerList.open)
        pickerList.bind(on_select=lambda instance, x: setattr(self, 'text', x))

        pickerList.size_hint_y = None
        pickerList.size = (0, 100)

        return result

class TestApp(App):
    def build(self):
        choices = []
        for x in range(50):
            choices.append("Choice " + str(x))
        return DropDownPicker(choices)

if __name__ == '__main__':
    TestApp().run()

return之前的最后两行应该能解决这个问题,但实际上并没有。我还尝试在下拉框的构造函数中指定这个参数,不过我后来改变了这个想法,因为当时可能存在最终大小尚未确定的问题。但事实证明,这并不是问题,因为它还是不工作。

1 个回答

1

试着修改一下 size_hint_y 这个属性,不要把它设置为 None(这是默认值),而是设置成一个小数值,比如:

from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.base import runTouchApp

dropdown = DropDown()
dropdown.size_hint_y = 0.5
for index in range(100):
    btn = Button(text='Value %d' % index, size_hint_y=None, height=44)
    btn.bind(on_release=lambda btn: dropdown.select(btn.text))
    dropdown.add_widget(btn)

mainbutton = Button(text='Hello', size_hint=(None, None))
mainbutton.bind(on_release=dropdown.open)

dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))

runTouchApp(mainbutton)

撰写回答