Kivy:限制下拉菜单大小
有没有办法限制下拉框的大小?我想把它限制在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)