Kivy - 下拉列表
Kivy 中的下拉小部件与其他 GUI 工具包中的类似小部件有很大不同。 Kivy 的下拉菜单不仅显示标签,还显示任何其他小部件,例如按钮、图像等。
DropDown 类在"kivy.uix.dropdown"模块中定义。
from kivy.uix.dropdown import DropDown dropdown=DropDown()
构建下拉列表对象 − 需要以下步骤
在此对象中添加其他小部件时,我们需要通过禁用 size_hint 手动指定高度,从而下拉列表计算所需的面积。
对于 DropDown 中添加的每个子小部件,您需要附加一个回调,该回调将调用下拉列表中的 select() 方法。绑定每个子项并添加到下拉对象。
将下拉列表添加到主按钮,并使用下拉列表类的 open() 方法将其绑定
最后,运行应用程序并单击主按钮。您将看到下拉的子小部件列表。单击其中任何一个即可调用其关联的回调。
示例
在此示例中,我们将演示 Kivy 中的下拉小部件如何工作。我们将使用 for 循环将十个按钮添加到下拉列表中,如下所示 −
dropdown = DropDown() for index in range(1, 11): btn = Button(text ='Button '+str(index), size_hint_y = None, height = 40) btn.bind(on_release = lambda btn: dropdown.select(btn.text)) dropdown.add_widget(btn) box.add_widget(dropdown)
我们在 BoxLayout 中放置一个主按钮,将下拉对象添加到其中,并使用下拉对象的 open() 方法绑定主按钮。
box = BoxLayout(orientation='vertical') mainbutton = Button(text ='Drop Down Button', size_hint=(None, None), size =(250, 75), pos_hint ={'center_x':.5, 'top':1}) box.add_widget(mainbutton) mainbutton.add_widget(dropdown) mainbutton.bind(on_release = dropdown.open)
最后,我们需要监听下拉列表中的选择并将数据分配给按钮文本。
dropdown.bind(on_select = lambda 实例,x:setattr(mainbutton,'text',x))
所有这些步骤都包含在以下代码中的 App 类的 build() 方法中 −
from kivy.app import App from kivy.uix.dropdown import DropDown from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.core.window import Window Window.size = (720, 400) class Drop_down_app(App): def build(self): box = BoxLayout(orientation='vertical') mainbutton = Button( text='Drop Down Button', size_hint=(None, None), size=(250, 75), pos_hint={'center_x': .5, 'top': 1} ) box.add_widget(mainbutton) dropdown = DropDown() for index in range(1, 11): btn = Button(text='Button ' + str(index), size_hint_y=None, height=40) btn.bind(on_release=lambda btn: dropdown.select(btn.text)) dropdown.add_widget(btn) box.add_widget(dropdown) mainbutton.add_widget(dropdown) mainbutton.bind(on_release=dropdown.open) dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x)) return box Drop_down_app().run()
输出
当我们运行上述代码时,主按钮可见。
单击按钮。结果,按钮列表下拉。单击主按钮时,其标题将更改为列表中按钮的标题。