有没有办法限制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构造函数中指定它,但是我改变了这个,因为当时可能存在最终大小尚未知晓的问题。事实并非如此,因为它仍然无法发挥作用。
答案 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)