Kivy:限制下拉的大小

时间:2014-09-07 16:43:36

标签: python drop-down-menu kivy

有没有办法限制DropDown框的大小?我想将它限制在4-5个选项的大小,而不是让它一直运行到屏幕的边缘。我开始尝试使用DropDown,因为Spinner没有任何接口这样做。我的用例中的元素也应该这样做,但看起来DropDown会提供更大的灵活性,因为我必须自己编写选择器。不幸的是,更改DropDown的提示或大小似乎什么也没做,因为列表仍然完全展开。

以下是我现在所获得的代码:

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之前的最后两行应该是诀窍,但它们并非如此。我也尝试在DropDown构造函数中指定它,但是我改变了这个,因为当时可能存在最终大小尚未知晓的问题。事实并非如此,因为它仍然无法发挥作用。

1 个答案:

答案 0 :(得分: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)